Update Gnulib to the latest git version
[deliverable/binutils-gdb.git] / gnulib / import / fcntl.in.h
CommitLineData
6ec2e0f5
SDJ
1/* Like <fcntl.h>, but with non-working flags defined to 0.
2
c0c3707f 3 Copyright (C) 2006-2019 Free Software Foundation, Inc.
6ec2e0f5
SDJ
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
c0c3707f 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */
6ec2e0f5
SDJ
17
18/* written by Paul Eggert */
19
20#if __GNUC__ >= 3
21@PRAGMA_SYSTEM_HEADER@
22#endif
23@PRAGMA_COLUMNS@
24
25#if defined __need_system_fcntl_h
26/* Special invocation convention. */
27
28/* Needed before <sys/stat.h>.
29 May also define off_t to a 64-bit type on native Windows. */
30#include <sys/types.h>
31/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
32 <fcntl.h>. On glibc systems, we would like to avoid namespace pollution.
33 But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
34 extern "C" { ... } block, which leads to errors in C++ mode with the
35 overridden <sys/stat.h> from gnulib. These errors are known to be gone
36 with g++ version >= 4.3. */
37#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
38# include <sys/stat.h>
39#endif
40#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
41
c0c3707f
CB
42/* Native Windows platforms declare open(), creat() in <io.h>. */
43#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
44 && (defined _WIN32 && ! defined __CYGWIN__)
45# include <io.h>
46#endif
47
6ec2e0f5
SDJ
48#else
49/* Normal invocation convention. */
50
51#ifndef _@GUARD_PREFIX@_FCNTL_H
52
53/* Needed before <sys/stat.h>.
54 May also define off_t to a 64-bit type on native Windows. */
55#include <sys/types.h>
56/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
57 <fcntl.h>. On glibc systems, we would like to avoid namespace pollution.
58 But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
59 extern "C" { ... } block, which leads to errors in C++ mode with the
60 overridden <sys/stat.h> from gnulib. These errors are known to be gone
61 with g++ version >= 4.3. */
62#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
63# include <sys/stat.h>
64#endif
65/* The include_next requires a split double-inclusion guard. */
66#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
67
c0c3707f
CB
68/* Native Windows platforms declare open(), creat() in <io.h>. */
69#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
70 && (defined _WIN32 && ! defined __CYGWIN__)
71# include <io.h>
72#endif
73
6ec2e0f5
SDJ
74#ifndef _@GUARD_PREFIX@_FCNTL_H
75#define _@GUARD_PREFIX@_FCNTL_H
76
77#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
78# include <unistd.h>
79#endif
80
6ec2e0f5
SDJ
81
82/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
83
84/* The definition of _GL_ARG_NONNULL is copied here. */
85
86/* The definition of _GL_WARN_ON_USE is copied here. */
87
88
89/* Declare overridden functions. */
90
c0c3707f
CB
91#if @GNULIB_CREAT@
92# if @REPLACE_CREAT@
93# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
94# undef creat
95# define creat rpl_creat
96# endif
97_GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode)
98 _GL_ARG_NONNULL ((1)));
99_GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode));
100# else
101_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode));
102# endif
103_GL_CXXALIASWARN (creat);
104#elif defined GNULIB_POSIXCHECK
105# undef creat
106/* Assume creat is always declared. */
107_GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - "
108 "use gnulib module creat for portability");
109#endif
110
6ec2e0f5
SDJ
111#if @GNULIB_FCNTL@
112# if @REPLACE_FCNTL@
113# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
114# undef fcntl
115# define fcntl rpl_fcntl
116# endif
117_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
118_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
119# else
120# if !@HAVE_FCNTL@
121_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
122# endif
123_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
124# endif
125_GL_CXXALIASWARN (fcntl);
126#elif defined GNULIB_POSIXCHECK
127# undef fcntl
128# if HAVE_RAW_DECL_FCNTL
129_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
130 "use gnulib module fcntl for portability");
131# endif
132#endif
133
134#if @GNULIB_OPEN@
135# if @REPLACE_OPEN@
136# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
137# undef open
138# define open rpl_open
139# endif
140_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
141 _GL_ARG_NONNULL ((1)));
142_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
143# else
144_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
145# endif
146/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
147 default argument. _GL_CXXALIASWARN does not work in this case. */
148# if !defined __hpux
149_GL_CXXALIASWARN (open);
150# endif
151#elif defined GNULIB_POSIXCHECK
152# undef open
153/* Assume open is always declared. */
154_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
155 "use gnulib module open for portability");
156#endif
157
158#if @GNULIB_OPENAT@
159# if @REPLACE_OPENAT@
160# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
161# undef openat
162# define openat rpl_openat
163# endif
164_GL_FUNCDECL_RPL (openat, int,
165 (int fd, char const *file, int flags, /* mode_t mode */ ...)
166 _GL_ARG_NONNULL ((2)));
167_GL_CXXALIAS_RPL (openat, int,
168 (int fd, char const *file, int flags, /* mode_t mode */ ...));
169# else
170# if !@HAVE_OPENAT@
171_GL_FUNCDECL_SYS (openat, int,
172 (int fd, char const *file, int flags, /* mode_t mode */ ...)
173 _GL_ARG_NONNULL ((2)));
174# endif
175_GL_CXXALIAS_SYS (openat, int,
176 (int fd, char const *file, int flags, /* mode_t mode */ ...));
177# endif
178_GL_CXXALIASWARN (openat);
179#elif defined GNULIB_POSIXCHECK
180# undef openat
181# if HAVE_RAW_DECL_OPENAT
182_GL_WARN_ON_USE (openat, "openat is not portable - "
183 "use gnulib module openat for portability");
184# endif
185#endif
186
187
188/* Fix up the FD_* macros, only known to be missing on mingw. */
189
190#ifndef FD_CLOEXEC
191# define FD_CLOEXEC 1
192#endif
193
194/* Fix up the supported F_* macros. Intentionally leave other F_*
195 macros undefined. Only known to be missing on mingw. */
196
197#ifndef F_DUPFD_CLOEXEC
198# define F_DUPFD_CLOEXEC 0x40000000
199/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */
200# define GNULIB_defined_F_DUPFD_CLOEXEC 1
201#else
202# define GNULIB_defined_F_DUPFD_CLOEXEC 0
203#endif
204
205#ifndef F_DUPFD
206# define F_DUPFD 1
207#endif
208
209#ifndef F_GETFD
210# define F_GETFD 2
211#endif
212
213/* Fix up the O_* macros. */
214
215/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
216 to values outside 'int' range, so omit these misdefinitions.
217 But avoid namespace pollution on non-AIX systems. */
218#ifdef _AIX
219# include <limits.h>
220# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
221# undef O_CLOEXEC
222# endif
223# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
224# undef O_NOFOLLOW
225# endif
226# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
227# undef O_TTY_INIT
228# endif
229#endif
230
231#if !defined O_DIRECT && defined O_DIRECTIO
232/* Tru64 spells it 'O_DIRECTIO'. */
233# define O_DIRECT O_DIRECTIO
234#endif
235
236#if !defined O_CLOEXEC && defined O_NOINHERIT
237/* Mingw spells it 'O_NOINHERIT'. */
238# define O_CLOEXEC O_NOINHERIT
239#endif
240
241#ifndef O_CLOEXEC
c0c3707f
CB
242# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */
243# define GNULIB_defined_O_CLOEXEC 1
244#else
245# define GNULIB_defined_O_CLOEXEC 0
6ec2e0f5
SDJ
246#endif
247
248#ifndef O_DIRECT
249# define O_DIRECT 0
250#endif
251
252#ifndef O_DIRECTORY
253# define O_DIRECTORY 0
254#endif
255
256#ifndef O_DSYNC
257# define O_DSYNC 0
258#endif
259
260#ifndef O_EXEC
261# define O_EXEC O_RDONLY /* This is often close enough in older systems. */
262#endif
263
264#ifndef O_IGNORE_CTTY
265# define O_IGNORE_CTTY 0
266#endif
267
268#ifndef O_NDELAY
269# define O_NDELAY 0
270#endif
271
272#ifndef O_NOATIME
273# define O_NOATIME 0
274#endif
275
276#ifndef O_NONBLOCK
277# define O_NONBLOCK O_NDELAY
278#endif
279
280/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
281 value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
282 or to 0 as fallback. */
283#if @GNULIB_NONBLOCKING@
284# if O_NONBLOCK
285# define GNULIB_defined_O_NONBLOCK 0
286# else
287# define GNULIB_defined_O_NONBLOCK 1
288# undef O_NONBLOCK
289# define O_NONBLOCK 0x40000000
290# endif
291#endif
292
293#ifndef O_NOCTTY
294# define O_NOCTTY 0
295#endif
296
297#ifndef O_NOFOLLOW
298# define O_NOFOLLOW 0
299#endif
300
301#ifndef O_NOLINK
302# define O_NOLINK 0
303#endif
304
305#ifndef O_NOLINKS
306# define O_NOLINKS 0
307#endif
308
309#ifndef O_NOTRANS
310# define O_NOTRANS 0
311#endif
312
313#ifndef O_RSYNC
314# define O_RSYNC 0
315#endif
316
317#ifndef O_SEARCH
318# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */
319#endif
320
321#ifndef O_SYNC
322# define O_SYNC 0
323#endif
324
325#ifndef O_TTY_INIT
326# define O_TTY_INIT 0
327#endif
328
329#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
330# undef O_ACCMODE
331# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
332#endif
333
334/* For systems that distinguish between text and binary I/O.
335 O_BINARY is usually declared in fcntl.h */
336#if !defined O_BINARY && defined _O_BINARY
337 /* For MSC-compatible compilers. */
338# define O_BINARY _O_BINARY
339# define O_TEXT _O_TEXT
340#endif
341
342#if defined __BEOS__ || defined __HAIKU__
343 /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */
344# undef O_BINARY
345# undef O_TEXT
346#endif
347
348#ifndef O_BINARY
349# define O_BINARY 0
350# define O_TEXT 0
351#endif
352
353/* Fix up the AT_* macros. */
354
355/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
356 value exceeds INT_MAX, so its use as an int doesn't conform to the
357 C standard, and GCC and Sun C complain in some cases. If the bug
358 is present, undef AT_FDCWD here, so it can be redefined below. */
359#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
360# undef AT_FDCWD
361#endif
362
363/* Use the same bit pattern as Solaris 9, but with the proper
364 signedness. The bit pattern is important, in case this actually is
365 Solaris with the above workaround. */
366#ifndef AT_FDCWD
367# define AT_FDCWD (-3041965)
368#endif
369
370/* Use the same values as Solaris 9. This shouldn't matter, but
371 there's no real reason to differ. */
372#ifndef AT_SYMLINK_NOFOLLOW
373# define AT_SYMLINK_NOFOLLOW 4096
374#endif
375
376#ifndef AT_REMOVEDIR
377# define AT_REMOVEDIR 1
378#endif
379
380/* Solaris 9 lacks these two, so just pick unique values. */
381#ifndef AT_SYMLINK_FOLLOW
382# define AT_SYMLINK_FOLLOW 2
383#endif
384
385#ifndef AT_EACCESS
386# define AT_EACCESS 4
387#endif
388
389
390#endif /* _@GUARD_PREFIX@_FCNTL_H */
391#endif /* _@GUARD_PREFIX@_FCNTL_H */
392#endif
This page took 0.213979 seconds and 4 git commands to generate.