1 /* sysdep.h -- handle host dependencies for the BFD library
2    Copyright (C) 1995-2020 Free Software Foundation, Inc.
3    Written by Cygnus Support.
4 
5    This file is part of BFD, the Binary File Descriptor library.
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 #ifndef BFD_SYSDEP_H
23 #define BFD_SYSDEP_H
24 
25 #ifdef PACKAGE
26 #error sysdep.h must be included in lieu of config.h
27 #endif
28 
29 #include "config.h"
30 
31 #ifdef HAVE_STDDEF_H
32 #include <stddef.h>
33 #endif
34 
35 #include <stdio.h>
36 #include <sys/types.h>
37 
38 #include <errno.h>
39 #if !(defined(errno) || defined(_MSC_VER) && defined(_INC_ERRNO))
40 extern int errno;
41 #endif
42 
43 #ifdef STRING_WITH_STRINGS
44 #include <string.h>
45 #include <strings.h>
46 #else
47 #ifdef HAVE_STRING_H
48 #include <string.h>
49 #else
50 #ifdef HAVE_STRINGS_H
51 #include <strings.h>
52 #else
53 extern char *strchr ();
54 extern char *strrchr ();
55 #endif
56 #endif
57 #endif
58 
59 #ifdef HAVE_STDLIB_H
60 #include <stdlib.h>
61 #endif
62 
63 #ifdef TIME_WITH_SYS_TIME
64 #include <sys/time.h>
65 #include <time.h>
66 #else
67 #ifdef HAVE_SYS_TIME_H
68 #include <sys/time.h>
69 #else
70 #include <time.h>
71 #endif
72 #endif
73 
74 #ifdef HAVE_UNISTD_H
75 #include <unistd.h>
76 #endif
77 
78 #ifdef HAVE_SYS_RESOURCE_H
79 #include <sys/resource.h>
80 #endif /* HAVE_SYS_RESOURCE_H */
81 
82 #ifdef USE_BINARY_FOPEN
83 #include "fopen-bin.h"
84 #else
85 #include "fopen-same.h"
86 #endif
87 
88 #ifdef HAVE_FCNTL_H
89 #include <fcntl.h>
90 #else
91 #ifdef HAVE_SYS_FILE_H
92 #include <sys/file.h>
93 #endif
94 #endif
95 
96 #ifndef O_RDONLY
97 #define O_RDONLY 0
98 #endif
99 #ifndef O_WRONLY
100 #define O_WRONLY 1
101 #endif
102 #ifndef O_RDWR
103 #define O_RDWR 2
104 #endif
105 #ifndef O_ACCMODE
106 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
107 #endif
108 /* Systems that don't already define this, don't need it.  */
109 #ifndef O_BINARY
110 #define O_BINARY 0
111 #endif
112 
113 #ifndef SEEK_SET
114 #define SEEK_SET 0
115 #endif
116 #ifndef SEEK_CUR
117 #define SEEK_CUR 1
118 #endif
119 
120 #include "filenames.h"
121 
122 #if !HAVE_DECL_FFS
123 extern int ffs (int);
124 #endif
125 
126 #if !HAVE_DECL_FREE
127 extern void free ();
128 #endif
129 
130 #if !HAVE_DECL_GETENV
131 extern char *getenv ();
132 #endif
133 
134 #if !HAVE_DECL_MALLOC
135 extern PTR malloc ();
136 #endif
137 
138 #if !HAVE_DECL_REALLOC
139 extern PTR realloc ();
140 #endif
141 
142 #if !HAVE_DECL_STPCPY
143 extern char *stpcpy (char *__dest, const char *__src);
144 #endif
145 
146 #if !HAVE_DECL_STRSTR
147 extern char *strstr ();
148 #endif
149 
150 #ifdef HAVE_FTELLO
151 #if !HAVE_DECL_FTELLO
152 extern off_t ftello (FILE *stream);
153 #endif
154 #endif
155 
156 #ifdef HAVE_FTELLO64
157 #if !HAVE_DECL_FTELLO64
158 extern off64_t ftello64 (FILE *stream);
159 #endif
160 #endif
161 
162 #ifdef HAVE_FSEEKO
163 #if !HAVE_DECL_FSEEKO
164 extern int fseeko (FILE *stream, off_t offset, int whence);
165 #endif
166 #endif
167 
168 #ifdef HAVE_FSEEKO64
169 #if !HAVE_DECL_FSEEKO64
170 extern int fseeko64 (FILE *stream, off64_t offset, int whence);
171 #endif
172 #endif
173 
174 #if !HAVE_DECL_STRNLEN
175 size_t strnlen (const char *, size_t);
176 #endif
177 
178 /* Define offsetof for those systems which lack it */
179 
180 #ifndef offsetof
181 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
182 #endif
183 
184 #ifdef ENABLE_NLS
185 # include <libintl.h>
186 /* Note the redefinition of gettext and ngettext here to use PACKAGE.
187 
188    This is because the code in this directory is used to build a
189    library which will be linked with code in other directories to form
190    programs.  We want to maintain a separate translation file for this
191    directory however, rather than being forced to merge it with that
192    of any program linked to libbfd.  This is a library, so it cannot
193    depend on the catalog currently loaded.
194 
195    In order to do this, we have to make sure that when we extract
196    messages we use the BFD domain rather than the domain of the
197    program that included the bfd library, (eg OBJDUMP).  Hence we use
198    dgettext (PACKAGE, String) and define PACKAGE to be 'bfd'.
199    (See the code in configure).  */
200 # undef gettext
201 # define gettext(Msgid) dgettext (PACKAGE, Msgid)
202 # undef ngettext
203 # define ngettext(Msgid1, Msgid2, n) dngettext (PACKAGE, Msgid1, Msgid2, n)
204 # define _(String) gettext (String)
205 # ifdef gettext_noop
206 #  define N_(String) gettext_noop (String)
207 # else
208 #  define N_(String) (String)
209 # endif
210 #else
211 # define gettext(Msgid) (Msgid)
212 # define dgettext(Domainname, Msgid) (Msgid)
213 # define dcgettext(Domainname, Msgid, Category) (Msgid)
214 # define ngettext(Msgid1, Msgid2, n) \
215   (n == 1 ? Msgid1 : Msgid2)
216 # define dngettext(Domainname, Msgid1, Msgid2, n) \
217   (n == 1 ? Msgid1 : Msgid2)
218 # define dcngettext(Domainname, Msgid1, Msgid2, n, Category) \
219   (n == 1 ? Msgid1 : Msgid2)
220 # define textdomain(Domainname) do {} while (0)
221 # define bindtextdomain(Domainname, Dirname) do {} while (0)
222 # define _(String) (String)
223 # define N_(String) (String)
224 #endif
225 
226 #endif /* ! defined (BFD_SYSDEP_H) */
227