strings: Improve code to detect excessively large minimum string lengths.
[binutils-gdb.git] / binutils / ar.c
index 8885585ef7537450f0f0990a5eeea7eb16bcad8f..0c6ccf909b00b1765a40ba5a8b69b4bf23ea8eea 100644 (file)
@@ -1,5 +1,5 @@
 /* ar.c - Archive modify and extract.
-   Copyright (C) 1991-2021 Free Software Foundation, Inc.
+   Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
@@ -26,7 +26,6 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "libiberty.h"
-#include "progress.h"
 #include "getopt.h"
 #include "aout/ar.h"
 #include "bucomm.h"
@@ -172,6 +171,7 @@ static struct option long_options[] =
   {"version", no_argument, &show_version, 1},
   {"output", required_argument, NULL, OPTION_OUTPUT},
   {"record-libdeps", required_argument, NULL, 'l'},
+  {"thin", no_argument, NULL, 'T'},
   {NULL, no_argument, NULL, 0}
 };
 
@@ -197,10 +197,7 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count)
   if (count == 0)
     {
       for (head = arch->archive_next; head; head = head->archive_next)
-       {
-         PROGRESS (1);
-         function (head);
-       }
+       function (head);
       return;
     }
 
@@ -222,7 +219,6 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count)
        {
          const char * filename;
 
-         PROGRESS (1);
          /* PR binutils/15796: Once an archive element has been matched
             do not match it again.  If the user provides multiple same-named
             parameters on the command line their intent is to match multiple
@@ -337,13 +333,14 @@ usage (int help)
   fprintf (s, _("  [s]          - create an archive index (cf. ranlib)\n"));
   fprintf (s, _("  [l <text> ]  - specify the dependencies of this library\n"));
   fprintf (s, _("  [S]          - do not build a symbol table\n"));
-  fprintf (s, _("  [T]          - make a thin archive\n"));
+  fprintf (s, _("  [T]          - deprecated, use --thin instead\n"));
   fprintf (s, _("  [v]          - be verbose\n"));
   fprintf (s, _("  [V]          - display the version number\n"));
   fprintf (s, _("  @<file>      - read options from <file>\n"));
   fprintf (s, _("  --target=BFDNAME - specify the target object format as BFDNAME\n"));
   fprintf (s, _("  --output=DIRNAME - specify the output directory for extraction operations\n"));
   fprintf (s, _("  --record-libdeps=<text> - specify the dependencies of this library\n"));
+  fprintf (s, _("  --thin       - make a thin archive\n"));
 #if BFD_SUPPORTS_PLUGINS
   fprintf (s, _(" optional:\n"));
   fprintf (s, _("  --plugin <p> - load the specified plugin\n"));
@@ -429,15 +426,12 @@ normalize (const char *file, bfd *abfd)
 
 static const char *output_filename = NULL;
 static FILE *output_file = NULL;
-static bfd *output_bfd = NULL;
 
 static void
 remove_output (void)
 {
   if (output_filename != NULL)
     {
-      if (output_bfd != NULL)
-       bfd_cache_close (output_bfd);
       if (output_file != NULL)
        fclose (output_file);
       unlink_if_ordinary (output_filename);
@@ -750,8 +744,6 @@ main (int argc, char **argv)
        is_ranlib = 0;
     }
 
-  START_PROGRESS (program_name, 0);
-
   if (bfd_init () != BFD_INIT_MAGIC)
     fatal (_("fatal error: libbfd ABI mismatch"));
   set_default_bfd_target ();
@@ -892,14 +884,16 @@ main (int argc, char **argv)
             being operated on.  We shouldn't use 1st slot, but we want
             to avoid having to search all the way to the end of an
             archive with a large number of members at link time.  */
-         new_files = xmalloc ((file_count + 2) * sizeof (char *));
-         new_files[0] = files[0];
-         new_files[1] = LIBDEPS;
-         for (i = 1; i < file_count; i++)
-           new_files[i+1] = files[i];
-         file_count = ++i;
+         new_files = xmalloc ((file_count + 2) * sizeof (*new_files));
+         if (file_count)
+           {
+             new_files[0] = files[0];
+             memcpy (new_files + 1, files, file_count * sizeof (*files));
+           }
+         new_files[file_count != 0] = LIBDEPS;
+         file_count++;
+         new_files[file_count] = NULL;
          files = new_files;
-         files[i] = NULL;
        }
 
       switch (operation)
@@ -951,8 +945,6 @@ main (int argc, char **argv)
        }
     }
 
-  END_PROGRESS (program_name);
-
   xexit (0);
   return 0;
 }
@@ -1033,10 +1025,7 @@ open_inarch (const char *archive_filename, const char *file)
     {
       bfd_nonfatal (archive_filename);
       if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
-       {
-         list_matching_formats (matching);
-         free (matching);
-       }
+       list_matching_formats (matching);
       xexit (1);
     }
 
@@ -1065,7 +1054,6 @@ open_inarch (const char *archive_filename, const char *file)
        next_one;
        next_one = bfd_openr_next_archived_file (arch, next_one))
     {
-      PROGRESS (1);
       *last_one = next_one;
       last_one = &next_one->archive_next;
     }
@@ -1271,8 +1259,6 @@ write_archive (bfd *iarch)
       bfd_fatal (old_name);
     }
 
-  output_bfd = obfd;
-
   bfd_set_format (obfd, bfd_archive);
 
   /* Request writing the archive symbol table unless we've
@@ -1302,7 +1288,6 @@ write_archive (bfd *iarch)
   if (!bfd_close (obfd))
     bfd_fatal (old_name);
 
-  output_bfd = NULL;
   output_filename = NULL;
 
   /* We don't care if this fails; we might be creating the archive.  */
@@ -1611,10 +1596,7 @@ ranlib_touch (const char *archname)
     {
       bfd_nonfatal (archname);
       if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
-       {
-         list_matching_formats (matching);
-         free (matching);
-       }
+       list_matching_formats (matching);
       xexit (1);
     }