Home | History | Annotate | Line # | Download | only in import
      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
    929