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