Subversion Repositories Kolibri OS

Rev

Rev 5219 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* Binutils emulation layer.
  2.    Copyright (C) 2002-2015 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, const char *target,
  43.                 bfd_boolean verbose, bfd_boolean flatten)
  44. {
  45.   if (bin_dummy_emulation.ar_append)
  46.     return bin_dummy_emulation.ar_append (after_bfd, file_name, target,
  47.                                           verbose, flatten);
  48.  
  49.   return FALSE;
  50. }
  51.  
  52. static bfd_boolean
  53. any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
  54. {
  55.   return TRUE;
  56. }
  57.  
  58. bfd_boolean
  59. do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
  60.                    bfd_boolean verbose, bfd_boolean flatten,
  61.                    bfd_boolean (*check) (bfd *))
  62. {
  63.   /* When flattening, add the members of an archive instead of the
  64.      archive itself.  */
  65.   if (flatten && bfd_check_format (new_bfd, bfd_archive))
  66.     {
  67.       bfd *elt;
  68.       bfd_boolean added = FALSE;
  69.  
  70.       for (elt = bfd_openr_next_archived_file (new_bfd, NULL);
  71.            elt;
  72.            elt = bfd_openr_next_archived_file (new_bfd, elt))
  73.         {
  74.           if (do_ar_emul_append (after_bfd, elt, verbose, TRUE, check))
  75.             {
  76.               added = TRUE;
  77.               after_bfd = &((*after_bfd)->archive_next);
  78.             }
  79.         }
  80.  
  81.       return added;
  82.     }
  83.  
  84.   if (!check (new_bfd))
  85.     return FALSE;
  86.  
  87.   AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename);
  88.  
  89.   new_bfd->archive_next = *after_bfd;
  90.   *after_bfd = new_bfd;
  91.  
  92.   return TRUE;
  93. }
  94.  
  95. bfd_boolean
  96. ar_emul_default_append (bfd **after_bfd, char *file_name,
  97.                         const char *target, bfd_boolean verbose,
  98.                         bfd_boolean flatten)
  99. {
  100.   bfd *new_bfd;
  101.  
  102.   new_bfd = bfd_openr (file_name, target);
  103.   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
  104.   return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
  105. }
  106.  
  107. bfd_boolean
  108. ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
  109.                  bfd_boolean verbose)
  110. {
  111.   if (bin_dummy_emulation.ar_replace)
  112.     return bin_dummy_emulation.ar_replace (after_bfd, file_name,
  113.                                            target, verbose);
  114.  
  115.   return FALSE;
  116. }
  117.  
  118. bfd_boolean
  119. ar_emul_default_replace (bfd **after_bfd, char *file_name,
  120.                          const char *target, bfd_boolean verbose)
  121. {
  122.   bfd *new_bfd;
  123.  
  124.   new_bfd = bfd_openr (file_name, target);
  125.   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
  126.  
  127.   AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
  128.  
  129.   new_bfd->archive_next = *after_bfd;
  130.   *after_bfd = new_bfd;
  131.  
  132.   return TRUE;
  133. }
  134.  
  135. bfd_boolean
  136. ar_emul_parse_arg (char *arg)
  137. {
  138.   if (bin_dummy_emulation.ar_parse_arg)
  139.     return bin_dummy_emulation.ar_parse_arg (arg);
  140.  
  141.   return FALSE;
  142. }
  143.  
  144. bfd_boolean
  145. ar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED)
  146. {
  147.   return FALSE;
  148. }
  149.