X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=binutils%2Fstrings.c;h=3eed63adad544b39b174f89b00eefc6e73f18806;hb=bcef180ccbeb8a6a9301065ede1fe038c3040fa5;hp=06fd8e995b72d1f772129b9d3ec8f2d1d79ab70f;hpb=e36aef42209e57273a78919b81cc7ae62d32107a;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/strings.c b/binutils/strings.c index 06fd8e995b..3eed63adad 100644 --- a/binutils/strings.c +++ b/binutils/strings.c @@ -1,6 +1,6 @@ /* strings -- print the strings of printable characters in files Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -65,7 +65,6 @@ #include "getopt.h" #include "libiberty.h" #include "safe-ctype.h" -#include #include "bucomm.h" #define STRING_ISGRAPHIC(c) \ @@ -80,21 +79,6 @@ extern int errno; /* The BFD section flags that identify an initialized data section. */ #define DATA_FLAGS (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS) -#ifdef HAVE_FOPEN64 -typedef off64_t file_off; -#define file_open(s,m) fopen64(s, m) -#else -typedef off_t file_off; -#define file_open(s,m) fopen(s, m) -#endif -#ifdef HAVE_STAT64 -typedef struct stat64 statbuf; -#define file_stat(f,s) stat64(f, s) -#else -typedef struct stat statbuf; -#define file_stat(f,s) stat(f, s) -#endif - /* Radix for printing addresses (must be 8, 10 or 16). */ static int address_radix; @@ -145,9 +129,9 @@ typedef struct static void strings_a_section (bfd *, asection *, void *); static bfd_boolean strings_object_file (const char *); static bfd_boolean strings_file (char *file); -static void print_strings (const char *, FILE *, file_off, int, int, char *); +static void print_strings (const char *, FILE *, file_ptr, int, int, char *); static void usage (FILE *, int); -static long get_char (FILE *, file_off *, int *, char **); +static long get_char (FILE *, file_ptr *, int *, char **); int main (int, char **); @@ -362,7 +346,7 @@ strings_a_section (bfd *abfd, asection *sect, void *arg) got_a_section = TRUE; print_strings (filename_and_sizep->filename, NULL, sect->filepos, - 0, sectsize, mem); + 0, sectsize, (char *) mem); } free (mem); @@ -414,9 +398,11 @@ strings_object_file (const char *file) static bfd_boolean strings_file (char *file) { - statbuf st; + struct stat st; + + /* get_file_size does not support non-S_ISREG files. */ - if (file_stat (file, &st) < 0) + if (stat (file, &st) < 0) { if (errno == ENOENT) non_fatal (_("'%s': No such file"), file); @@ -434,7 +420,7 @@ strings_file (char *file) { FILE *stream; - stream = file_open (file, FOPEN_RB); + stream = fopen (file, FOPEN_RB); if (stream == NULL) { fprintf (stderr, "%s: ", program_name); @@ -442,7 +428,7 @@ strings_file (char *file) return FALSE; } - print_strings (file, stream, (file_off) 0, 0, 0, (char *) 0); + print_strings (file, stream, (file_ptr) 0, 0, 0, (char *) 0); if (fclose (stream) == EOF) { @@ -466,7 +452,7 @@ strings_file (char *file) MAGICCOUNT is how many characters are in it. */ static long -get_char (FILE *stream, file_off *address, int *magiccount, char **magic) +get_char (FILE *stream, file_ptr *address, int *magiccount, char **magic) { int c, i; long r = EOF; @@ -542,14 +528,14 @@ get_char (FILE *stream, file_off *address, int *magiccount, char **magic) Those characters come at address ADDRESS and the data in STREAM follow. */ static void -print_strings (const char *filename, FILE *stream, file_off address, +print_strings (const char *filename, FILE *stream, file_ptr address, int stop_point, int magiccount, char *magic) { char *buf = (char *) xmalloc (sizeof (char) * (string_min + 1)); while (1) { - file_off start; + file_ptr start; int i; long c; @@ -562,7 +548,10 @@ print_strings (const char *filename, FILE *stream, file_off address, { c = get_char (stream, &address, &magiccount, &magic); if (c == EOF) - return; + { + free (buf); + return; + } if (! STRING_ISGRAPHIC (c)) /* Found a non-graphic. Try again starting with next char. */ goto tryline; @@ -651,6 +640,7 @@ print_strings (const char *filename, FILE *stream, file_off address, putchar ('\n'); } + free (buf); } static void