diff options
Diffstat (limited to 'gcc/gcov.c')
-rw-r--r-- | gcc/gcov.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/gcc/gcov.c b/gcc/gcov.c index dffb827bdf7..29907a311e3 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -406,6 +406,11 @@ main (int argc, char **argv) /* Handle response files. */ expandargv (&argc, &argv); + a_names = 10; + names = XNEWVEC (name_map_t, a_names); + a_sources = 10; + sources = XNEWVEC (source_t, a_sources); + argno = process_args (argc, argv); if (optind == argc) print_usage (true); @@ -874,8 +879,6 @@ find_source (const char *file_name) { /* Extend the name map array -- we'll be inserting one or two entries. */ - if (!a_names) - a_names = 10; a_names *= 2; name_map = XNEWVEC (name_map_t, a_names); memcpy (name_map, names, n_names * sizeof (*names)); @@ -894,8 +897,6 @@ find_source (const char *file_name) if (n_sources == a_sources) { - if (!a_sources) - a_sources = 10; a_sources *= 2; src = XNEWVEC (source_t, a_sources); memcpy (src, sources, n_sources * sizeof (*sources)); @@ -1688,10 +1689,15 @@ canonicalize_name (const char *name) { /* '..', we can only elide it and the previous directory, if we're not a symlink. */ - struct stat buf; - + struct stat ATTRIBUTE_UNUSED buf; + *ptr = 0; - if (dd_base == ptr || stat (result, &buf) || S_ISLNK (buf.st_mode)) + if (dd_base == ptr +#if defined (S_ISLNK) + /* S_ISLNK is not POSIX.1-1996. */ + || stat (result, &buf) || S_ISLNK (buf.st_mode) +#endif + ) { /* Cannot elide, or unreadable or a symlink. */ dd_base = ptr + 2 + slash; |