/* 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.
#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
-#include "progress.h"
#include "getopt.h"
#include "aout/ar.h"
#include "bucomm.h"
{"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}
};
if (count == 0)
{
for (head = arch->archive_next; head; head = head->archive_next)
- {
- PROGRESS (1);
- function (head);
- }
+ function (head);
return;
}
{
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
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"));
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);
is_ranlib = 0;
}
- START_PROGRESS (program_name, 0);
-
if (bfd_init () != BFD_INIT_MAGIC)
fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
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)
}
}
- END_PROGRESS (program_name);
-
xexit (0);
return 0;
}
{
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);
}
next_one;
next_one = bfd_openr_next_archived_file (arch, next_one))
{
- PROGRESS (1);
*last_one = next_one;
last_one = &next_one->archive_next;
}
bfd_fatal (old_name);
}
- output_bfd = obfd;
-
bfd_set_format (obfd, bfd_archive);
/* Request writing the archive symbol table unless we've
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. */
{
bfd_nonfatal (archname);
if (bfd_get_error () == bfd_error_file_ambiguously_recognized)
- {
- list_matching_formats (matching);
- free (matching);
- }
+ list_matching_formats (matching);
xexit (1);
}