Blame gl/fcntl.in.h

Packit a4aae4
/* Like <fcntl.h>, but with non-working flags defined to 0.
Packit a4aae4
Packit a4aae4
   Copyright (C) 2006-2017 Free Software Foundation, Inc.
Packit a4aae4
Packit a4aae4
   This program is free software: you can redistribute it and/or modify
Packit a4aae4
   it under the terms of the GNU Lesser General Public License as published by
Packit a4aae4
   the Free Software Foundation; either version 3 of the License, or
Packit a4aae4
   (at your option) any later version.
Packit a4aae4
Packit a4aae4
   This program is distributed in the hope that it will be useful,
Packit a4aae4
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit a4aae4
   GNU Lesser General Public License for more details.
Packit a4aae4
Packit a4aae4
   You should have received a copy of the GNU Lesser General Public License
Packit a4aae4
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit a4aae4
Packit a4aae4
/* written by Paul Eggert */
Packit a4aae4
Packit a4aae4
#if __GNUC__ >= 3
Packit a4aae4
@PRAGMA_SYSTEM_HEADER@
Packit a4aae4
#endif
Packit a4aae4
@PRAGMA_COLUMNS@
Packit a4aae4
Packit a4aae4
#if defined __need_system_fcntl_h
Packit a4aae4
/* Special invocation convention.  */
Packit a4aae4
Packit a4aae4
/* Needed before <sys/stat.h>.
Packit a4aae4
   May also define off_t to a 64-bit type on native Windows.  */
Packit a4aae4
#include <sys/types.h>
Packit a4aae4
/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
Packit a4aae4
   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
Packit a4aae4
   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
Packit a4aae4
   extern "C" { ... } block, which leads to errors in C++ mode with the
Packit a4aae4
   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
Packit a4aae4
   with g++ version >= 4.3.  */
Packit a4aae4
#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
Packit a4aae4
# include <sys/stat.h>
Packit a4aae4
#endif
Packit a4aae4
#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
Packit a4aae4
Packit a4aae4
#else
Packit a4aae4
/* Normal invocation convention.  */
Packit a4aae4
Packit a4aae4
#ifndef _@GUARD_PREFIX@_FCNTL_H
Packit a4aae4
Packit a4aae4
/* Needed before <sys/stat.h>.
Packit a4aae4
   May also define off_t to a 64-bit type on native Windows.  */
Packit a4aae4
#include <sys/types.h>
Packit a4aae4
/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
Packit a4aae4
   <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
Packit a4aae4
   But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
Packit a4aae4
   extern "C" { ... } block, which leads to errors in C++ mode with the
Packit a4aae4
   overridden <sys/stat.h> from gnulib.  These errors are known to be gone
Packit a4aae4
   with g++ version >= 4.3.  */
Packit a4aae4
#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
Packit a4aae4
# include <sys/stat.h>
Packit a4aae4
#endif
Packit a4aae4
/* The include_next requires a split double-inclusion guard.  */
Packit a4aae4
#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
Packit a4aae4
Packit a4aae4
#ifndef _@GUARD_PREFIX@_FCNTL_H
Packit a4aae4
#define _@GUARD_PREFIX@_FCNTL_H
Packit a4aae4
Packit a4aae4
#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
Packit a4aae4
# include <unistd.h>
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Native Windows platforms declare open(), creat() in <io.h>.  */
Packit a4aae4
#if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
Packit a4aae4
    && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
Packit a4aae4
# include <io.h>
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
Packit a4aae4
Packit a4aae4
/* The definition of _GL_ARG_NONNULL is copied here.  */
Packit a4aae4
Packit a4aae4
/* The definition of _GL_WARN_ON_USE is copied here.  */
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* Declare overridden functions.  */
Packit a4aae4
Packit a4aae4
#if @GNULIB_FCNTL@
Packit a4aae4
# if @REPLACE_FCNTL@
Packit a4aae4
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit a4aae4
#   undef fcntl
Packit a4aae4
#   define fcntl rpl_fcntl
Packit a4aae4
#  endif
Packit a4aae4
_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
Packit a4aae4
_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
Packit a4aae4
# else
Packit a4aae4
#  if !@HAVE_FCNTL@
Packit a4aae4
_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
Packit a4aae4
#  endif
Packit a4aae4
_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
Packit a4aae4
# endif
Packit a4aae4
_GL_CXXALIASWARN (fcntl);
Packit a4aae4
#elif defined GNULIB_POSIXCHECK
Packit a4aae4
# undef fcntl
Packit a4aae4
# if HAVE_RAW_DECL_FCNTL
Packit a4aae4
_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
Packit a4aae4
                 "use gnulib module fcntl for portability");
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if @GNULIB_OPEN@
Packit a4aae4
# if @REPLACE_OPEN@
Packit a4aae4
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit a4aae4
#   undef open
Packit a4aae4
#   define open rpl_open
Packit a4aae4
#  endif
Packit a4aae4
_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
Packit a4aae4
                             _GL_ARG_NONNULL ((1)));
