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 */ |
