Update gnulib to current trunk
[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
5df4cba6 3 Copyright (C) 2006-2020 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, ...));
698be2d8
CB
119# if !GNULIB_defined_rpl_fcntl
120# define GNULIB_defined_rpl_fcntl 1
121# endif
6ec2e0f5
SDJ
122# else
123# if !@HAVE_FCNTL@
124_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
698be2d8
CB
125# if !GNULIB_defined_fcntl
126# define GNULIB_defined_fcntl 1
127# endif
6ec2e0f5
SDJ
128# endif
129_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
130# endif
131_GL_CXXALIASWARN (fcntl);
132#elif defined GNULIB_POSIXCHECK
133# undef fcntl
134# if HAVE_RAW_DECL_FCNTL
135_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
136 "use gnulib module fcntl for portability");
137# endif
138#endif
139
140#if @GNULIB_OPEN@
141# if @REPLACE_OPEN@
142# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
143# undef open
144# define open rpl_open
145# endif
146_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
147 _GL_ARG_NONNULL ((1)));
148_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
149# else
150_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
151# endif
152/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
153 default argument. _GL_CXXALIASWARN does not work in this case. */
154# if !defined __hpux
155_GL_CXXALIASWARN (open);
156# endif
157#elif defined GNULIB_POSIXCHECK
158# undef open
159/* Assume open is always declared. */
160_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
161 "use gnulib module open for portability");
162#endif
163
164#if @GNULIB_OPENAT@
165# if @REPLACE_OPENAT@
166# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
167# undef openat
168# define openat rpl_openat
169# endif
170_GL_FUNCDECL_RPL (openat, int,
171 (int fd, char const *file, int flags, /* mode_t mode */ ...)
172 _GL_ARG_NONNULL ((2)));
173_GL_CXXALIAS_RPL (openat, int,
174 (int fd, char const *file, int flags, /* mode_t mode */ ...));
175# else
176# if !@HAVE_OPENAT@
177_GL_FUNCDECL_SYS (openat, int,
178 (int fd, char const *file, int flags, /* mode_t mode */ ...)
179 _GL_ARG_NONNULL ((2)));
180# endif
181_GL_CXXALIAS_SYS (openat, int,
182 (int fd, char const *file, int flags, /* mode_t mode */ ...));
183# endif
184_GL_CXXALIASWARN (openat);
185#elif defined GNULIB_POSIXCHECK
186# undef openat
187# if HAVE_RAW_DECL_OPENAT
188_GL_WARN_ON_USE (openat, "openat is not portable - "
189 "use gnulib module openat for portability");
190# endif
191#endif
192
193
194/* Fix up the FD_* macros, only known to be missing on mingw. */
195
196#ifndef FD_CLOEXEC
197# define FD_CLOEXEC 1
198#endif
199
200/* Fix up the supported F_* macros. Intentionally leave other F_*
201 macros undefined. Only known to be missing on mingw. */
202
203#ifndef F_DUPFD_CLOEXEC
204# define F_DUPFD_CLOEXEC 0x40000000
205/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */
206# define GNULIB_defined_F_DUPFD_CLOEXEC 1
207#else
208# define GNULIB_defined_F_DUPFD_CLOEXEC 0
209#endif
210
211#ifndef F_DUPFD
212# define F_DUPFD 1
213#endif
214
215#ifndef F_GETFD
216# define F_GETFD 2
217#endif
218
219/* Fix up the O_* macros. */
220
221/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
222 to values outside 'int' range, so omit these misdefinitions.
223 But avoid namespace pollution on non-AIX systems. */
224#ifdef _AIX
225# include <limits.h>
226# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
227# undef O_CLOEXEC
228# endif
229# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
230# undef O_NOFOLLOW
231# endif
232# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
233# undef O_TTY_INIT
234# endif
235#endif
236
237#if !defined O_DIRECT && defined O_DIRECTIO
238/* Tru64 spells it 'O_DIRECTIO'. */
239# define O_DIRECT O_DIRECTIO
240#endif
241
242#if !defined O_CLOEXEC && defined O_NOINHERIT
243/* Mingw spells it 'O_NOINHERIT'. */
244# define O_CLOEXEC O_NOINHERIT
245#endif
246
247#ifndef O_CLOEXEC
c0c3707f
CB
248# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */
249# define GNULIB_defined_O_CLOEXEC 1
250#else
251# define GNULIB_defined_O_CLOEXEC 0
6ec2e0f5
SDJ
252#endif
253
254#ifndef O_DIRECT
255# define O_DIRECT 0
256#endif
257
258#ifndef O_DIRECTORY
259# define O_DIRECTORY 0
260#endif
261
262#ifndef O_DSYNC
263# define O_DSYNC 0
264#endif
265
266#ifndef O_EXEC
267# define O_EXEC O_RDONLY /* This is often close enough in older systems. */
268#endif
269
270#ifndef O_IGNORE_CTTY
271# define O_IGNORE_CTTY 0
272#endif
273
274#ifndef O_NDELAY
275# define O_NDELAY 0
276#endif
277
278#ifndef O_NOATIME
279# define O_NOATIME 0
280#endif
281
282#ifndef O_NONBLOCK
283# define O_NONBLOCK O_NDELAY
284#endif
285
286/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
287 value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
288 or to 0 as fallback. */
289#if @GNULIB_NONBLOCKING@
290# if O_NONBLOCK
291# define GNULIB_defined_O_NONBLOCK 0
292# else
293# define GNULIB_defined_O_NONBLOCK 1
294# undef O_NONBLOCK
295# define O_NONBLOCK 0x40000000
296# endif
297#endif
298
299#ifndef O_NOCTTY
300# define O_NOCTTY 0
301#endif
302
303#ifndef O_NOFOLLOW
304# define O_NOFOLLOW 0
305#endif
306
307#ifndef O_NOLINK
308# define O_NOLINK 0
309#endif
310
311#ifndef O_NOLINKS
312# define O_NOLINKS 0
313#endif
314
315#ifndef O_NOTRANS
316# define O_NOTRANS 0
317#endif
318
319#ifndef O_RSYNC
320# define O_RSYNC 0
321#endif
322
323#ifndef O_SEARCH
324# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */
325#endif
326
327#ifndef O_SYNC
328# define O_SYNC 0
329#endif
330
331#ifndef O_TTY_INIT
332# define O_TTY_INIT 0
333#endif
334
335#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
336# undef O_ACCMODE
337# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
338#endif
339
340/* For systems that distinguish between text and binary I/O.
341 O_BINARY is usually declared in fcntl.h */
342#if !defined O_BINARY && defined _O_BINARY
343 /* For MSC-compatible compilers. */
344# define O_BINARY _O_BINARY
345# define O_TEXT _O_TEXT
346#endif
347
348#if defined __BEOS__ || defined __HAIKU__
349 /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */
350# undef O_BINARY
351# undef O_TEXT
352#endif
353
354#ifndef O_BINARY
355# define O_BINARY 0
356# define O_TEXT 0
357#endif
358
359/* Fix up the AT_* macros. */
360
361/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
362 value exceeds INT_MAX, so its use as an int doesn't conform to the
363 C standard, and GCC and Sun C complain in some cases. If the bug
364 is present, undef AT_FDCWD here, so it can be redefined below. */
365#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
366# undef AT_FDCWD
367#endif
368
369/* Use the same bit pattern as Solaris 9, but with the proper
370 signedness. The bit pattern is important, in case this actually is
371 Solaris with the above workaround. */
372#ifndef AT_FDCWD
373# define AT_FDCWD (-3041965)
374#endif
375
376/* Use the same values as Solaris 9. This shouldn't matter, but
377 there's no real reason to differ. */
378#ifndef AT_SYMLINK_NOFOLLOW
379# define AT_SYMLINK_NOFOLLOW 4096
380#endif
381
382#ifndef AT_REMOVEDIR
383# define AT_REMOVEDIR 1
384#endif
385
386/* Solaris 9 lacks these two, so just pick unique values. */
387#ifndef AT_SYMLINK_FOLLOW
388# define AT_SYMLINK_FOLLOW 2
389#endif
390
391#ifndef AT_EACCESS
392# define AT_EACCESS 4
393#endif
394
395
396#endif /* _@GUARD_PREFIX@_FCNTL_H */
397#endif /* _@GUARD_PREFIX@_FCNTL_H */
398#endif
This page took 0.282758 seconds and 4 git commands to generate.