diff options
-rw-r--r-- | gprof/ChangeLog | 6 | ||||
-rw-r--r-- | gprof/corefile.c | 35 |
2 files changed, 27 insertions, 14 deletions
diff --git a/gprof/ChangeLog b/gprof/ChangeLog index a3ac41f..85cbbf6 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,3 +1,9 @@ +2007-01-16 Ben Elliston <bje@au.ibm.com> + + * corefile.c (parse_error): New function. + (read_function_mappings): Check calls to fscanf and report any + errors in parsing the mapping file. + 2006-12-12 Daniel Jacobowitz <dan@codesourcery.com> * Makefile.am (gprof_TEXINFOS): Set. diff --git a/gprof/corefile.c b/gprof/corefile.c index a8620ef..0d90b06 100644 --- a/gprof/corefile.c +++ b/gprof/corefile.c @@ -53,6 +53,13 @@ extern void sparc_find_call (Sym *, bfd_vma, bfd_vma); extern void mips_find_call (Sym *, bfd_vma, bfd_vma); static void +parse_error (const char *filename) +{ + fprintf (stderr, _("%s: unable to parse mapping file %s.\n"), whoami, filename); + done (1); +} + +static void read_function_mappings (const char *filename) { FILE *file = fopen (filename, "r"); @@ -74,21 +81,21 @@ read_function_mappings (const char *filename) matches = fscanf (file, "%[^\n:]", dummy); if (!matches) - { - fprintf (stderr, _("%s: unable to parse mapping file %s.\n"), - whoami, filename); - done (1); - } + parse_error (filename); /* Just skip messages about files with no symbols. */ if (!strncmp (dummy, "No symbols in ", 14)) { - fscanf (file, "\n"); + matches = fscanf (file, "\n"); + if (matches == EOF) + parse_error (filename); continue; } /* Don't care what else is on this line at this point. */ - fscanf (file, "%[^\n]\n", dummy); + matches = fscanf (file, "%[^\n]\n", dummy); + if (!matches) + parse_error (filename); count++; } @@ -108,16 +115,14 @@ read_function_mappings (const char *filename) matches = fscanf (file, "%[^\n:]", dummy); if (!matches) - { - fprintf (stderr, _("%s: unable to parse mapping file %s.\n"), - whoami, filename); - done (1); - } + parse_error (filename); /* Just skip messages about files with no symbols. */ if (!strncmp (dummy, "No symbols in ", 14)) { - fscanf (file, "\n"); + matches = fscanf (file, "\n"); + if (matches == EOF) + parse_error (filename); continue; } @@ -126,7 +131,9 @@ read_function_mappings (const char *filename) strcpy (symbol_map[count].file_name, dummy); /* Now we need the function name. */ - fscanf (file, "%[^\n]\n", dummy); + matches = fscanf (file, "%[^\n]\n", dummy); + if (!matches) + parse_error (filename); tmp = strrchr (dummy, ' ') + 1; symbol_map[count].function_name = xmalloc (strlen (tmp) + 1); strcpy (symbol_map[count].function_name, tmp); |