diff options
author | Alan Modra <amodra@bigpond.net.au> | 2010-12-10 08:51:42 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2010-12-10 08:51:42 +0000 |
commit | 134b2fc7b094ae01809656c3547929d4808d3e95 (patch) | |
tree | 5771505b719e9ecc4e36cd6f8055034946eb2777 /binutils/binemul.c | |
parent | 70978925b81fec0f8a8db61b9de73ead19bdc73a (diff) | |
download | binutils-redhat-134b2fc7b094ae01809656c3547929d4808d3e95.tar.gz |
* 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 35587db26b..6bfcb15a85 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; } |