1 /* Provide a more complete sys/stat.h header file. 2 Copyright (C) 2005-2020 Free Software Foundation, Inc. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3, or (at your option) 7 any later version. 8 9 This program 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 General Public License for more details. 13 14 You should have received a copy of the GNU 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 /* S_IXUGO is a common extension to POSIX. */ 379 #if !S_IXUGO 380 # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) 381 #endif 382 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_FCHMODAT@ 395 # if @REPLACE_FCHMODAT@ 396 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 397 # undef fchmodat 398 # define fchmodat rpl_fchmodat 399 # endif 400 _GL_FUNCDECL_RPL (fchmodat, int, 401 (int fd, char const *file, mode_t mode, int flag) 402 _GL_ARG_NONNULL ((2))); 403 _GL_CXXALIAS_RPL (fchmodat, int, 404 (int fd, char const *file, mode_t mode, int flag)); 405 # else 406 # if !@HAVE_FCHMODAT@ 407 _GL_FUNCDECL_SYS (fchmodat, int, 408 (int fd, char const *file, mode_t mode, int flag) 409 _GL_ARG_NONNULL ((2))); 410 # endif 411 _GL_CXXALIAS_SYS (fchmodat, int, 412 (int fd, char const *file, mode_t mode, int flag)); 413 # endif 414 _GL_CXXALIASWARN (fchmodat); 415 #elif defined GNULIB_POSIXCHECK 416 # undef fchmodat 417 # if HAVE_RAW_DECL_FCHMODAT 418 _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " 419 "use gnulib module openat for portability"); 420 # endif 421 #endif 422 423 424 #if @GNULIB_FSTAT@ 425 # if @REPLACE_FSTAT@ 426 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 427 # undef fstat 428 # define fstat rpl_fstat 429 # endif 430 _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); 431 _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); 432 # else 433 _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); 434 # endif 435 _GL_CXXALIASWARN (fstat); 436 #elif @GNULIB_OVERRIDES_STRUCT_STAT@ 437 # undef fstat 438 # define fstat fstat_used_without_requesting_gnulib_module_fstat 439 #elif @WINDOWS_64_BIT_ST_SIZE@ 440 /* Above, we define stat to _stati64. */ 441 # define fstat _fstati64 442 #elif defined GNULIB_POSIXCHECK 443 # undef fstat 444 # if HAVE_RAW_DECL_FSTAT 445 _GL_WARN_ON_USE (fstat, "fstat has portability problems - " 446 "use gnulib module fstat for portability"); 447 # endif 448 #endif 449 450 451 #if @GNULIB_FSTATAT@ 452 # if @REPLACE_FSTATAT@ 453 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 454 # undef fstatat 455 # define fstatat rpl_fstatat 456 # endif 457 _GL_FUNCDECL_RPL (fstatat, int, 458 (int fd, char const *restrict name, struct stat *restrict st, 459 int flags) 460 _GL_ARG_NONNULL ((2, 3))); 461 _GL_CXXALIAS_RPL (fstatat, int, 462 (int fd, char const *restrict name, struct stat *restrict st, 463 int flags)); 464 # else 465 # if !@HAVE_FSTATAT@ 466 _GL_FUNCDECL_SYS (fstatat, int, 467 (int fd, char const *restrict name, struct stat *restrict st, 468 int flags) 469 _GL_ARG_NONNULL ((2, 3))); 470 # endif 471 _GL_CXXALIAS_SYS (fstatat, int, 472 (int fd, char const *restrict name, struct stat *restrict st, 473 int flags)); 474 # endif 475 _GL_CXXALIASWARN (fstatat); 476 #elif @GNULIB_OVERRIDES_STRUCT_STAT@ 477 # undef fstatat 478 # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat 479 #elif defined GNULIB_POSIXCHECK 480 # undef fstatat 481 # if HAVE_RAW_DECL_FSTATAT 482 _GL_WARN_ON_USE (fstatat, "fstatat is not portable - " 483 "use gnulib module openat for portability"); 484 # endif 485 #endif 486 487 488 #if @GNULIB_FUTIMENS@ 489 /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens 490 implementation relies on futimesat, which on Solaris 10 makes an invocation 491 to futimens that is meant to invoke the libc's futimens(), not gnulib's 492 futimens(). */ 493 # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) 494 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 495 # undef futimens 496 # define futimens rpl_futimens 497 # endif 498 _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); 499 _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); 500 # else 501 # if !@HAVE_FUTIMENS@ 502 _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); 503 # endif 504 _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); 505 # endif 506 # if @HAVE_FUTIMENS@ 507 _GL_CXXALIASWARN (futimens); 508 # endif 509 #elif defined GNULIB_POSIXCHECK 510 # undef futimens 511 # if HAVE_RAW_DECL_FUTIMENS 512 _GL_WARN_ON_USE (futimens, "futimens is not portable - " 513 "use gnulib module futimens for portability"); 514 # endif 515 #endif 516 517 518 #if @GNULIB_LCHMOD@ 519 /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME 520 denotes a symbolic link. */ 521 # if !@HAVE_LCHMOD@ || defined __hpux 522 _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) 523 _GL_ARG_NONNULL ((1))); 524 # endif 525 _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); 526 _GL_CXXALIASWARN (lchmod); 527 #elif defined GNULIB_POSIXCHECK 528 # undef lchmod 529 # if HAVE_RAW_DECL_LCHMOD 530 _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " 531 "use gnulib module lchmod for portability"); 532 # endif 533 #endif 534 535 536 #if @GNULIB_LSTAT@ 537 # if ! @HAVE_LSTAT@ 538 /* mingw does not support symlinks, therefore it does not have lstat. But 539 without links, stat does just fine. */ 540 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 541 # define lstat stat 542 # endif 543 _GL_CXXALIAS_RPL_1 (lstat, stat, int, 544 (const char *restrict name, struct stat *restrict buf)); 545 # elif @REPLACE_LSTAT@ 546 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 547 # undef lstat 548 # define lstat rpl_lstat 549 # endif 550 _GL_FUNCDECL_RPL (lstat, int, 551 (const char *restrict name, struct stat *restrict buf) 552 _GL_ARG_NONNULL ((1, 2))); 553 _GL_CXXALIAS_RPL (lstat, int, 554 (const char *restrict name, struct stat *restrict buf)); 555 # else 556 _GL_CXXALIAS_SYS (lstat, int, 557 (const char *restrict name, struct stat *restrict buf)); 558 # endif 559 # if @HAVE_LSTAT@ 560 _GL_CXXALIASWARN (lstat); 561 # endif 562 #elif @GNULIB_OVERRIDES_STRUCT_STAT@ 563 # undef lstat 564 # define lstat lstat_used_without_requesting_gnulib_module_lstat 565 #elif defined GNULIB_POSIXCHECK 566 # undef lstat 567 # if HAVE_RAW_DECL_LSTAT 568 _GL_WARN_ON_USE (lstat, "lstat is unportable - " 569 "use gnulib module lstat for portability"); 570 # endif 571 #endif 572 573 574 #if @REPLACE_MKDIR@ 575 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 576 # undef mkdir 577 # define mkdir rpl_mkdir 578 # endif 579 _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) 580 _GL_ARG_NONNULL ((1))); 581 _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); 582 #else 583 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. 584 Additionally, it declares _mkdir (and depending on compile flags, an 585 alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, 586 which are included above. */ 587 # if defined _WIN32 && ! defined __CYGWIN__ 588 589 # if !GNULIB_defined_rpl_mkdir 590 static int 591 rpl_mkdir (char const *name, mode_t mode) 592 { 593 return _mkdir (name); 594 } 595 # define GNULIB_defined_rpl_mkdir 1 596 # endif 597 598 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 599 # define mkdir rpl_mkdir 600 # endif 601 _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); 602 # else 603 _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); 604 # endif 605 #endif 606 _GL_CXXALIASWARN (mkdir); 607 608 609 #if @GNULIB_MKDIRAT@ 610 # if !@HAVE_MKDIRAT@ 611 _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) 612 _GL_ARG_NONNULL ((2))); 613 # endif 614 _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); 615 _GL_CXXALIASWARN (mkdirat); 616 #elif defined GNULIB_POSIXCHECK 617 # undef mkdirat 618 # if HAVE_RAW_DECL_MKDIRAT 619 _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " 620 "use gnulib module openat for portability"); 621 # endif 622 #endif 623 624 625 #if @GNULIB_MKFIFO@ 626 # if @REPLACE_MKFIFO@ 627 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 628 # undef mkfifo 629 # define mkfifo rpl_mkfifo 630 # endif 631 _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) 632 _GL_ARG_NONNULL ((1))); 633 _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); 634 # else 635 # if !@HAVE_MKFIFO@ 636 _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) 637 _GL_ARG_NONNULL ((1))); 638 # endif 639 _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); 640 # endif 641 _GL_CXXALIASWARN (mkfifo); 642 #elif defined GNULIB_POSIXCHECK 643 # undef mkfifo 644 # if HAVE_RAW_DECL_MKFIFO 645 _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " 646 "use gnulib module mkfifo for portability"); 647 # endif 648 #endif 649 650 651 #if @GNULIB_MKFIFOAT@ 652 # if !@HAVE_MKFIFOAT@ 653 _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) 654 _GL_ARG_NONNULL ((2))); 655 # endif 656 _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); 657 _GL_CXXALIASWARN (mkfifoat); 658 #elif defined GNULIB_POSIXCHECK 659 # undef mkfifoat 660 # if HAVE_RAW_DECL_MKFIFOAT 661 _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " 662 "use gnulib module mkfifoat for portability"); 663 # endif 664 #endif 665 666 667 #if @GNULIB_MKNOD@ 668 # if @REPLACE_MKNOD@ 669 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 670 # undef mknod 671 # define mknod rpl_mknod 672 # endif 673 _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) 674 _GL_ARG_NONNULL ((1))); 675 _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); 676 # else 677 # if !@HAVE_MKNOD@ 678 _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) 679 _GL_ARG_NONNULL ((1))); 680 # endif 681 /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ 682 _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); 683 # endif 684 _GL_CXXALIASWARN (mknod); 685 #elif defined GNULIB_POSIXCHECK 686 # undef mknod 687 # if HAVE_RAW_DECL_MKNOD 688 _GL_WARN_ON_USE (mknod, "mknod is not portable - " 689 "use gnulib module mknod for portability"); 690 # endif 691 #endif 692 693 694 #if @GNULIB_MKNODAT@ 695 # if !@HAVE_MKNODAT@ 696 _GL_FUNCDECL_SYS (mknodat, int, 697 (int fd, char const *file, mode_t mode, dev_t dev) 698 _GL_ARG_NONNULL ((2))); 699 # endif 700 _GL_CXXALIAS_SYS (mknodat, int, 701 (int fd, char const *file, mode_t mode, dev_t dev)); 702 _GL_CXXALIASWARN (mknodat); 703 #elif defined GNULIB_POSIXCHECK 704 # undef mknodat 705 # if HAVE_RAW_DECL_MKNODAT 706 _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " 707 "use gnulib module mkfifoat for portability"); 708 # endif 709 #endif 710 711 712 #if @GNULIB_STAT@ 713 # if @REPLACE_STAT@ 714 # if !@GNULIB_OVERRIDES_STRUCT_STAT@ 715 /* We can't use the object-like #define stat rpl_stat, because of 716 struct stat. This means that rpl_stat will not be used if the user 717 does (stat)(a,b). Oh well. */ 718 # if defined _AIX && defined stat && defined _LARGE_FILES 719 /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, 720 so we have to replace stat64() instead of stat(). */ 721 # undef stat64 722 # define stat64(name, st) rpl_stat (name, st) 723 # elif @WINDOWS_64_BIT_ST_SIZE@ 724 /* Above, we define stat to _stati64. */ 725 # if defined __MINGW32__ && defined _stati64 726 # ifndef _USE_32BIT_TIME_T 727 /* The system headers define _stati64 to _stat64. */ 728 # undef _stat64 729 # define _stat64(name, st) rpl_stat (name, st) 730 # endif 731 # elif defined _MSC_VER && defined _stati64 732 # ifdef _USE_32BIT_TIME_T 733 /* The system headers define _stati64 to _stat32i64. */ 734 # undef _stat32i64 735 # define _stat32i64(name, st) rpl_stat (name, st) 736 # else 737 /* The system headers define _stati64 to _stat64. */ 738 # undef _stat64 739 # define _stat64(name, st) rpl_stat (name, st) 740 # endif 741 # else 742 # undef _stati64 743 # define _stati64(name, st) rpl_stat (name, st) 744 # endif 745 # elif defined __MINGW32__ && defined stat 746 # ifdef _USE_32BIT_TIME_T 747 /* The system headers define stat to _stat32i64. */ 748 # undef _stat32i64 749 # define _stat32i64(name, st) rpl_stat (name, st) 750 # else 751 /* The system headers define stat to _stat64. */ 752 # undef _stat64 753 # define _stat64(name, st) rpl_stat (name, st) 754 # endif 755 # elif defined _MSC_VER && defined stat 756 # ifdef _USE_32BIT_TIME_T 757 /* The system headers define stat to _stat32. */ 758 # undef _stat32 759 # define _stat32(name, st) rpl_stat (name, st) 760 # else 761 /* The system headers define stat to _stat64i32. */ 762 # undef _stat64i32 763 # define _stat64i32(name, st) rpl_stat (name, st) 764 # endif 765 # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ 766 # undef stat 767 # define stat(name, st) rpl_stat (name, st) 768 # endif /* !_LARGE_FILES */ 769 # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ 770 _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) 771 _GL_ARG_NONNULL ((1, 2)); 772 # endif 773 #elif @GNULIB_OVERRIDES_STRUCT_STAT@ 774 /* see above: 775 #define stat stat_used_without_requesting_gnulib_module_stat 776 */ 777 #elif defined GNULIB_POSIXCHECK 778 # undef stat 779 # if HAVE_RAW_DECL_STAT 780 _GL_WARN_ON_USE (stat, "stat is unportable - " 781 "use gnulib module stat for portability"); 782 # endif 783 #endif 784 785 786 #if @GNULIB_UTIMENSAT@ 787 /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat 788 implementation relies on futimesat, which on Solaris 10 makes an invocation 789 to utimensat that is meant to invoke the libc's utimensat(), not gnulib's 790 utimensat(). */ 791 # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) 792 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 793 # undef utimensat 794 # define utimensat rpl_utimensat 795 # endif 796 _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, 797 struct timespec const times[2], int flag) 798 _GL_ARG_NONNULL ((2))); 799 _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, 800 struct timespec const times[2], int flag)); 801 # else 802 # if !@HAVE_UTIMENSAT@ 803 _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, 804 struct timespec const times[2], int flag) 805 _GL_ARG_NONNULL ((2))); 806 # endif 807 _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, 808 struct timespec const times[2], int flag)); 809 # endif 810 # if @HAVE_UTIMENSAT@ 811 _GL_CXXALIASWARN (utimensat); 812 # endif 813 #elif defined GNULIB_POSIXCHECK 814 # undef utimensat 815 # if HAVE_RAW_DECL_UTIMENSAT 816 _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " 817 "use gnulib module utimensat for portability"); 818 # endif 819 #endif 820 821 822 #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ 823 #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ 824 #endif 825