Packit a4aae4
_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
Packit a4aae4
# else
Packit a4aae4
_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
Packit a4aae4
# endif
Packit a4aae4
/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
Packit a4aae4
   default argument.  _GL_CXXALIASWARN does not work in this case.  */
Packit a4aae4
# if !defined __hpux
Packit a4aae4
_GL_CXXALIASWARN (open);
Packit a4aae4
# endif
Packit a4aae4
#elif defined GNULIB_POSIXCHECK
Packit a4aae4
# undef open
Packit a4aae4
/* Assume open is always declared.  */
Packit a4aae4
_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
Packit a4aae4
                 "use gnulib module open for portability");
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if @GNULIB_OPENAT@
Packit a4aae4
# if @REPLACE_OPENAT@
Packit a4aae4
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit a4aae4
#   undef openat
Packit a4aae4
#   define openat rpl_openat
Packit a4aae4
#  endif
Packit a4aae4
_GL_FUNCDECL_RPL (openat, int,
Packit a4aae4
                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
Packit a4aae4
                  _GL_ARG_NONNULL ((2)));
Packit a4aae4
_GL_CXXALIAS_RPL (openat, int,
Packit a4aae4
                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
Packit a4aae4
# else
Packit a4aae4
#  if !@HAVE_OPENAT@
Packit a4aae4
_GL_FUNCDECL_SYS (openat, int,
Packit a4aae4
                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
Packit a4aae4
                  _GL_ARG_NONNULL ((2)));
Packit a4aae4
#  endif
Packit a4aae4
_GL_CXXALIAS_SYS (openat, int,
Packit a4aae4
                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
Packit a4aae4
# endif
Packit a4aae4
_GL_CXXALIASWARN (openat);
Packit a4aae4
#elif defined GNULIB_POSIXCHECK
Packit a4aae4
# undef openat
Packit a4aae4
# if HAVE_RAW_DECL_OPENAT
Packit a4aae4
_GL_WARN_ON_USE (openat, "openat is not portable - "
Packit a4aae4
                 "use gnulib module openat for portability");
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* Fix up the FD_* macros, only known to be missing on mingw.  */
Packit a4aae4
Packit a4aae4
#ifndef FD_CLOEXEC
Packit a4aae4
# define FD_CLOEXEC 1
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Fix up the supported F_* macros.  Intentionally leave other F_*
Packit a4aae4
   macros undefined.  Only known to be missing on mingw.  */
Packit a4aae4
Packit a4aae4
#ifndef F_DUPFD_CLOEXEC
Packit a4aae4
# define F_DUPFD_CLOEXEC 0x40000000
Packit a4aae4
/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
Packit a4aae4
# define GNULIB_defined_F_DUPFD_CLOEXEC 1
Packit a4aae4
#else
Packit a4aae4
# define GNULIB_defined_F_DUPFD_CLOEXEC 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef F_DUPFD
Packit a4aae4
# define F_DUPFD 1
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef F_GETFD
Packit a4aae4
# define F_GETFD 2
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Fix up the O_* macros.  */
Packit a4aae4
Packit a4aae4
/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
Packit a4aae4
   to values outside 'int' range, so omit these misdefinitions.
Packit a4aae4
   But avoid namespace pollution on non-AIX systems.  */
Packit a4aae4
#ifdef _AIX
Packit a4aae4
# include <limits.h>
Packit a4aae4
# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
Packit a4aae4
#  undef O_CLOEXEC
Packit a4aae4
# endif
Packit a4aae4
# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
Packit a4aae4
#  undef O_NOFOLLOW
Packit a4aae4
# endif
Packit a4aae4
# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
Packit a4aae4
#  undef O_TTY_INIT
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if !defined O_DIRECT && defined O_DIRECTIO
Packit a4aae4
/* Tru64 spells it 'O_DIRECTIO'.  */
Packit a4aae4
# define O_DIRECT O_DIRECTIO
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if !defined O_CLOEXEC && defined O_NOINHERIT
Packit a4aae4
/* Mingw spells it 'O_NOINHERIT'.  */
Packit a4aae4
# define O_CLOEXEC O_NOINHERIT
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_CLOEXEC
Packit a4aae4
# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags.  */
Packit a4aae4
# define GNULIB_defined_O_CLOEXEC 1
Packit a4aae4
#else
Packit a4aae4
# define GNULIB_defined_O_CLOEXEC 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_DIRECT
Packit a4aae4
# define O_DIRECT 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_DIRECTORY
Packit a4aae4
# define O_DIRECTORY 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_DSYNC
Packit a4aae4
# define O_DSYNC 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_EXEC
Packit a4aae4
# define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_IGNORE_CTTY
Packit a4aae4
# define O_IGNORE_CTTY 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NDELAY
Packit a4aae4
# define O_NDELAY 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NOATIME
Packit a4aae4
# define O_NOATIME 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NONBLOCK
Packit a4aae4
# define O_NONBLOCK O_NDELAY
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
Packit a4aae4
   value of O_NONBLOCK.  Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
Packit a4aae4
   or to 0 as fallback.  */
Packit a4aae4
#if @GNULIB_NONBLOCKING@
Packit a4aae4
# if O_NONBLOCK
Packit a4aae4
#  define GNULIB_defined_O_NONBLOCK 0
Packit a4aae4
# else
Packit a4aae4
#  define GNULIB_defined_O_NONBLOCK 1
Packit a4aae4
#  undef O_NONBLOCK
Packit a4aae4
#  define O_NONBLOCK 0x40000000
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NOCTTY
Packit a4aae4
# define O_NOCTTY 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NOFOLLOW
Packit a4aae4
# define O_NOFOLLOW 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NOLINK
Packit a4aae4
# define O_NOLINK 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NOLINKS
Packit a4aae4
# define O_NOLINKS 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_NOTRANS
Packit a4aae4
# define O_NOTRANS 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_RSYNC
Packit a4aae4
# define O_RSYNC 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_SEARCH
Packit a4aae4
# define O_SEARCH O_RDONLY /* This is often close enough in older systems.  */
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_SYNC
Packit a4aae4
# define O_SYNC 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_TTY_INIT
Packit a4aae4
# define O_TTY_INIT 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
Packit a4aae4
# undef O_ACCMODE
Packit a4aae4
# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* For systems that distinguish between text and binary I/O.
Packit a4aae4
   O_BINARY is usually declared in fcntl.h  */
Packit a4aae4
#if !defined O_BINARY && defined _O_BINARY
Packit a4aae4
  /* For MSC-compatible compilers.  */
Packit a4aae4
# define O_BINARY _O_BINARY
Packit a4aae4
# define O_TEXT _O_TEXT
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if defined __BEOS__ || defined __HAIKU__
Packit a4aae4
  /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
Packit a4aae4
# undef O_BINARY
Packit a4aae4
# undef O_TEXT
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef O_BINARY
Packit a4aae4
# define O_BINARY 0
Packit a4aae4
# define O_TEXT 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Fix up the AT_* macros.  */
Packit a4aae4
Packit a4aae4
/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
Packit a4aae4
   value exceeds INT_MAX, so its use as an int doesn't conform to the
Packit a4aae4
   C standard, and GCC and Sun C complain in some cases.  If the bug
Packit a4aae4
   is present, undef AT_FDCWD here, so it can be redefined below.  */
Packit a4aae4
#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
Packit a4aae4
# undef AT_FDCWD
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Use the same bit pattern as Solaris 9, but with the proper
Packit a4aae4
   signedness.  The bit pattern is important, in case this actually is
Packit a4aae4
   Solaris with the above workaround.  */
Packit a4aae4
#ifndef AT_FDCWD
Packit a4aae4
# define AT_FDCWD (-3041965)
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Use the same values as Solaris 9.  This shouldn't matter, but
Packit a4aae4
   there's no real reason to differ.  */
Packit a4aae4
#ifndef AT_SYMLINK_NOFOLLOW
Packit a4aae4
# define AT_SYMLINK_NOFOLLOW 4096
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef AT_REMOVEDIR
Packit a4aae4
# define AT_REMOVEDIR 1
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Solaris 9 lacks these two, so just pick unique values.  */
Packit a4aae4
#ifndef AT_SYMLINK_FOLLOW
Packit a4aae4
# define AT_SYMLINK_FOLLOW 2
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef AT_EACCESS
Packit a4aae4
# define AT_EACCESS 4
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
#endif /* _@GUARD_PREFIX@_FCNTL_H */
Packit a4aae4
#endif /* _@GUARD_PREFIX@_FCNTL_H */
Packit a4aae4
#endif