1 /* Binutils emulation layer. 2 Copyright 2002, 2003, 2007, 2008 Free Software Foundation, Inc. 3 Written by Tom Rix, Red Hat Inc. 4 5 This file is part of GNU Binutils. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 20 MA 02110-1301, USA. */ 21 22 #include "binemul.h" 23 24 extern bin_emulation_xfer_type bin_dummy_emulation; 25 26 void 27 ar_emul_usage (FILE *fp) 28 { 29 if (bin_dummy_emulation.ar_usage) 30 bin_dummy_emulation.ar_usage (fp); 31 } 32 33 void 34 ar_emul_default_usage (FILE *fp) 35 { 36 AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp); 37 /* xgettext:c-format */ 38 fprintf (fp, _(" No emulation specific options\n")); 39 } 40 41 bfd_boolean 42 ar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose, 43 bfd_boolean flatten) 44 { 45 if (bin_dummy_emulation.ar_append) 46 return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose, 47 flatten); 48 49 return FALSE; 50 } 51 52 static bfd_boolean 53 do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd, 54 bfd_boolean verbose, bfd_boolean flatten) 55 { 56 /* When flattening, add the members of an archive instead of the 57 archive itself. */ 58 if (flatten && bfd_check_format (new_bfd, bfd_archive)) 59 { 60 bfd *elt; 61 bfd_boolean added = FALSE; 62 63 for (elt = bfd_openr_next_archived_file (new_bfd, NULL); 64 elt; 65 elt = bfd_openr_next_archived_file (new_bfd, elt)) 66 { 67 if (do_ar_emul_default_append (after_bfd, elt, verbose, TRUE)) 68 { 69 added = TRUE; 70 after_bfd = &((*after_bfd)->archive_next); 71 } 72 } 73 74 return added; 75 } 76 77 AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename); 78 79 new_bfd->archive_next = *after_bfd; 80 *after_bfd = new_bfd; 81 82 return TRUE; 83 } 84 85 bfd_boolean 86 ar_emul_default_append (bfd **after_bfd, char *file_name, 87 bfd_boolean verbose, bfd_boolean flatten) 88 { 89 bfd *new_bfd; 90 91 new_bfd = bfd_openr (file_name, NULL); 92 AR_EMUL_ELEMENT_CHECK (new_bfd, file_name); 93 return do_ar_emul_default_append (after_bfd, new_bfd, verbose, flatten); 94 } 95 96 bfd_boolean 97 ar_emul_replace (bfd **after_bfd, char *file_name, bfd_boolean verbose) 98 { 99 if (bin_dummy_emulation.ar_replace) 100 return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose); 101 102 return FALSE; 103 } 104 105 bfd_boolean 106 ar_emul_default_replace (bfd **after_bfd, char *file_name, 107 bfd_boolean verbose) 108 { 109 bfd *temp; 110 111 temp = *after_bfd; 112 *after_bfd = bfd_openr (file_name, NULL); 113 114 AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name); 115 AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name); 116 117 (*after_bfd)->archive_next = temp; 118 119 return TRUE; 120 } 121 122 bfd_boolean 123 ar_emul_parse_arg (char *arg) 124 { 125 if (bin_dummy_emulation.ar_parse_arg) 126 return bin_dummy_emulation.ar_parse_arg (arg); 127 128 return FALSE; 129 } 130 131 bfd_boolean 132 ar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED) 133 { 134 return FALSE; 135 } 136