Annotation of embedaddon/libiconv/srclib/fcntl.in.h, revision 1.1.1.1
1.1 misho 1: /* Like <fcntl.h>, but with non-working flags defined to 0.
2:
3: Copyright (C) 2006-2011 Free Software Foundation, Inc.
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
16: along with this program. If not, see <http://www.gnu.org/licenses/>. */
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: #include <sys/types.h>
29: /* On some systems other than glibc, <sys/stat.h> is a prerequisite of
30: <fcntl.h>. On glibc systems, we would like to avoid namespace pollution.
31: But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
32: extern "C" { ... } block, which leads to errors in C++ mode with the
33: overridden <sys/stat.h> from gnulib. These errors are known to be gone
34: with g++ version >= 4.3. */
35: #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
36: # include <sys/stat.h>
37: #endif
38: #@INCLUDE_NEXT@ @NEXT_FCNTL_H@
39:
40: #else
41: /* Normal invocation convention. */
42:
43: #ifndef _@GUARD_PREFIX@_FCNTL_H
44:
45: #include <sys/types.h>
46: /* On some systems other than glibc, <sys/stat.h> is a prerequisite of
47: <fcntl.h>. On glibc systems, we would like to avoid namespace pollution.
48: But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
49: extern "C" { ... } block, which leads to errors in C++ mode with the
50: overridden <sys/stat.h> from gnulib. These errors are known to be gone
51: with g++ version >= 4.3. */
52: #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
53: # include <sys/stat.h>
54: #endif
55: /* The include_next requires a split double-inclusion guard. */
56: #@INCLUDE_NEXT@ @NEXT_FCNTL_H@
57:
58: #ifndef _@GUARD_PREFIX@_FCNTL_H
59: #define _@GUARD_PREFIX@_FCNTL_H
60:
61: #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
62: # include <unistd.h>
63: #endif
64:
65:
66: /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
67:
68: /* The definition of _GL_ARG_NONNULL is copied here. */
69:
70: /* The definition of _GL_WARN_ON_USE is copied here. */
71:
72:
73: /* Declare overridden functions. */
74:
75: #if @GNULIB_FCNTL@
76: # if @REPLACE_FCNTL@
77: # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
78: # undef fcntl
79: # define fcntl rpl_fcntl
80: # endif
81: _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
82: _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
83: # else
84: # if !@HAVE_FCNTL@
85: _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
86: # endif
87: _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
88: # endif
89: _GL_CXXALIASWARN (fcntl);
90: #elif defined GNULIB_POSIXCHECK
91: # undef fcntl
92: # if HAVE_RAW_DECL_FCNTL
93: _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
94: "use gnulib module fcntl for portability");
95: # endif
96: #endif
97:
98: #if @GNULIB_OPEN@
99: # if @REPLACE_OPEN@
100: # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
101: # undef open
102: # define open rpl_open
103: # endif
104: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
105: _GL_ARG_NONNULL ((1)));
106: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
107: # else
108: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
109: # endif
110: /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
111: default argument. _GL_CXXALIASWARN does not work in this case. */
112: # if !defined __hpux
113: _GL_CXXALIASWARN (open);
114: # endif
115: #elif defined GNULIB_POSIXCHECK
116: # undef open
117: /* Assume open is always declared. */
118: _GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
119: "use gnulib module open for portability");
120: #endif
121:
122: #if @GNULIB_OPENAT@
123: # if @REPLACE_OPENAT@
124: # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
125: # undef openat
126: # define openat rpl_openat
127: # endif
128: _GL_FUNCDECL_RPL (openat, int,
129: (int fd, char const *file, int flags, /* mode_t mode */ ...)
130: _GL_ARG_NONNULL ((2)));
131: _GL_CXXALIAS_RPL (openat, int,
132: (int fd, char const *file, int flags, /* mode_t mode */ ...));
133: # else
134: # if !@HAVE_OPENAT@
135: _GL_FUNCDECL_SYS (openat, int,
136: (int fd, char const *file, int flags, /* mode_t mode */ ...)
137: _GL_ARG_NONNULL ((2)));
138: # endif
139: _GL_CXXALIAS_SYS (openat, int,
140: (int fd, char const *file, int flags, /* mode_t mode */ ...));
141: # endif
142: _GL_CXXALIASWARN (openat);
143: #elif defined GNULIB_POSIXCHECK
144: # undef openat
145: # if HAVE_RAW_DECL_OPENAT
146: _GL_WARN_ON_USE (openat, "openat is not portable - "
147: "use gnulib module openat for portability");
148: # endif
149: #endif
150:
151:
152: /* Fix up the FD_* macros, only known to be missing on mingw. */
153:
154: #ifndef FD_CLOEXEC
155: # define FD_CLOEXEC 1
156: #endif
157:
158: /* Fix up the supported F_* macros. Intentionally leave other F_*
159: macros undefined. Only known to be missing on mingw. */
160:
161: #ifndef F_DUPFD_CLOEXEC
162: # define F_DUPFD_CLOEXEC 0x40000000
163: /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */
164: # define GNULIB_defined_F_DUPFD_CLOEXEC 1
165: #else
166: # define GNULIB_defined_F_DUPFD_CLOEXEC 0
167: #endif
168:
169: #ifndef F_DUPFD
170: # define F_DUPFD 1
171: #endif
172:
173: #ifndef F_GETFD
174: # define F_GETFD 2
175: #endif
176:
177: /* Fix up the O_* macros. */
178:
179: #if !defined O_DIRECT && defined O_DIRECTIO
180: /* Tru64 spells it `O_DIRECTIO'. */
181: # define O_DIRECT O_DIRECTIO
182: #endif
183:
184: #if !defined O_CLOEXEC && defined O_NOINHERIT
185: /* Mingw spells it `O_NOINHERIT'. */
186: # define O_CLOEXEC O_NOINHERIT
187: #endif
188:
189: #ifndef O_CLOEXEC
190: # define O_CLOEXEC 0
191: #endif
192:
193: #ifndef O_DIRECT
194: # define O_DIRECT 0
195: #endif
196:
197: #ifndef O_DIRECTORY
198: # define O_DIRECTORY 0
199: #endif
200:
201: #ifndef O_DSYNC
202: # define O_DSYNC 0
203: #endif
204:
205: #ifndef O_EXEC
206: # define O_EXEC O_RDONLY /* This is often close enough in older systems. */
207: #endif
208:
209: #ifndef O_NDELAY
210: # define O_NDELAY 0
211: #endif
212:
213: #ifndef O_NOATIME
214: # define O_NOATIME 0
215: #endif
216:
217: #ifndef O_NONBLOCK
218: # define O_NONBLOCK O_NDELAY
219: #endif
220:
221: /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
222: value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
223: or to 0 as fallback. */
224: #if @GNULIB_NONBLOCKING@
225: # if O_NONBLOCK
226: # define GNULIB_defined_O_NONBLOCK 0
227: # else
228: # define GNULIB_defined_O_NONBLOCK 1
229: # undef O_NONBLOCK
230: # define O_NONBLOCK 0x40000000
231: # endif
232: #endif
233:
234: #ifndef O_NOCTTY
235: # define O_NOCTTY 0
236: #endif
237:
238: #ifndef O_NOFOLLOW
239: # define O_NOFOLLOW 0
240: #endif
241:
242: #ifndef O_NOLINKS
243: # define O_NOLINKS 0
244: #endif
245:
246: #ifndef O_RSYNC
247: # define O_RSYNC 0
248: #endif
249:
250: #ifndef O_SEARCH
251: # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */
252: #endif
253:
254: #ifndef O_SYNC
255: # define O_SYNC 0
256: #endif
257:
258: #ifndef O_TTY_INIT
259: # define O_TTY_INIT 0
260: #endif
261:
262: #if O_ACCMODE != (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
263: # undef O_ACCMODE
264: # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
265: #endif
266:
267: /* For systems that distinguish between text and binary I/O.
268: O_BINARY is usually declared in fcntl.h */
269: #if !defined O_BINARY && defined _O_BINARY
270: /* For MSC-compatible compilers. */
271: # define O_BINARY _O_BINARY
272: # define O_TEXT _O_TEXT
273: #endif
274:
275: #if defined __BEOS__ || defined __HAIKU__
276: /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */
277: # undef O_BINARY
278: # undef O_TEXT
279: #endif
280:
281: #ifndef O_BINARY
282: # define O_BINARY 0
283: # define O_TEXT 0
284: #endif
285:
286: /* Fix up the AT_* macros. */
287:
288: /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
289: value exceeds INT_MAX, so its use as an int doesn't conform to the
290: C standard, and GCC and Sun C complain in some cases. If the bug
291: is present, undef AT_FDCWD here, so it can be redefined below. */
292: #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
293: # undef AT_FDCWD
294: #endif
295:
296: /* Use the same bit pattern as Solaris 9, but with the proper
297: signedness. The bit pattern is important, in case this actually is
298: Solaris with the above workaround. */
299: #ifndef AT_FDCWD
300: # define AT_FDCWD (-3041965)
301: #endif
302:
303: /* Use the same values as Solaris 9. This shouldn't matter, but
304: there's no real reason to differ. */
305: #ifndef AT_SYMLINK_NOFOLLOW
306: # define AT_SYMLINK_NOFOLLOW 4096
307: #endif
308:
309: #ifndef AT_REMOVEDIR
310: # define AT_REMOVEDIR 1
311: #endif
312:
313: /* Solaris 9 lacks these two, so just pick unique values. */
314: #ifndef AT_SYMLINK_FOLLOW
315: # define AT_SYMLINK_FOLLOW 2
316: #endif
317:
318: #ifndef AT_EACCESS
319: # define AT_EACCESS 4
320: #endif
321:
322:
323: #endif /* _@GUARD_PREFIX@_FCNTL_H */
324: #endif /* _@GUARD_PREFIX@_FCNTL_H */
325: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>