(root)/
findutils-4.9.0/
gl/
lib/
sys_stat.in.h
       1  /* Provide a more complete sys/stat.h header file.
       2     Copyright (C) 2005-2022 Free Software Foundation, Inc.
       3  
       4     This file is free software: you can redistribute it and/or modify
       5     it under the terms of the GNU Lesser General Public License as
       6     published by the Free Software Foundation; either version 2.1 of the
       7     License, or (at your option) any later version.
       8  
       9     This file is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12     GNU Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  /* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
      18  
      19  /* This file is supposed to be used on platforms where <sys/stat.h> is
      20     incomplete.  It is intended to provide definitions and prototypes
      21     needed by an application.  Start with what the system provides.  */
      22  
      23  #if __GNUC__ >= 3
      24  @PRAGMA_SYSTEM_HEADER@
      25  #endif
      26  @PRAGMA_COLUMNS@
      27  
      28  #if defined __need_system_sys_stat_h
      29  /* Special invocation convention.  */
      30  
      31  #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
      32  
      33  #else
      34  /* Normal invocation convention.  */
      35  
      36  #ifndef _@GUARD_PREFIX@_SYS_STAT_H
      37  
      38  /* Get nlink_t.
      39     May also define off_t to a 64-bit type on native Windows.  */
      40  #include <sys/types.h>
      41  
      42  /* Get struct timespec.  */
      43  #include <time.h>
      44  
      45  /* The include_next requires a split double-inclusion guard.  */
      46  #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
      47  
      48  #ifndef _@GUARD_PREFIX@_SYS_STAT_H
      49  #define _@GUARD_PREFIX@_SYS_STAT_H
      50  
      51  /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
      52  
      53  /* The definition of _GL_ARG_NONNULL is copied here.  */
      54  
      55  /* The definition of _GL_WARN_ON_USE is copied here.  */
      56  
      57  /* Before doing "#define mknod rpl_mknod" below, we need to include all
      58     headers that may declare mknod().  OS/2 kLIBC declares mknod() in
      59     <unistd.h>, not in <sys/stat.h>.  */
      60  #ifdef __KLIBC__
      61  # include <unistd.h>
      62  #endif
      63  
      64  /* Before doing "#define mkdir rpl_mkdir" below, we need to include all
      65     headers that may declare mkdir().  Native Windows platforms declare mkdir
      66     in <io.h> and/or <direct.h>, not in <sys/stat.h>.  */
      67  #if defined _WIN32 && ! defined __CYGWIN__
      68  # include <io.h>     /* mingw32, mingw64 */
      69  # include <direct.h> /* mingw64, MSVC 9 */
      70  #endif
      71  
      72  /* Native Windows platforms declare umask() in <io.h>.  */
      73  #if 0 && (defined _WIN32 && ! defined __CYGWIN__)
      74  # include <io.h>
      75  #endif
      76  
      77  /* Large File Support on native Windows.  */
      78  #if @WINDOWS_64_BIT_ST_SIZE@
      79  # define stat _stati64
      80  #endif
      81  
      82  /* Optionally, override 'struct stat' on native Windows.  */
      83  #if @GNULIB_OVERRIDES_STRUCT_STAT@
      84  
      85  # undef stat
      86  # if @GNULIB_STAT@
      87  #  define stat rpl_stat
      88  # else
      89     /* Provoke a clear link error if stat() is used as a function and
      90        module 'stat' is not in use.  */
      91  #  define stat stat_used_without_requesting_gnulib_module_stat
      92  # endif
      93  
      94  # if !GNULIB_defined_struct_stat
      95  struct stat
      96  {
      97    dev_t st_dev;
      98    ino_t st_ino;
      99    mode_t st_mode;
     100    nlink_t st_nlink;
     101  #  if 0
     102    uid_t st_uid;
     103  #  else /* uid_t is not defined by default on native Windows.  */
     104    short st_uid;
     105  #  endif
     106  #  if 0
     107    gid_t st_gid;
     108  #  else /* gid_t is not defined by default on native Windows.  */
     109    short st_gid;
     110  #  endif
     111    dev_t st_rdev;
     112    off_t st_size;
     113  #  if 0
     114    blksize_t st_blksize;
     115    blkcnt_t st_blocks;
     116  #  endif
     117  
     118  #  if @WINDOWS_STAT_TIMESPEC@
     119    struct timespec st_atim;
     120    struct timespec st_mtim;
     121    struct timespec st_ctim;
     122  #  else
     123    time_t st_atime;
     124    time_t st_mtime;
     125    time_t st_ctime;
     126  #  endif
     127  };
     128  #  if @WINDOWS_STAT_TIMESPEC@
     129  #   define st_atime st_atim.tv_sec
     130  #   define st_mtime st_mtim.tv_sec
     131  #   define st_ctime st_ctim.tv_sec
     132      /* Indicator, for gnulib internal purposes.  */
     133  #   define _GL_WINDOWS_STAT_TIMESPEC 1
     134  #  endif
     135  #  define GNULIB_defined_struct_stat 1
     136  # endif
     137  
     138  /* Other possible values of st_mode.  */
     139  # if 0
     140  #  define _S_IFBLK  0x6000
     141  # endif
     142  # if 0
     143  #  define _S_IFLNK  0xA000
     144  # endif
     145  # if 0
     146  #  define _S_IFSOCK 0xC000
     147  # endif
     148  
     149  #endif
     150  
     151  #ifndef S_IFIFO
     152  # ifdef _S_IFIFO
     153  #  define S_IFIFO _S_IFIFO
     154  # endif
     155  #endif
     156  
     157  #ifndef S_IFMT
     158  # define S_IFMT 0170000
     159  #endif
     160  
     161  #if STAT_MACROS_BROKEN
     162  # undef S_ISBLK
     163  # undef S_ISCHR
     164  # undef S_ISDIR
     165  # undef S_ISFIFO
     166  # undef S_ISLNK
     167  # undef S_ISNAM
     168  # undef S_ISMPB
     169  # undef S_ISMPC
     170  # undef S_ISNWK
     171  # undef S_ISREG
     172  # undef S_ISSOCK
     173  #endif
     174  
     175  #ifndef S_ISBLK
     176  # ifdef S_IFBLK
     177  #  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
     178  # else
     179  #  define S_ISBLK(m) 0
     180  # endif
     181  #endif
     182  
     183  #ifndef S_ISCHR
     184  # ifdef S_IFCHR
     185  #  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
     186  # else
     187  #  define S_ISCHR(m) 0
     188  # endif
     189  #endif
     190  
     191  #ifndef S_ISDIR
     192  # ifdef S_IFDIR
     193  #  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
     194  # else
     195  #  define S_ISDIR(m) 0
     196  # endif
     197  #endif
     198  
     199  #ifndef S_ISDOOR /* Solaris 2.5 and up */
     200  # define S_ISDOOR(m) 0
     201  #endif
     202  
     203  #ifndef S_ISFIFO
     204  # ifdef S_IFIFO
     205  #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
     206  # else
     207  #  define S_ISFIFO(m) 0
     208  # endif
     209  #endif
     210  
     211  #ifndef S_ISLNK
     212  # ifdef S_IFLNK
     213  #  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
     214  # else
     215  #  define S_ISLNK(m) 0
     216  # endif
     217  #endif
     218  
     219  #ifndef S_ISMPB /* V7 */
     220  # ifdef S_IFMPB
     221  #  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
     222  #  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
     223  # else
     224  #  define S_ISMPB(m) 0
     225  #  define S_ISMPC(m) 0
     226  # endif
     227  #endif
     228  
     229  #ifndef S_ISMPX /* AIX */
     230  # define S_ISMPX(m) 0
     231  #endif
     232  
     233  #ifndef S_ISNAM /* Xenix */
     234  # ifdef S_IFNAM
     235  #  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
     236  # else
     237  #  define S_ISNAM(m) 0
     238  # endif
     239  #endif
     240  
     241  #ifndef S_ISNWK /* HP/UX */
     242  # ifdef S_IFNWK
     243  #  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
     244  # else
     245  #  define S_ISNWK(m) 0
     246  # endif
     247  #endif
     248  
     249  #ifndef S_ISPORT /* Solaris 10 and up */
     250  # define S_ISPORT(m) 0
     251  #endif
     252  
     253  #ifndef S_ISREG
     254  # ifdef S_IFREG
     255  #  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
     256  # else
     257  #  define S_ISREG(m) 0
     258  # endif
     259  #endif
     260  
     261  #ifndef S_ISSOCK
     262  # ifdef S_IFSOCK
     263  #  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
     264  # else
     265  #  define S_ISSOCK(m) 0
     266  # endif
     267  #endif
     268  
     269  
     270  #ifndef S_TYPEISMQ
     271  # define S_TYPEISMQ(p) 0
     272  #endif
     273  
     274  #ifndef S_TYPEISTMO
     275  # define S_TYPEISTMO(p) 0
     276  #endif
     277  
     278  
     279  #ifndef S_TYPEISSEM
     280  # ifdef S_INSEM
     281  #  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
     282  # else
     283  #  define S_TYPEISSEM(p) 0
     284  # endif
     285  #endif
     286  
     287  #ifndef S_TYPEISSHM
     288  # ifdef S_INSHD
     289  #  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
     290  # else
     291  #  define S_TYPEISSHM(p) 0
     292  # endif
     293  #endif
     294  
     295  /* high performance ("contiguous data") */
     296  #ifndef S_ISCTG
     297  # define S_ISCTG(p) 0
     298  #endif
     299  
     300  /* Cray DMF (data migration facility): off line, with data  */
     301  #ifndef S_ISOFD
     302  # define S_ISOFD(p) 0
     303  #endif
     304  
     305  /* Cray DMF (data migration facility): off line, with no data  */
     306  #ifndef S_ISOFL
     307  # define S_ISOFL(p) 0
     308  #endif
     309  
     310  /* 4.4BSD whiteout */
     311  #ifndef S_ISWHT
     312  # define S_ISWHT(m) 0
     313  #endif
     314  
     315  /* If any of the following are undefined,
     316     define them to their de facto standard values.  */
     317  #if !S_ISUID
     318  # define S_ISUID 04000
     319  #endif
     320  #if !S_ISGID
     321  # define S_ISGID 02000
     322  #endif
     323  
     324  /* S_ISVTX is a common extension to POSIX.  */
     325  #ifndef S_ISVTX
     326  # define S_ISVTX 01000
     327  #endif
     328  
     329  #if !S_IRUSR && S_IREAD
     330  # define S_IRUSR S_IREAD
     331  #endif
     332  #if !S_IRUSR
     333  # define S_IRUSR 00400
     334  #endif
     335  #if !S_IRGRP
     336  # define S_IRGRP (S_IRUSR >> 3)
     337  #endif
     338  #if !S_IROTH
     339  # define S_IROTH (S_IRUSR >> 6)
     340  #endif
     341  
     342  #if !S_IWUSR && S_IWRITE
     343  # define S_IWUSR S_IWRITE
     344  #endif
     345  #if !S_IWUSR
     346  # define S_IWUSR 00200
     347  #endif
     348  #if !S_IWGRP
     349  # define S_IWGRP (S_IWUSR >> 3)
     350  #endif
     351  #if !S_IWOTH
     352  # define S_IWOTH (S_IWUSR >> 6)
     353  #endif
     354  
     355  #if !S_IXUSR && S_IEXEC
     356  # define S_IXUSR S_IEXEC
     357  #endif
     358  #if !S_IXUSR
     359  # define S_IXUSR 00100
     360  #endif
     361  #if !S_IXGRP
     362  # define S_IXGRP (S_IXUSR >> 3)
     363  #endif
     364  #if !S_IXOTH
     365  # define S_IXOTH (S_IXUSR >> 6)
     366  #endif
     367  
     368  #if !S_IRWXU
     369  # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
     370  #endif
     371  #if !S_IRWXG
     372  # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
     373  #endif
     374  #if !S_IRWXO
     375  # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
     376  #endif
     377  
     378  /* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are
     379     not implemented in GNU/Linux, some Gnulib-using apps use the macros.  */
     380  #if !S_IXUGO
     381  # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
     382  #endif
     383  #ifndef S_IRWXUGO
     384  # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
     385  #endif
     386  
     387  /* Macros for futimens and utimensat.  */
     388  #ifndef UTIME_NOW
     389  # define UTIME_NOW (-1)
     390  # define UTIME_OMIT (-2)
     391  #endif
     392  
     393  
     394  #if @GNULIB_MDA_CHMOD@
     395  /* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not
     396     required.  In C++ with GNULIB_NAMESPACE, avoid differences between
     397     platforms by defining GNULIB_NAMESPACE::chmod always.  */
     398  # if defined _WIN32 && !defined __CYGWIN__
     399  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     400  #   undef chmod
     401  #   define chmod _chmod
     402  #  endif
     403  /* Need to cast, because in mingw the last argument is 'int mode'.  */
     404  _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode));
     405  # else
     406  _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode));
     407  # endif
     408  _GL_CXXALIASWARN (chmod);
     409  #endif
     410  
     411  
     412  #if @GNULIB_FCHMODAT@
     413  # if @REPLACE_FCHMODAT@
     414  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     415  #   undef fchmodat
     416  #   define fchmodat rpl_fchmodat
     417  #  endif
     418  _GL_FUNCDECL_RPL (fchmodat, int,
     419                    (int fd, char const *file, mode_t mode, int flag)
     420                    _GL_ARG_NONNULL ((2)));
     421  _GL_CXXALIAS_RPL (fchmodat, int,
     422                    (int fd, char const *file, mode_t mode, int flag));
     423  # else
     424  #  if !@HAVE_FCHMODAT@
     425  _GL_FUNCDECL_SYS (fchmodat, int,
     426                    (int fd, char const *file, mode_t mode, int flag)
     427                    _GL_ARG_NONNULL ((2)));
     428  #  endif
     429  _GL_CXXALIAS_SYS (fchmodat, int,
     430                    (int fd, char const *file, mode_t mode, int flag));
     431  # endif
     432  _GL_CXXALIASWARN (fchmodat);
     433  #elif defined GNULIB_POSIXCHECK
     434  # undef fchmodat
     435  # if HAVE_RAW_DECL_FCHMODAT
     436  _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
     437                   "use gnulib module openat for portability");
     438  # endif
     439  #endif
     440  
     441  
     442  #if @GNULIB_FSTAT@
     443  # if @REPLACE_FSTAT@
     444  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     445  #   undef fstat
     446  #   define fstat rpl_fstat
     447  #  endif
     448  _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
     449  _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
     450  # else
     451  _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
     452  # endif
     453  # if __GLIBC__ >= 2
     454  _GL_CXXALIASWARN (fstat);
     455  # endif
     456  #elif @GNULIB_OVERRIDES_STRUCT_STAT@
     457  # undef fstat
     458  # define fstat fstat_used_without_requesting_gnulib_module_fstat
     459  #elif @WINDOWS_64_BIT_ST_SIZE@
     460  /* Above, we define stat to _stati64.  */
     461  # define fstat _fstati64
     462  #elif defined GNULIB_POSIXCHECK
     463  # undef fstat
     464  # if HAVE_RAW_DECL_FSTAT
     465  _GL_WARN_ON_USE (fstat, "fstat has portability problems - "
     466                   "use gnulib module fstat for portability");
     467  # endif
     468  #endif
     469  
     470  
     471  #if @GNULIB_FSTATAT@
     472  # if @REPLACE_FSTATAT@
     473  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     474  #   undef fstatat
     475  #   define fstatat rpl_fstatat
     476  #  endif
     477  _GL_FUNCDECL_RPL (fstatat, int,
     478                    (int fd, char const *restrict name, struct stat *restrict st,
     479                     int flags)
     480                    _GL_ARG_NONNULL ((2, 3)));
     481  _GL_CXXALIAS_RPL (fstatat, int,
     482                    (int fd, char const *restrict name, struct stat *restrict st,
     483                     int flags));
     484  # else
     485  #  if !@HAVE_FSTATAT@
     486  _GL_FUNCDECL_SYS (fstatat, int,
     487                    (int fd, char const *restrict name, struct stat *restrict st,
     488                     int flags)
     489                    _GL_ARG_NONNULL ((2, 3)));
     490  #  endif
     491  _GL_CXXALIAS_SYS (fstatat, int,
     492                    (int fd, char const *restrict name, struct stat *restrict st,
     493                     int flags));
     494  # endif
     495  _GL_CXXALIASWARN (fstatat);
     496  #elif @GNULIB_OVERRIDES_STRUCT_STAT@
     497  # undef fstatat
     498  # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat
     499  #elif defined GNULIB_POSIXCHECK
     500  # undef fstatat
     501  # if HAVE_RAW_DECL_FSTATAT
     502  _GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
     503                   "use gnulib module openat for portability");
     504  # endif
     505  #endif
     506  
     507  
     508  #if @GNULIB_FUTIMENS@
     509  /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
     510     implementation relies on futimesat, which on Solaris 10 makes an invocation
     511     to futimens that is meant to invoke the libc's futimens(), not gnulib's
     512     futimens().  */
     513  # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun)
     514  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     515  #   undef futimens
     516  #   define futimens rpl_futimens
     517  #  endif
     518  _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
     519  _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
     520  # else
     521  #  if !@HAVE_FUTIMENS@
     522  _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
     523  #  endif
     524  _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
     525  # endif
     526  # if @HAVE_FUTIMENS@
     527  _GL_CXXALIASWARN (futimens);
     528  # endif
     529  #elif defined GNULIB_POSIXCHECK
     530  # undef futimens
     531  # if HAVE_RAW_DECL_FUTIMENS
     532  _GL_WARN_ON_USE (futimens, "futimens is not portable - "
     533                   "use gnulib module futimens for portability");
     534  # endif
     535  #endif
     536  
     537  
     538  #if @GNULIB_GETUMASK@
     539  # if !@HAVE_GETUMASK@
     540  _GL_FUNCDECL_SYS (getumask, mode_t, (void));
     541  # endif
     542  _GL_CXXALIAS_SYS (getumask, mode_t, (void));
     543  # if @HAVE_GETUMASK@
     544  _GL_CXXALIASWARN (getumask);
     545  # endif
     546  #elif defined GNULIB_POSIXCHECK
     547  # undef getumask
     548  # if HAVE_RAW_DECL_GETUMASK
     549  _GL_WARN_ON_USE (getumask, "getumask is not portable - "
     550                   "use gnulib module getumask for portability");
     551  # endif
     552  #endif
     553  
     554  
     555  #if @GNULIB_LCHMOD@
     556  /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
     557     denotes a symbolic link.  */
     558  # if !@HAVE_LCHMOD@ || defined __hpux
     559  _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
     560                                 _GL_ARG_NONNULL ((1)));
     561  # endif
     562  _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
     563  _GL_CXXALIASWARN (lchmod);
     564  #elif defined GNULIB_POSIXCHECK
     565  # undef lchmod
     566  # if HAVE_RAW_DECL_LCHMOD
     567  _GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
     568                   "use gnulib module lchmod for portability");
     569  # endif
     570  #endif
     571  
     572  
     573  #if @GNULIB_LSTAT@
     574  # if ! @HAVE_LSTAT@
     575  /* mingw does not support symlinks, therefore it does not have lstat.  But
     576     without links, stat does just fine.  */
     577  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     578  #   define lstat stat
     579  #  endif
     580  _GL_CXXALIAS_RPL_1 (lstat, stat, int,
     581                      (const char *restrict name, struct stat *restrict buf));
     582  # elif @REPLACE_LSTAT@
     583  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     584  #   undef lstat
     585  #   define lstat rpl_lstat
     586  #  endif
     587  _GL_FUNCDECL_RPL (lstat, int,
     588                    (const char *restrict name, struct stat *restrict buf)
     589                    _GL_ARG_NONNULL ((1, 2)));
     590  _GL_CXXALIAS_RPL (lstat, int,
     591                    (const char *restrict name, struct stat *restrict buf));
     592  # else
     593  _GL_CXXALIAS_SYS (lstat, int,
     594                    (const char *restrict name, struct stat *restrict buf));
     595  # endif
     596  # if @HAVE_LSTAT@
     597  _GL_CXXALIASWARN (lstat);
     598  # endif
     599  #elif @GNULIB_OVERRIDES_STRUCT_STAT@
     600  # undef lstat
     601  # define lstat lstat_used_without_requesting_gnulib_module_lstat
     602  #elif defined GNULIB_POSIXCHECK
     603  # undef lstat
     604  # if HAVE_RAW_DECL_LSTAT
     605  _GL_WARN_ON_USE (lstat, "lstat is unportable - "
     606                   "use gnulib module lstat for portability");
     607  # endif
     608  #endif
     609  
     610  
     611  #if @GNULIB_MKDIR@
     612  # if @REPLACE_MKDIR@
     613  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     614  #   undef mkdir
     615  #   define mkdir rpl_mkdir
     616  #  endif
     617  _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
     618                                 _GL_ARG_NONNULL ((1)));
     619  _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
     620  # elif defined _WIN32 && !defined __CYGWIN__
     621  /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
     622     Additionally, it declares _mkdir (and depending on compile flags, an
     623     alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
     624     which are included above.  */
     625  #  if !GNULIB_defined_rpl_mkdir
     626  static int
     627  rpl_mkdir (char const *name, mode_t mode)
     628  {
     629    return _mkdir (name);
     630  }
     631  #   define GNULIB_defined_rpl_mkdir 1
     632  #  endif
     633  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     634  #   undef mkdir
     635  #   define mkdir rpl_mkdir
     636  #  endif
     637  _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
     638  # else
     639  _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
     640  # endif
     641  _GL_CXXALIASWARN (mkdir);
     642  #elif defined GNULIB_POSIXCHECK
     643  # undef mkdir
     644  # if HAVE_RAW_DECL_MKDIR
     645  _GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - "
     646                   "use gnulib module mkdir for portability");
     647  # endif
     648  #elif @GNULIB_MDA_MKDIR@
     649  /* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not
     650     required.  In C++ with GNULIB_NAMESPACE, avoid differences between
     651     platforms by defining GNULIB_NAMESPACE::mkdir always.  */
     652  # if defined _WIN32 && !defined __CYGWIN__
     653  #  if !GNULIB_defined_rpl_mkdir
     654  static int
     655  rpl_mkdir (char const *name, mode_t mode)
     656  {
     657    return _mkdir (name);
     658  }
     659  #   define GNULIB_defined_rpl_mkdir 1
     660  #  endif
     661  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     662  #   undef mkdir
     663  #   define mkdir rpl_mkdir
     664  #  endif
     665  _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
     666  # else
     667  _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
     668  # endif
     669  _GL_CXXALIASWARN (mkdir);
     670  #endif
     671  
     672  
     673  #if @GNULIB_MKDIRAT@
     674  # if !@HAVE_MKDIRAT@
     675  _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
     676                                  _GL_ARG_NONNULL ((2)));
     677  # endif
     678  _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
     679  _GL_CXXALIASWARN (mkdirat);
     680  #elif defined GNULIB_POSIXCHECK
     681  # undef mkdirat
     682  # if HAVE_RAW_DECL_MKDIRAT
     683  _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
     684                   "use gnulib module openat for portability");
     685  # endif
     686  #endif
     687  
     688  
     689  #if @GNULIB_MKFIFO@
     690  # if @REPLACE_MKFIFO@
     691  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     692  #   undef mkfifo
     693  #   define mkfifo rpl_mkfifo
     694  #  endif
     695  _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
     696                                 _GL_ARG_NONNULL ((1)));
     697  _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
     698  # else
     699  #  if !@HAVE_MKFIFO@
     700  _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
     701                                 _GL_ARG_NONNULL ((1)));
     702  #  endif
     703  _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
     704  # endif
     705  _GL_CXXALIASWARN (mkfifo);
     706  #elif defined GNULIB_POSIXCHECK
     707  # undef mkfifo
     708  # if HAVE_RAW_DECL_MKFIFO
     709  _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
     710                   "use gnulib module mkfifo for portability");
     711  # endif
     712  #endif
     713  
     714  
     715  #if @GNULIB_MKFIFOAT@
     716  # if @REPLACE_MKFIFOAT@
     717  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     718  #   undef mkfifoat
     719  #   define mkfifoat rpl_mkfifoat
     720  #  endif
     721  _GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)
     722                                   _GL_ARG_NONNULL ((2)));
     723  _GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode));
     724  # else
     725  #  if !@HAVE_MKFIFOAT@
     726  _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
     727                                   _GL_ARG_NONNULL ((2)));
     728  #  endif
     729  _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
     730  # endif
     731  _GL_CXXALIASWARN (mkfifoat);
     732  #elif defined GNULIB_POSIXCHECK
     733  # undef mkfifoat
     734  # if HAVE_RAW_DECL_MKFIFOAT
     735  _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
     736                   "use gnulib module mkfifoat for portability");
     737  # endif
     738  #endif
     739  
     740  
     741  #if @GNULIB_MKNOD@
     742  # if @REPLACE_MKNOD@
     743  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     744  #   undef mknod
     745  #   define mknod rpl_mknod
     746  #  endif
     747  _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
     748                                _GL_ARG_NONNULL ((1)));
     749  _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
     750  # else
     751  #  if !@HAVE_MKNOD@
     752  _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
     753                                _GL_ARG_NONNULL ((1)));
     754  #  endif
     755  /* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
     756  _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
     757  # endif
     758  _GL_CXXALIASWARN (mknod);
     759  #elif defined GNULIB_POSIXCHECK
     760  # undef mknod
     761  # if HAVE_RAW_DECL_MKNOD
     762  _GL_WARN_ON_USE (mknod, "mknod is not portable - "
     763                   "use gnulib module mknod for portability");
     764  # endif
     765  #endif
     766  
     767  
     768  #if @GNULIB_MKNODAT@
     769  # if @REPLACE_MKNODAT@
     770  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     771  #   undef mknodat
     772  #   define mknodat rpl_mknodat
     773  #  endif
     774  _GL_FUNCDECL_RPL (mknodat, int,
     775                    (int fd, char const *file, mode_t mode, dev_t dev)
     776                    _GL_ARG_NONNULL ((2)));
     777  _GL_CXXALIAS_RPL (mknodat, int,
     778                    (int fd, char const *file, mode_t mode, dev_t dev));
     779  # else
     780  #  if !@HAVE_MKNODAT@
     781  _GL_FUNCDECL_SYS (mknodat, int,
     782                    (int fd, char const *file, mode_t mode, dev_t dev)
     783                    _GL_ARG_NONNULL ((2)));
     784  #  endif
     785  _GL_CXXALIAS_SYS (mknodat, int,
     786                    (int fd, char const *file, mode_t mode, dev_t dev));
     787  # endif
     788  _GL_CXXALIASWARN (mknodat);
     789  #elif defined GNULIB_POSIXCHECK
     790  # undef mknodat
     791  # if HAVE_RAW_DECL_MKNODAT
     792  _GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
     793                   "use gnulib module mkfifoat for portability");
     794  # endif
     795  #endif
     796  
     797  
     798  #if @GNULIB_STAT@
     799  # if @REPLACE_STAT@
     800  #  if !@GNULIB_OVERRIDES_STRUCT_STAT@
     801      /* We can't use the object-like #define stat rpl_stat, because of
     802         struct stat.  This means that rpl_stat will not be used if the user
     803         does (stat)(a,b).  Oh well.  */
     804  #   if defined _AIX && defined stat && defined _LARGE_FILES
     805       /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
     806          so we have to replace stat64() instead of stat(). */
     807  #    undef stat64
     808  #    define stat64(name, st) rpl_stat (name, st)
     809  #   elif @WINDOWS_64_BIT_ST_SIZE@
     810       /* Above, we define stat to _stati64.  */
     811  #    if defined __MINGW32__ && defined _stati64
     812  #     ifndef _USE_32BIT_TIME_T
     813         /* The system headers define _stati64 to _stat64.  */
     814  #      undef _stat64
     815  #      define _stat64(name, st) rpl_stat (name, st)
     816  #     endif
     817  #    elif defined _MSC_VER && defined _stati64
     818  #     ifdef _USE_32BIT_TIME_T
     819         /* The system headers define _stati64 to _stat32i64.  */
     820  #      undef _stat32i64
     821  #      define _stat32i64(name, st) rpl_stat (name, st)
     822  #     else
     823         /* The system headers define _stati64 to _stat64.  */
     824  #      undef _stat64
     825  #      define _stat64(name, st) rpl_stat (name, st)
     826  #     endif
     827  #    else
     828  #     undef _stati64
     829  #     define _stati64(name, st) rpl_stat (name, st)
     830  #    endif
     831  #   elif defined __MINGW32__ && defined stat
     832  #    ifdef _USE_32BIT_TIME_T
     833        /* The system headers define stat to _stat32i64.  */
     834  #     undef _stat32i64
     835  #     define _stat32i64(name, st) rpl_stat (name, st)
     836  #    else
     837        /* The system headers define stat to _stat64.  */
     838  #     undef _stat64
     839  #     define _stat64(name, st) rpl_stat (name, st)
     840  #    endif
     841  #   elif defined _MSC_VER && defined stat
     842  #    ifdef _USE_32BIT_TIME_T
     843        /* The system headers define stat to _stat32.  */
     844  #     undef _stat32
     845  #     define _stat32(name, st) rpl_stat (name, st)
     846  #    else
     847        /* The system headers define stat to _stat64i32.  */
     848  #     undef _stat64i32
     849  #     define _stat64i32(name, st) rpl_stat (name, st)
     850  #    endif
     851  #   else /* !(_AIX || __MINGW32__ || _MSC_VER) */
     852  #    undef stat
     853  #    define stat(name, st) rpl_stat (name, st)
     854  #   endif /* !_LARGE_FILES */
     855  #  endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */
     856  _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf)
     857                        _GL_ARG_NONNULL ((1, 2));
     858  # endif
     859  #elif @GNULIB_OVERRIDES_STRUCT_STAT@
     860  /* see above:
     861    #define stat stat_used_without_requesting_gnulib_module_stat
     862   */
     863  #elif defined GNULIB_POSIXCHECK
     864  # undef stat
     865  # if HAVE_RAW_DECL_STAT
     866  _GL_WARN_ON_USE (stat, "stat is unportable - "
     867                   "use gnulib module stat for portability");
     868  # endif
     869  #endif
     870  
     871  
     872  #if @GNULIB_MDA_UMASK@
     873  /* On native Windows, map 'umask' to '_umask', so that -loldnames is not
     874     required.  In C++ with GNULIB_NAMESPACE, avoid differences between
     875     platforms by defining GNULIB_NAMESPACE::umask always.  */
     876  # if defined _WIN32 && !defined __CYGWIN__
     877  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     878  #   undef umask
     879  #   define umask _umask
     880  #  endif
     881  /* Need to cast, because in mingw the last argument is 'int mode'.  */
     882  _GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask));
     883  # else
     884  _GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask));
     885  # endif
     886  _GL_CXXALIASWARN (umask);
     887  #endif
     888  
     889  
     890  #if @GNULIB_UTIMENSAT@
     891  /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
     892     implementation relies on futimesat, which on Solaris 10 makes an invocation
     893     to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
     894     utimensat().  */
     895  # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun)
     896  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
     897  #   undef utimensat
     898  #   define utimensat rpl_utimensat
     899  #  endif
     900  _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
     901                                     struct timespec const times[2], int flag)
     902                                    _GL_ARG_NONNULL ((2)));
     903  _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
     904                                     struct timespec const times[2], int flag));
     905  # else
     906  #  if !@HAVE_UTIMENSAT@
     907  _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
     908                                     struct timespec const times[2], int flag)
     909                                    _GL_ARG_NONNULL ((2)));
     910  #  endif
     911  _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
     912                                     struct timespec const times[2], int flag));
     913  # endif
     914  # if @HAVE_UTIMENSAT@
     915  _GL_CXXALIASWARN (utimensat);
     916  # endif
     917  #elif defined GNULIB_POSIXCHECK
     918  # undef utimensat
     919  # if HAVE_RAW_DECL_UTIMENSAT
     920  _GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
     921                   "use gnulib module utimensat for portability");
     922  # endif
     923  #endif
     924  
     925  
     926  #endif /* _@GUARD_PREFIX@_SYS_STAT_H */
     927  #endif /* _@GUARD_PREFIX@_SYS_STAT_H */
     928  #endif