(root)/
sed-4.9/
lib/
fcntl.in.h
       1  /* Like <fcntl.h>, but with non-working flags defined to 0.
       2  
       3     Copyright (C) 2006-2022 Free Software Foundation, Inc.
       4  
       5     This file is free software: you can redistribute it and/or modify
       6     it under the terms of the GNU Lesser General Public License as
       7     published by the Free Software Foundation; either version 2.1 of the
       8     License, or (at your option) any later version.
       9  
      10     This file 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 Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public License
      16     along with this program.  If not, see <https://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 && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
      38  # include <sys/stat.h>
      39  #endif
      40  #@INCLUDE_NEXT@ @NEXT_FCNTL_H@
      41  
      42  /* Native Windows platforms declare open(), creat() in <io.h>.  */
      43  #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
      44      && (defined _WIN32 && ! defined __CYGWIN__)
      45  # include <io.h>
      46  #endif
      47  
      48  #else
      49  /* Normal invocation convention.  */
      50  
      51  #ifndef _@GUARD_PREFIX@_FCNTL_H
      52  
      53  /* Needed before <sys/stat.h>.
      54     May also define off_t to a 64-bit type on native Windows.  */
      55  #include <sys/types.h>
      56  /* On some systems other than glibc, <sys/stat.h> is a prerequisite of
      57     <fcntl.h>.  On glibc systems, we would like to avoid namespace pollution.
      58     But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
      59     extern "C" { ... } block, which leads to errors in C++ mode with the
      60     overridden <sys/stat.h> from gnulib.  These errors are known to be gone
      61     with g++ version >= 4.3.  */
      62  #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
      63  # include <sys/stat.h>
      64  #endif
      65  /* The include_next requires a split double-inclusion guard.  */
      66  #@INCLUDE_NEXT@ @NEXT_FCNTL_H@
      67  
      68  /* Native Windows platforms declare open(), creat() in <io.h>.  */
      69  #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
      70      && (defined _WIN32 && ! defined __CYGWIN__)
      71  # include <io.h>
      72  #endif
      73  
      74  #ifndef _@GUARD_PREFIX@_FCNTL_H
      75  #define _@GUARD_PREFIX@_FCNTL_H
      76  
      77  #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
      78  # include <unistd.h>
      79  #endif
      80  
      81  
      82  /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
      83  
      84  /* The definition of _GL_ARG_NONNULL is copied here.  */
      85  
      86  /* The definition of _GL_WARN_ON_USE is copied here.  */
      87  
      88  
      89  /* Declare overridden functions.  */
      90  
      91  #if @GNULIB_CREAT@
      92  # if @REPLACE_CREAT@
      93  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
      94  #   undef creat
      95  #   define creat rpl_creat
      96  #  endif
      97  _GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode)
      98                               _GL_ARG_NONNULL ((1)));
      99  _GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode));
     100  # elif defined _WIN32 && !defined __CYGWIN__
     101  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     102  #   undef creat
     103  #   define creat _creat
     104  #  endif
     105  _GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode));
     106  # else
     107  _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode));
     108  # endif
     109  _GL_CXXALIASWARN (creat);
     110  #elif defined GNULIB_POSIXCHECK
     111  # undef creat
     112  /* Assume creat is always declared.  */
     113  _GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - "
     114                   "use gnulib module creat for portability");
     115  #elif @GNULIB_MDA_CREAT@
     116  /* On native Windows, map 'creat' to '_creat', so that -loldnames is not
     117     required.  In C++ with GNULIB_NAMESPACE, avoid differences between
     118     platforms by defining GNULIB_NAMESPACE::creat always.  */
     119  # if defined _WIN32 && !defined __CYGWIN__
     120  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     121  #   undef creat
     122  #   define creat _creat
     123  #  endif
     124  /* Need to cast, because in mingw the last argument is 'int mode'.  */
     125  _GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode));
     126  # else
     127  _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode));
     128  # endif
     129  _GL_CXXALIASWARN (creat);
     130  #endif
     131  
     132  #if @GNULIB_FCNTL@
     133  # if @REPLACE_FCNTL@
     134  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     135  #   undef fcntl
     136  #   define fcntl rpl_fcntl
     137  #  endif
     138  _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
     139  _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
     140  #  if !GNULIB_defined_rpl_fcntl
     141  #   define GNULIB_defined_rpl_fcntl 1
     142  #  endif
     143  # else
     144  #  if !@HAVE_FCNTL@
     145  _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
     146  #   if !GNULIB_defined_fcntl
     147  #    define GNULIB_defined_fcntl 1
     148  #   endif
     149  #  endif
     150  _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
     151  # endif
     152  _GL_CXXALIASWARN (fcntl);
     153  #elif defined GNULIB_POSIXCHECK
     154  # undef fcntl
     155  # if HAVE_RAW_DECL_FCNTL
     156  _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
     157                   "use gnulib module fcntl for portability");
     158  # endif
     159  #endif
     160  
     161  #if @GNULIB_OPEN@
     162  # if @REPLACE_OPEN@
     163  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     164  #   undef open
     165  #   define open rpl_open
     166  #  endif
     167  _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
     168                               _GL_ARG_NONNULL ((1)));
     169  _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
     170  # elif defined _WIN32 && !defined __CYGWIN__
     171  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     172  #   undef open
     173  #   define open _open
     174  #  endif
     175  _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...));
     176  # else
     177  _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
     178  # endif
     179  /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
     180     default argument.  _GL_CXXALIASWARN does not work in this case.  */
     181  # if !defined __hpux
     182  _GL_CXXALIASWARN (open);
     183  # endif
     184  #elif defined GNULIB_POSIXCHECK
     185  # undef open
     186  /* Assume open is always declared.  */
     187  _GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
     188                   "use gnulib module open for portability");
     189  #elif @GNULIB_MDA_OPEN@
     190  /* On native Windows, map 'open' to '_open', so that -loldnames is not
     191     required.  In C++ with GNULIB_NAMESPACE, avoid differences between
     192     platforms by defining GNULIB_NAMESPACE::open always.  */
     193  # if defined _WIN32 && !defined __CYGWIN__
     194  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     195  #   undef open
     196  #   define open _open
     197  #  endif
     198  _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...));
     199  # else
     200  _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
     201  # endif
     202  # if !defined __hpux
     203  _GL_CXXALIASWARN (open);
     204  # endif
     205  #endif
     206  
     207  #if @GNULIB_OPENAT@
     208  # if @REPLACE_OPENAT@
     209  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     210  #   undef openat
     211  #   define openat rpl_openat
     212  #  endif
     213  _GL_FUNCDECL_RPL (openat, int,
     214                    (int fd, char const *file, int flags, /* mode_t mode */ ...)
     215                    _GL_ARG_NONNULL ((2)));
     216  _GL_CXXALIAS_RPL (openat, int,
     217                    (int fd, char const *file, int flags, /* mode_t mode */ ...));
     218  # else
     219  #  if !@HAVE_OPENAT@
     220  _GL_FUNCDECL_SYS (openat, int,
     221                    (int fd, char const *file, int flags, /* mode_t mode */ ...)
     222                    _GL_ARG_NONNULL ((2)));
     223  #  endif
     224  _GL_CXXALIAS_SYS (openat, int,
     225                    (int fd, char const *file, int flags, /* mode_t mode */ ...));
     226  # endif
     227  _GL_CXXALIASWARN (openat);
     228  #elif defined GNULIB_POSIXCHECK
     229  # undef openat
     230  # if HAVE_RAW_DECL_OPENAT
     231  _GL_WARN_ON_USE (openat, "openat is not portable - "
     232                   "use gnulib module openat for portability");
     233  # endif
     234  #endif
     235  
     236  
     237  /* Fix up the FD_* macros, only known to be missing on mingw.  */
     238  
     239  #ifndef FD_CLOEXEC
     240  # define FD_CLOEXEC 1
     241  #endif
     242  
     243  /* Fix up the supported F_* macros.  Intentionally leave other F_*
     244     macros undefined.  Only known to be missing on mingw.  */
     245  
     246  #ifndef F_DUPFD_CLOEXEC
     247  # define F_DUPFD_CLOEXEC 0x40000000
     248  /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
     249  # define GNULIB_defined_F_DUPFD_CLOEXEC 1
     250  #else
     251  # define GNULIB_defined_F_DUPFD_CLOEXEC 0
     252  #endif
     253  
     254  #ifndef F_DUPFD
     255  # define F_DUPFD 1
     256  #endif
     257  
     258  #ifndef F_GETFD
     259  # define F_GETFD 2
     260  #endif
     261  
     262  /* Fix up the O_* macros.  */
     263  
     264  /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
     265     to values outside 'int' range, so omit these misdefinitions.
     266     But avoid namespace pollution on non-AIX systems.  */
     267  #ifdef _AIX
     268  # include <limits.h>
     269  # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
     270  #  undef O_CLOEXEC
     271  # endif
     272  # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
     273  #  undef O_NOFOLLOW
     274  # endif
     275  # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
     276  #  undef O_TTY_INIT
     277  # endif
     278  #endif
     279  
     280  #if !defined O_DIRECT && defined O_DIRECTIO
     281  /* Tru64 spells it 'O_DIRECTIO'.  */
     282  # define O_DIRECT O_DIRECTIO
     283  #endif
     284  
     285  #if !defined O_CLOEXEC && defined O_NOINHERIT
     286  /* Mingw spells it 'O_NOINHERIT'.  */
     287  # define O_CLOEXEC O_NOINHERIT
     288  #endif
     289  
     290  #ifndef O_CLOEXEC
     291  # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags.  */
     292  # define GNULIB_defined_O_CLOEXEC 1
     293  #else
     294  # define GNULIB_defined_O_CLOEXEC 0
     295  #endif
     296  
     297  #ifndef O_DIRECT
     298  # define O_DIRECT 0
     299  #endif
     300  
     301  #ifndef O_DIRECTORY
     302  # define O_DIRECTORY 0
     303  #endif
     304  
     305  #ifndef O_DSYNC
     306  # define O_DSYNC 0
     307  #endif
     308  
     309  #ifndef O_EXEC
     310  # define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
     311  #endif
     312  
     313  #ifndef O_IGNORE_CTTY
     314  # define O_IGNORE_CTTY 0
     315  #endif
     316  
     317  #ifndef O_NDELAY
     318  # define O_NDELAY 0
     319  #endif
     320  
     321  #ifndef O_NOATIME
     322  # define O_NOATIME 0
     323  #endif
     324  
     325  #ifndef O_NONBLOCK
     326  # define O_NONBLOCK O_NDELAY
     327  #endif
     328  
     329  /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
     330     value of O_NONBLOCK.  Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
     331     or to 0 as fallback.  */
     332  #if @GNULIB_NONBLOCKING@
     333  # if O_NONBLOCK
     334  #  define GNULIB_defined_O_NONBLOCK 0
     335  # else
     336  #  define GNULIB_defined_O_NONBLOCK 1
     337  #  undef O_NONBLOCK
     338  #  define O_NONBLOCK 0x40000000
     339  # endif
     340  #endif
     341  
     342  #ifndef O_NOCTTY
     343  # define O_NOCTTY 0
     344  #endif
     345  
     346  #ifndef O_NOFOLLOW
     347  # define O_NOFOLLOW 0
     348  #endif
     349  
     350  #ifndef O_NOLINK
     351  # define O_NOLINK 0
     352  #endif
     353  
     354  #ifndef O_NOLINKS
     355  # define O_NOLINKS 0
     356  #endif
     357  
     358  #ifndef O_NOTRANS
     359  # define O_NOTRANS 0
     360  #endif
     361  
     362  #ifndef O_RSYNC
     363  # define O_RSYNC 0
     364  #endif
     365  
     366  #ifndef O_SEARCH
     367  # define O_SEARCH O_RDONLY /* This is often close enough in older systems.  */
     368  #endif
     369  
     370  #ifndef O_SYNC
     371  # define O_SYNC 0
     372  #endif
     373  
     374  #ifndef O_TTY_INIT
     375  # define O_TTY_INIT 0
     376  #endif
     377  
     378  #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
     379  # undef O_ACCMODE
     380  # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
     381  #endif
     382  
     383  /* For systems that distinguish between text and binary I/O.
     384     O_BINARY is usually declared in fcntl.h  */
     385  #if !defined O_BINARY && defined _O_BINARY
     386    /* For MSC-compatible compilers.  */
     387  # define O_BINARY _O_BINARY
     388  # define O_TEXT _O_TEXT
     389  #endif
     390  
     391  #if defined __BEOS__ || defined __HAIKU__
     392    /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
     393  # undef O_BINARY
     394  # undef O_TEXT
     395  #endif
     396  
     397  #ifndef O_BINARY
     398  # define O_BINARY 0
     399  # define O_TEXT 0
     400  #endif
     401  
     402  /* Fix up the AT_* macros.  */
     403  
     404  /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
     405     value exceeds INT_MAX, so its use as an int doesn't conform to the
     406     C standard, and GCC and Sun C complain in some cases.  If the bug
     407     is present, undef AT_FDCWD here, so it can be redefined below.  */
     408  #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
     409  # undef AT_FDCWD
     410  #endif
     411  
     412  /* Use the same bit pattern as Solaris 9, but with the proper
     413     signedness.  The bit pattern is important, in case this actually is
     414     Solaris with the above workaround.  */
     415  #ifndef AT_FDCWD
     416  # define AT_FDCWD (-3041965)
     417  #endif
     418  
     419  /* Use the same values as Solaris 9.  This shouldn't matter, but
     420     there's no real reason to differ.  */
     421  #ifndef AT_SYMLINK_NOFOLLOW
     422  # define AT_SYMLINK_NOFOLLOW 4096
     423  #endif
     424  
     425  #ifndef AT_REMOVEDIR
     426  # define AT_REMOVEDIR 1
     427  #endif
     428  
     429  /* Solaris 9 lacks these two, so just pick unique values.  */
     430  #ifndef AT_SYMLINK_FOLLOW
     431  # define AT_SYMLINK_FOLLOW 2
     432  #endif
     433  
     434  #ifndef AT_EACCESS
     435  # define AT_EACCESS 4
     436  #endif
     437  
     438  /* Ignore this flag if not supported.  */
     439  #ifndef AT_NO_AUTOMOUNT
     440  # define AT_NO_AUTOMOUNT 0
     441  #endif
     442  
     443  #endif /* _@GUARD_PREFIX@_FCNTL_H */
     444  #endif /* _@GUARD_PREFIX@_FCNTL_H */
     445  #endif