aoutx.h tidy
authorAlan Modra <amodra@gmail.com>
Fri, 7 Nov 2014 09:48:25 +0000 (20:18 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 7 Nov 2014 10:10:41 +0000 (20:40 +1030)
Save a multiplication, and any concern that the buffer allocation
might be smaller than the amount read (as it could be if the header
size isn't a multiple of EXTERNAL_NLIST_SIZE).

* aoutx.h (aout_get_external_symbols): Tidy allocation of symbol buffer.

bfd/ChangeLog
bfd/aoutx.h

index 27edf4f..a9c8c16 100644 (file)
@@ -1,5 +1,9 @@
 2014-11-07  Alan Modra  <amodra@gmail.com>
 
+       * aoutx.h (aout_get_external_symbols): Tidy allocation of symbol buffer.
+
+2014-11-07  Alan Modra  <amodra@gmail.com>
+
        * archive.c (_bfd_slurp_extended_name_table): Revert bfd_get_size check.
        * coffcode.h (coff_set_alignment_hook): Likewise.
        (coff_slurp_line_table): Likewise.
index bef59b4..9385a98 100644 (file)
@@ -1300,14 +1300,14 @@ aout_get_external_symbols (bfd *abfd)
     {
       bfd_size_type count;
       struct external_nlist *syms;
+      bfd_size_type amt = exec_hdr (abfd)->a_syms;
 
-      count = exec_hdr (abfd)->a_syms / EXTERNAL_NLIST_SIZE;
+      count = amt / EXTERNAL_NLIST_SIZE;
       if (count == 0)
        return TRUE;            /* Nothing to do.  */
 
 #ifdef USE_MMAP
-      if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd),
-                                exec_hdr (abfd)->a_syms,
+      if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd), amt,
                                 &obj_aout_sym_window (abfd), TRUE))
        return FALSE;
       syms = (struct external_nlist *) obj_aout_sym_window (abfd).data;
@@ -1315,20 +1315,16 @@ aout_get_external_symbols (bfd *abfd)
       /* We allocate using malloc to make the values easy to free
         later on.  If we put them on the objalloc it might not be
         possible to free them.  */
-      syms = (struct external_nlist *) bfd_malloc (count * EXTERNAL_NLIST_SIZE);
+      syms = (struct external_nlist *) bfd_malloc (amt);
       if (syms == NULL)
        return FALSE;
 
-      {
-       bfd_size_type amt;
-       amt = exec_hdr (abfd)->a_syms;
-       if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-           || bfd_bread (syms, amt, abfd) != amt)
-         {
-           free (syms);
-           return FALSE;
-         }
-      }
+      if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
+         || bfd_bread (syms, amt, abfd) != amt)
+       {
+         free (syms);
+         return FALSE;
+       }
 #endif
 
       obj_aout_external_syms (abfd) = syms;