1 /* Provide a more complete sys/stat.h header file. 2 Copyright (C) 2005-2021 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