diff options
Diffstat (limited to 'gl/fcntl.in.h')
-rw-r--r-- | gl/fcntl.in.h | 165 |
1 files changed, 150 insertions, 15 deletions
diff --git a/gl/fcntl.in.h b/gl/fcntl.in.h index fd7520e8..8fb78522 100644 --- a/gl/fcntl.in.h +++ b/gl/fcntl.in.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* Like <fcntl.h>, but with non-working flags defined to 0. | 1 | /* Like <fcntl.h>, but with non-working flags defined to 0. |
2 | 2 | ||
3 | Copyright (C) 2006-2008 Free Software Foundation, Inc. | 3 | Copyright (C) 2006-2010 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This program is free software: you can redistribute it and/or modify | 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 | 6 | it under the terms of the GNU General Public License as published by |
@@ -25,8 +25,9 @@ | |||
25 | /* Special invocation convention. */ | 25 | /* Special invocation convention. */ |
26 | 26 | ||
27 | #include <sys/types.h> | 27 | #include <sys/types.h> |
28 | #include <sys/stat.h> | 28 | #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ |
29 | #include <unistd.h> | 29 | # include <sys/stat.h> |
30 | #endif | ||
30 | #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ | 31 | #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ |
31 | 32 | ||
32 | #else | 33 | #else |
@@ -35,38 +36,126 @@ | |||
35 | #ifndef _GL_FCNTL_H | 36 | #ifndef _GL_FCNTL_H |
36 | 37 | ||
37 | #include <sys/types.h> | 38 | #include <sys/types.h> |
38 | #include <sys/stat.h> | 39 | #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ |
39 | #include <unistd.h> | 40 | # include <sys/stat.h> |
41 | #endif | ||
40 | /* The include_next requires a split double-inclusion guard. */ | 42 | /* The include_next requires a split double-inclusion guard. */ |
41 | #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ | 43 | #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ |
42 | 44 | ||
43 | #ifndef _GL_FCNTL_H | 45 | #ifndef _GL_FCNTL_H |
44 | #define _GL_FCNTL_H | 46 | #define _GL_FCNTL_H |
45 | 47 | ||
48 | #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ | ||
49 | # include <unistd.h> | ||
50 | #endif | ||
51 | |||
52 | |||
53 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ | ||
54 | |||
55 | /* The definition of _GL_ARG_NONNULL is copied here. */ | ||
56 | |||
57 | /* The definition of _GL_WARN_ON_USE is copied here. */ | ||
58 | |||
46 | 59 | ||
47 | /* Declare overridden functions. */ | 60 | /* Declare overridden functions. */ |
48 | 61 | ||
49 | #ifdef __cplusplus | 62 | #if @GNULIB_FCNTL@ |
50 | extern "C" { | 63 | # if @REPLACE_FCNTL@ |
64 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
65 | # undef fcntl | ||
66 | # define fcntl rpl_fcntl | ||
67 | # endif | ||
68 | _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); | ||
69 | _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); | ||
70 | # else | ||
71 | # if !@HAVE_FCNTL@ | ||
72 | _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); | ||
73 | # endif | ||
74 | _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); | ||
75 | # endif | ||
76 | _GL_CXXALIASWARN (fcntl); | ||
77 | #elif defined GNULIB_POSIXCHECK | ||
78 | # undef fcntl | ||
79 | # if HAVE_RAW_DECL_FCNTL | ||
80 | _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " | ||
81 | "use gnulib module fcntl for portability"); | ||
82 | # endif | ||
51 | #endif | 83 | #endif |
52 | 84 | ||
53 | #if @GNULIB_OPEN@ | 85 | #if @GNULIB_OPEN@ |
54 | # if @REPLACE_OPEN@ | 86 | # if @REPLACE_OPEN@ |
55 | # undef open | 87 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
56 | # define open rpl_open | 88 | # undef open |
57 | extern int open (const char *filename, int flags, ...); | 89 | # define open rpl_open |
90 | # endif | ||
91 | _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) | ||
92 | _GL_ARG_NONNULL ((1))); | ||
93 | _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); | ||
94 | # else | ||
95 | _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); | ||
58 | # endif | 96 | # endif |
97 | _GL_CXXALIASWARN (open); | ||
98 | #elif defined GNULIB_POSIXCHECK | ||
99 | # undef open | ||
100 | /* Assume open is always declared. */ | ||
101 | _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " | ||
102 | "use gnulib module open for portability"); | ||
59 | #endif | 103 | #endif |
60 | 104 | ||
61 | #ifdef FCHDIR_REPLACEMENT | 105 | #if @GNULIB_OPENAT@ |
62 | /* gnulib internal function. */ | 106 | # if @REPLACE_OPENAT@ |
63 | extern void _gl_register_fd (int fd, const char *filename); | 107 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
108 | # undef openat | ||
109 | # define openat rpl_openat | ||
110 | # endif | ||
111 | _GL_FUNCDECL_RPL (openat, int, | ||
112 | (int fd, char const *file, int flags, /* mode_t mode */ ...) | ||
113 | _GL_ARG_NONNULL ((2))); | ||
114 | _GL_CXXALIAS_RPL (openat, int, | ||
115 | (int fd, char const *file, int flags, /* mode_t mode */ ...)); | ||
116 | # else | ||
117 | # if !@HAVE_OPENAT@ | ||
118 | _GL_FUNCDECL_SYS (openat, int, | ||
119 | (int fd, char const *file, int flags, /* mode_t mode */ ...) | ||
120 | _GL_ARG_NONNULL ((2))); | ||
121 | # endif | ||
122 | _GL_CXXALIAS_SYS (openat, int, | ||
123 | (int fd, char const *file, int flags, /* mode_t mode */ ...)); | ||
124 | # endif | ||
125 | _GL_CXXALIASWARN (openat); | ||
126 | #elif defined GNULIB_POSIXCHECK | ||
127 | # undef openat | ||
128 | # if HAVE_RAW_DECL_OPENAT | ||
129 | _GL_WARN_ON_USE (openat, "openat is not portable - " | ||
130 | "use gnulib module openat for portability"); | ||
131 | # endif | ||
132 | #endif | ||
133 | |||
134 | |||
135 | /* Fix up the FD_* macros, only known to be missing on mingw. */ | ||
136 | |||
137 | #ifndef FD_CLOEXEC | ||
138 | # define FD_CLOEXEC 1 | ||
139 | #endif | ||
140 | |||
141 | /* Fix up the supported F_* macros. Intentionally leave other F_* | ||
142 | macros undefined. Only known to be missing on mingw. */ | ||
143 | |||
144 | #ifndef F_DUPFD_CLOEXEC | ||
145 | # define F_DUPFD_CLOEXEC 0x40000000 | ||
146 | /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ | ||
147 | # define GNULIB_defined_F_DUPFD_CLOEXEC 1 | ||
148 | #else | ||
149 | # define GNULIB_defined_F_DUPFD_CLOEXEC 0 | ||
64 | #endif | 150 | #endif |
65 | 151 | ||
66 | #ifdef __cplusplus | 152 | #ifndef F_DUPFD |
67 | } | 153 | # define F_DUPFD 1 |
68 | #endif | 154 | #endif |
69 | 155 | ||
156 | #ifndef F_GETFD | ||
157 | # define F_GETFD 2 | ||
158 | #endif | ||
70 | 159 | ||
71 | /* Fix up the O_* macros. */ | 160 | /* Fix up the O_* macros. */ |
72 | 161 | ||
@@ -75,6 +164,12 @@ extern void _gl_register_fd (int fd, const char *filename); | |||
75 | # define O_DIRECT O_DIRECTIO | 164 | # define O_DIRECT O_DIRECTIO |
76 | #endif | 165 | #endif |
77 | 166 | ||
167 | #if !defined O_CLOEXEC && defined O_NOINHERIT | ||
168 | /* Mingw spells it `O_NOINHERIT'. Intentionally leave it | ||
169 | undefined if not available. */ | ||
170 | # define O_CLOEXEC O_NOINHERIT | ||
171 | #endif | ||
172 | |||
78 | #ifndef O_DIRECT | 173 | #ifndef O_DIRECT |
79 | # define O_DIRECT 0 | 174 | # define O_DIRECT 0 |
80 | #endif | 175 | #endif |
@@ -119,6 +214,10 @@ extern void _gl_register_fd (int fd, const char *filename); | |||
119 | # define O_SYNC 0 | 214 | # define O_SYNC 0 |
120 | #endif | 215 | #endif |
121 | 216 | ||
217 | #ifndef O_TTY_INIT | ||
218 | # define O_TTY_INIT 0 | ||
219 | #endif | ||
220 | |||
122 | /* For systems that distinguish between text and binary I/O. | 221 | /* For systems that distinguish between text and binary I/O. |
123 | O_BINARY is usually declared in fcntl.h */ | 222 | O_BINARY is usually declared in fcntl.h */ |
124 | #if !defined O_BINARY && defined _O_BINARY | 223 | #if !defined O_BINARY && defined _O_BINARY |
@@ -138,6 +237,42 @@ extern void _gl_register_fd (int fd, const char *filename); | |||
138 | # define O_TEXT 0 | 237 | # define O_TEXT 0 |
139 | #endif | 238 | #endif |
140 | 239 | ||
240 | /* Fix up the AT_* macros. */ | ||
241 | |||
242 | /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its | ||
243 | value exceeds INT_MAX, so its use as an int doesn't conform to the | ||
244 | C standard, and GCC and Sun C complain in some cases. If the bug | ||
245 | is present, undef AT_FDCWD here, so it can be redefined below. */ | ||
246 | #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 | ||
247 | # undef AT_FDCWD | ||
248 | #endif | ||
249 | |||
250 | /* Use the same bit pattern as Solaris 9, but with the proper | ||
251 | signedness. The bit pattern is important, in case this actually is | ||
252 | Solaris with the above workaround. */ | ||
253 | #ifndef AT_FDCWD | ||
254 | # define AT_FDCWD (-3041965) | ||
255 | #endif | ||
256 | |||
257 | /* Use the same values as Solaris 9. This shouldn't matter, but | ||
258 | there's no real reason to differ. */ | ||
259 | #ifndef AT_SYMLINK_NOFOLLOW | ||
260 | # define AT_SYMLINK_NOFOLLOW 4096 | ||
261 | #endif | ||
262 | |||
263 | #ifndef AT_REMOVEDIR | ||
264 | # define AT_REMOVEDIR 1 | ||
265 | #endif | ||
266 | |||
267 | /* Solaris 9 lacks these two, so just pick unique values. */ | ||
268 | #ifndef AT_SYMLINK_FOLLOW | ||
269 | # define AT_SYMLINK_FOLLOW 2 | ||
270 | #endif | ||
271 | |||
272 | #ifndef AT_EACCESS | ||
273 | # define AT_EACCESS 4 | ||
274 | #endif | ||
275 | |||
141 | 276 | ||
142 | #endif /* _GL_FCNTL_H */ | 277 | #endif /* _GL_FCNTL_H */ |
143 | #endif /* _GL_FCNTL_H */ | 278 | #endif /* _GL_FCNTL_H */ |