Blame lib/fcntl.in.h

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