From: Ben Elliston Date: Mon, 15 Jan 2007 23:26:08 +0000 (+0000) Subject: * corefile.c (parse_error): New function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=74335607500eaa6894aa7dc8c103d73a85758504;p=binutils-gdb.git * corefile.c (parse_error): New function. (read_function_mappings): Check calls to fscanf and report any errors in parsing the mapping file. --- diff --git a/gprof/ChangeLog b/gprof/ChangeLog index a3ac41fbbf9..85cbbf6e402 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,3 +1,9 @@ +2007-01-16 Ben Elliston + + * 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 * Makefile.am (gprof_TEXINFOS): Set. diff --git a/gprof/corefile.c b/gprof/corefile.c index a8620efc45f..0d90b06ff7e 100644 --- a/gprof/corefile.c +++ b/gprof/corefile.c @@ -52,6 +52,13 @@ extern void tahoe_find_call (Sym *, bfd_vma, bfd_vma); 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) { @@ -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);