Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
5219 serge 1
/* Binutils emulation layer.
6324 serge 2
   Copyright (C) 2002-2015 Free Software Foundation, Inc.
5219 serge 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
}