X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=binutils%2Farsup.c;h=0836496180a36c7fad96d5e7a187407c1393c593;hb=1296bc99b1bf5da38be18ac1fdf6ad8d1b697e6b;hp=f7138eb88ed532b852054ff6a802d38e490c208b;hpb=a8da6403829d6f87867da6a737dfdaa736a37dfa;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/arsup.c b/binutils/arsup.c index f7138eb88e..0836496180 100644 --- a/binutils/arsup.c +++ b/binutils/arsup.c @@ -1,6 +1,5 @@ /* arsup.c - Archive support for MRI compatibility - Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, - 2004, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 1992-2019 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -39,6 +38,7 @@ static void ar_directory_doer (bfd *, bfd *); static void ar_addlib_doer (bfd *, bfd *); extern int verbose; +extern int deterministic; static bfd *obfd; static char *real_name; @@ -96,7 +96,7 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list) static void ar_directory_doer (bfd *abfd, bfd *ignore ATTRIBUTE_UNUSED) { - print_arelt_descr(outfile, abfd, verbose); + print_arelt_descr(outfile, abfd, verbose, FALSE); } void @@ -149,13 +149,20 @@ maybequit (void) void ar_open (char *name, int t) { - char *tname = (char *) xmalloc (strlen (name) + 10); + char *tname; const char *bname = lbasename (name); real_name = name; /* Prepend tmp- to the beginning, to avoid file-name clashes after truncation on filesystems with limited namespaces (DOS). */ - sprintf (tname, "%.*stmp-%s", (int) (bname - name), name, bname); + if (asprintf (&tname, "%.*stmp-%s", (int) (bname - name), name, bname) == -1) + { + fprintf (stderr, _("%s: Can't allocate memory for temp name (%s)\n"), + program_name, strerror(errno)); + maybequit (); + return; + } + obfd = bfd_openw (tname, NULL); if (!obfd) @@ -254,8 +261,13 @@ ar_addmod (struct list *list) { while (list) { - bfd *abfd = bfd_openr (list->name, NULL); + bfd *abfd; +#if BFD_SUPPORTS_PLUGINS + abfd = bfd_openr (list->name, "plugin"); +#else + abfd = bfd_openr (list->name, NULL); +#endif if (!abfd) { fprintf (stderr, _("%s: can't open file %s\n"), @@ -334,6 +346,9 @@ ar_save (void) { char *ofilename = xstrdup (bfd_get_filename (obfd)); + if (deterministic > 0) + obfd->flags |= BFD_DETERMINISTIC_OUTPUT; + bfd_close (obfd); smart_rename (ofilename, real_name, 0); @@ -364,7 +379,7 @@ ar_replace (struct list *list) if (FILENAME_CMP (member->filename, list->name) == 0) { /* Found the one to replace. */ - bfd *abfd = bfd_openr (list->name, 0); + bfd *abfd = bfd_openr (list->name, NULL); if (!abfd) { @@ -388,7 +403,7 @@ ar_replace (struct list *list) if (!found) { - bfd *abfd = bfd_openr (list->name, 0); + bfd *abfd = bfd_openr (list->name, NULL); fprintf (stderr,_("%s: can't find module file %s\n"), program_name, list->name); @@ -470,7 +485,7 @@ ar_extract (struct list *list) if (!found) { - bfd_openr (list->name, 0); + bfd_openr (list->name, NULL); fprintf (stderr, _("%s: can't find module file %s\n"), program_name, list->name); }