diff options
author | Alan Modra <amodra@gmail.com> | 2010-12-10 08:51:47 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2010-12-10 08:51:47 +0000 |
commit | 13485ea2e5d38cb002c28110f90fe9767c8e2fb8 (patch) | |
tree | 9c4ba9933002bc7bea893aa5e8c1e59fe73594c5 /binutils/binemul.c | |
parent | b9e33f301ea91a4d15666e882acd35e65ec68d41 (diff) | |
download | binutils-13485ea2e5d38cb002c28110f90fe9767c8e2fb8.zip binutils-13485ea2e5d38cb002c28110f90fe9767c8e2fb8.tar.gz binutils-13485ea2e5d38cb002c28110f90fe9767c8e2fb8.tar.bz2 |
* binemul.h (do_ar_emul_append): Declare.
* binemul.c (any_ok): New function.
(do_ar_emul_append): Rename from do_ar_emul_default_append. Make
global, add check arg. Adjust callers.
(ar_emul_default_replace): Tidy.
* configure.tgt (powerpc-*-aix[5-9]*,rs6000-*-aix[5-9]*): Use
bin_aix_emulation.
* emul_aix.c (bin_aix5_emulation, ar_emul_aix_internal): Delete.
(ar_emul_aix5_append, ar_emul_aix5_replace): Delete.
(check_aix): New function.
(ar_emul_aix_append, ar_emul_aix_replace): Rewrite.
Diffstat (limited to 'binutils/binemul.c')
-rw-r--r-- | binutils/binemul.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/binutils/binemul.c b/binutils/binemul.c index 35587db..6bfcb15 100644 --- a/binutils/binemul.c +++ b/binutils/binemul.c @@ -1,5 +1,6 @@ /* Binutils emulation layer. - Copyright 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. + Copyright 2002, 2003, 2005, 2007, 2008, 2010 + Free Software Foundation, Inc. Written by Tom Rix, Red Hat Inc. This file is part of GNU Binutils. @@ -50,9 +51,16 @@ ar_emul_append (bfd **after_bfd, char *file_name, const char *target, } 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)) @@ -64,7 +72,7 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd, 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); @@ -74,6 +82,9 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd, return added; } + if (!check (new_bfd)) + return FALSE; + AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename); new_bfd->archive_next = *after_bfd; @@ -91,7 +102,7 @@ ar_emul_default_append (bfd **after_bfd, char *file_name, new_bfd = bfd_openr (file_name, target); 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 @@ -109,15 +120,15 @@ bfd_boolean ar_emul_default_replace (bfd **after_bfd, char *file_name, const char *target, bfd_boolean verbose) { - bfd *temp; + bfd *new_bfd; - temp = *after_bfd; - *after_bfd = bfd_openr (file_name, target); + 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); - (*after_bfd)->archive_next = temp; + new_bfd->archive_next = *after_bfd; + *after_bfd = new_bfd; return TRUE; } |