* ar.c (open_inarch): Check fwrite return. Use size_t.
authorAlan Modra <amodra@gmail.com>
Fri, 12 Jan 2007 03:12:56 +0000 (03:12 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 12 Jan 2007 03:12:56 +0000 (03:12 +0000)
(extract_file): Likewise.  Remove test for "negative" file size.
* readelf.c (process_program_headers): Check fscanf return.

binutils/ChangeLog
binutils/ar.c
binutils/readelf.c

index e112966f0536a19a0435fc6dbedd195324990084..13d20eb818620d913c8627b4ad1140bd65548a59 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-12  Alan Modra  <amodra@bigpond.net.au>
+
+       * ar.c (open_inarch): Check fwrite return.  Use size_t.
+       (extract_file): Likewise.  Remove test for "negative" file size.
+       * readelf.c (process_program_headers): Check fscanf return.
+
 2007-01-11  H.J. Lu  <hongjiu.lu@intel.com>
 
        * bucomm.c (template_in_dir): Fix typo.
index e48249e3245cce1ffbe74c9109c3f014735af0f7..115224221e6ddea6ad396a5d0aeb04547c4e2c4b 100644 (file)
@@ -777,10 +777,10 @@ open_inarch (const char *archive_filename, const char *file)
 static void
 print_contents (bfd *abfd)
 {
-  int ncopied = 0;
+  size_t ncopied = 0;
   char *cbuf = xmalloc (BUFSIZE);
   struct stat buf;
-  long size;
+  size_t size;
   if (bfd_stat_arch_elt (abfd, &buf) != 0)
     /* xgettext:c-format */
     fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
@@ -795,8 +795,8 @@ print_contents (bfd *abfd)
   while (ncopied < size)
     {
 
-      int nread;
-      int tocopy = size - ncopied;
+      size_t nread;
+      size_t tocopy = size - ncopied;
       if (tocopy > BUFSIZE)
        tocopy = BUFSIZE;
 
@@ -805,7 +805,8 @@ print_contents (bfd *abfd)
        /* xgettext:c-format */
        fatal (_("%s is not a valid archive"),
               bfd_get_filename (bfd_my_archive (abfd)));
-      fwrite (cbuf, 1, nread, stdout);
+      if (fwrite (cbuf, 1, nread, stdout) != nread)
+       fatal ("stdout: %s", strerror (errno));
       ncopied += tocopy;
     }
   free (cbuf);
@@ -826,9 +827,9 @@ extract_file (bfd *abfd)
 {
   FILE *ostream;
   char *cbuf = xmalloc (BUFSIZE);
-  int nread, tocopy;
-  long ncopied = 0;
-  long size;
+  size_t nread, tocopy;
+  size_t ncopied = 0;
+  size_t size;
   struct stat buf;
 
   if (bfd_stat_arch_elt (abfd, &buf) != 0)
@@ -836,10 +837,6 @@ extract_file (bfd *abfd)
     fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
   size = buf.st_size;
 
-  if (size < 0)
-    /* xgettext:c-format */
-    fatal (_("stat returns negative size for %s"), bfd_get_filename (abfd));
-
   if (verbose)
     printf ("x - %s\n", bfd_get_filename (abfd));
 
@@ -888,7 +885,8 @@ extract_file (bfd *abfd)
 
            output_file = ostream;
          }
-       fwrite (cbuf, 1, nread, ostream);
+       if (fwrite (cbuf, 1, nread, ostream) != nread)
+         fatal ("%s: %s", output_filename, strerror (errno));
        ncopied += tocopy;
       }
 
index 8f19a32ed418217c2f99ac448607fd58cacc23d4..a4ade9de11b9c4d573ba3f02cee5f381b2af28cb 100644 (file)
@@ -3520,7 +3520,8 @@ process_program_headers (FILE *file)
                error (_("Internal error: failed to create format string to display program interpreter"));
 
              program_interpreter[0] = 0;
-             fscanf (file, fmt, program_interpreter);
+             if (fscanf (file, fmt, program_interpreter) <= 0)
+               error (_("Unable to read program interpreter name\n"));
 
              if (do_segments)
                printf (_("\n      [Requesting program interpreter: %s]"),