X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=binutils%2Farsup.c;h=a668f270f1a11c3cbc0c77be6419910ece47de7b;hb=0ac553107c601cc9c4c340338e0fc7e0ce8375cc;hp=da51e1602f712afd8d5616b602d9a2234a8c90f9;hpb=4b95cf5c0c75d6efc1b2f96af72317aecca079f1;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/arsup.c b/binutils/arsup.c index da51e1602f..a668f270f1 100644 --- a/binutils/arsup.c +++ b/binutils/arsup.c @@ -1,5 +1,5 @@ /* arsup.c - Archive support for MRI compatibility - Copyright (C) 1992-2014 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -77,8 +77,8 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list) for (head = arch->archive_next; head; head = head->archive_next) { - if (head->filename != NULL - && FILENAME_CMP (ptr->name, head->filename) == 0) + if (bfd_get_filename (head) != NULL + && FILENAME_CMP (ptr->name, bfd_get_filename (head)) == 0) { found = TRUE; function (head, prev); @@ -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"), @@ -299,7 +311,7 @@ ar_delete (struct list *list) while (member) { - if (FILENAME_CMP(member->filename, list->name) == 0) + if (FILENAME_CMP (bfd_get_filename (member), list->name) == 0) { *prev = member->archive_next; found = 1; @@ -364,10 +376,10 @@ ar_replace (struct list *list) while (member) { - if (FILENAME_CMP (member->filename, list->name) == 0) + if (FILENAME_CMP (bfd_get_filename (member), list->name) == 0) { /* Found the one to replace. */ - bfd *abfd = bfd_openr (list->name, 0); + bfd *abfd = bfd_openr (list->name, NULL); if (!abfd) { @@ -391,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); @@ -462,7 +474,7 @@ ar_extract (struct list *list) while (member && !found) { - if (FILENAME_CMP (member->filename, list->name) == 0) + if (FILENAME_CMP (bfd_get_filename (member), list->name) == 0) { extract_file (member); found = 1; @@ -473,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); }