Don't write to inferior_ptid in gnu-nat.c
[deliverable/binutils-gdb.git] / binutils / binemul.c
index 74e5d9c38497d8e928c9d293af85b9440dd01b6c..7c71b5b78c1a25116862696b7dee536f377e1c7d 100644 (file)
@@ -1,5 +1,5 @@
 /* Binutils emulation layer.
 /* Binutils emulation layer.
-   Copyright 2002, 2003, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2020 Free Software Foundation, Inc.
    Written by Tom Rix, Red Hat Inc.
 
    This file is part of GNU Binutils.
    Written by Tom Rix, Red Hat Inc.
 
    This file is part of GNU Binutils.
@@ -39,20 +39,27 @@ ar_emul_default_usage (FILE *fp)
 }
 
 bfd_boolean
 }
 
 bfd_boolean
-ar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose,
-                bfd_boolean flatten)
+ar_emul_append (bfd **after_bfd, char *file_name, const char *target,
+               bfd_boolean verbose, bfd_boolean flatten)
 {
   if (bin_dummy_emulation.ar_append)
 {
   if (bin_dummy_emulation.ar_append)
-    return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose,
-                                          flatten);
+    return bin_dummy_emulation.ar_append (after_bfd, file_name, target,
+                                         verbose, flatten);
 
   return FALSE;
 }
 
 static bfd_boolean
 
   return FALSE;
 }
 
 static bfd_boolean
-do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
-                       bfd_boolean verbose, bfd_boolean flatten)
-  {
+any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+bfd_boolean
+do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
+                  bfd_boolean verbose, bfd_boolean flatten,
+                  bfd_boolean (*check) (bfd *))
+{
   /* When flattening, add the members of an archive instead of the
      archive itself.  */
   if (flatten && bfd_check_format (new_bfd, bfd_archive))
   /* When flattening, add the members of an archive instead of the
      archive itself.  */
   if (flatten && bfd_check_format (new_bfd, bfd_archive))
@@ -64,7 +71,7 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
            elt;
            elt = bfd_openr_next_archived_file (new_bfd, elt))
         {
            elt;
            elt = bfd_openr_next_archived_file (new_bfd, elt))
         {
-          if (do_ar_emul_default_append (after_bfd, elt, verbose, TRUE))
+          if (do_ar_emul_append (after_bfd, elt, verbose, TRUE, check))
             {
               added = TRUE;
               after_bfd = &((*after_bfd)->archive_next);
             {
               added = TRUE;
               after_bfd = &((*after_bfd)->archive_next);
@@ -74,7 +81,10 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
       return added;
     }
 
       return added;
     }
 
-  AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename);
+  if (!check (new_bfd))
+    return FALSE;
+
+  AR_EMUL_APPEND_PRINT_VERBOSE (verbose, bfd_get_filename (new_bfd));
 
   new_bfd->archive_next = *after_bfd;
   *after_bfd = new_bfd;
 
   new_bfd->archive_next = *after_bfd;
   *after_bfd = new_bfd;
@@ -84,37 +94,40 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
 
 bfd_boolean
 ar_emul_default_append (bfd **after_bfd, char *file_name,
 
 bfd_boolean
 ar_emul_default_append (bfd **after_bfd, char *file_name,
-                       bfd_boolean verbose, bfd_boolean flatten)
+                       const char *target, bfd_boolean verbose,
+                       bfd_boolean flatten)
 {
   bfd *new_bfd;
 
 {
   bfd *new_bfd;
 
-  new_bfd = bfd_openr (file_name, NULL);
+  new_bfd = bfd_openr (file_name, target);
   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
-  return do_ar_emul_default_append (after_bfd, new_bfd, verbose, flatten);
+  return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
 }
 
 bfd_boolean
 }
 
 bfd_boolean
-ar_emul_replace (bfd **after_bfd, char *file_name, bfd_boolean verbose)
+ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
+                bfd_boolean verbose)
 {
   if (bin_dummy_emulation.ar_replace)
 {
   if (bin_dummy_emulation.ar_replace)
-    return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose);
+    return bin_dummy_emulation.ar_replace (after_bfd, file_name,
+                                          target, verbose);
 
   return FALSE;
 }
 
 bfd_boolean
 ar_emul_default_replace (bfd **after_bfd, char *file_name,
 
   return FALSE;
 }
 
 bfd_boolean
 ar_emul_default_replace (bfd **after_bfd, char *file_name,
-                        bfd_boolean verbose)
+                        const char *target, bfd_boolean verbose)
 {
 {
-  bfd *temp;
+  bfd *new_bfd;
 
 
-  temp = *after_bfd;
-  *after_bfd = bfd_openr (file_name, NULL);
+  new_bfd = bfd_openr (file_name, target);
+  AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
 
 
-  AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
   AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
 
   AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
 
-  (*after_bfd)->archive_next = temp;
+  new_bfd->archive_next = *after_bfd;
+  *after_bfd = new_bfd;
 
   return TRUE;
 }
 
   return TRUE;
 }
This page took 0.02629 seconds and 4 git commands to generate.