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_GETUMASK@ 519 # if !@HAVE_GETUMASK@ 520 _GL_FUNCDECL_SYS (getumask, mode_t, (void)); 521 # endif 522 _GL_CXXALIAS_SYS (getumask, mode_t, (void)); 523 # if @HAVE_GETUMASK@ 524 _GL_CXXALIASWARN (getumask); 525 # endif 526 #elif defined GNULIB_POSIXCHECK 527 # undef getumask 528 # if HAVE_RAW_DECL_GETUMASK 529 _GL_WARN_ON_USE (getumask, "getumask is not portable - " 530 "use gnulib module getumask for portability"); 531 # endif 532 #endif 533 534 535 #if @GNULIB_LCHMOD@ 536 /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME 537 denotes a symbolic link. */ 538 # if !@HAVE_LCHMOD@ || defined __hpux 539 _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) 540 _GL_ARG_NONNULL ((1))); 541 # endif 542 _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); 543 _GL_CXXALIASWARN (lchmod); 544 #elif defined GNULIB_POSIXCHECK 545 # undef lchmod 546 # if HAVE_RAW_DECL_LCHMOD 547 _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " 548 "use gnulib module lchmod for portability"); 549 # endif 550 #endif 551 552 553 #if @GNULIB_LSTAT@ 554 # if ! @HAVE_LSTAT@ 555 /* mingw does not support symlinks, therefore it does not have lstat. But 556 without links, stat does just fine. */ 557 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 558 # define lstat stat 559 # endif 560 _GL_CXXALIAS_RPL_1 (lstat, stat, int, 561 (const char *restrict name, struct stat *restrict buf)); 562 # elif @REPLACE_LSTAT@ 563 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 564 # undef lstat 565 # define lstat rpl_lstat 566 # endif 567 _GL_FUNCDECL_RPL (lstat, int, 568 (const char *restrict name, struct stat *restrict buf) 569 _GL_ARG_NONNULL ((1, 2))); 570 _GL_CXXALIAS_RPL (lstat, int, 571 (const char *restrict name, struct stat *restrict buf)); 572 # else 573 _GL_CXXALIAS_SYS (lstat, int, 574 (const char *restrict name, struct stat *restrict buf)); 575 # endif 576 # if @HAVE_LSTAT@ 577 _GL_CXXALIASWARN (lstat); 578 # endif 579 #elif @GNULIB_OVERRIDES_STRUCT_STAT@ 580 # undef lstat 581 # define lstat lstat_used_without_requesting_gnulib_module_lstat 582 #elif defined GNULIB_POSIXCHECK 583 # undef lstat 584 # if HAVE_RAW_DECL_LSTAT 585 _GL_WARN_ON_USE (lstat, "lstat is unportable - " 586 "use gnulib module lstat for portability"); 587 # endif 588 #endif 589 590 591 #if @REPLACE_MKDIR@ 592 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 593 # undef mkdir 594 # define mkdir rpl_mkdir 595 # endif 596 _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) 597 _GL_ARG_NONNULL ((1))); 598 _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); 599 #else 600 /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. 601 Additionally, it declares _mkdir (and depending on compile flags, an 602 alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, 603 which are included above. */ 604 # if defined _WIN32 && ! defined __CYGWIN__ 605 606 # if !GNULIB_defined_rpl_mkdir 607 static int 608 rpl_mkdir (char const *name, mode_t mode) 609 { 610 return _mkdir (name); 611 } 612 # define GNULIB_defined_rpl_mkdir 1 613 # endif 614 615 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 616 # define mkdir rpl_mkdir 617 # endif 618 _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); 619 # else 620 _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); 621 # endif 622 #endif 623 _GL_CXXALIASWARN (mkdir); 624 625 626 #if @GNULIB_MKDIRAT@ 627 # if !@HAVE_MKDIRAT@ 628 _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) 629 _GL_ARG_NONNULL ((2))); 630 # endif 631 _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); 632 _GL_CXXALIASWARN (mkdirat); 633 #elif defined GNULIB_POSIXCHECK 634 # undef mkdirat 635 # if HAVE_RAW_DECL_MKDIRAT 636 _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " 637 "use gnulib module openat for portability"); 638 # endif 639 #endif 640 641 642 #if @GNULIB_MKFIFO@ 643 # if @REPLACE_MKFIFO@ 644 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 645 # undef mkfifo 646 # define mkfifo rpl_mkfifo 647 # endif 648 _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) 649 _GL_ARG_NONNULL ((1))); 650 _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); 651 # else 652 # if !@HAVE_MKFIFO@ 653 _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) 654 _GL_ARG_NONNULL ((1))); 655 # endif 656 _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); 657 # endif 658 _GL_CXXALIASWARN (mkfifo); 659 #elif defined GNULIB_POSIXCHECK 660 # undef mkfifo 661 # if HAVE_RAW_DECL_MKFIFO 662 _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " 663 "use gnulib module mkfifo for portability"); 664 # endif 665 #endif 666 667 668 #if @GNULIB_MKFIFOAT@ 669 # if !@HAVE_MKFIFOAT@ 670 _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) 671 _GL_ARG_NONNULL ((2))); 672 # endif 673 _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); 674 _GL_CXXALIASWARN (mkfifoat); 675 #elif defined GNULIB_POSIXCHECK 676 # undef mkfifoat 677 # if HAVE_RAW_DECL_MKFIFOAT 678 _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " 679 "use gnulib module mkfifoat for portability"); 680 # endif 681 #endif 682 683 684 #if @GNULIB_MKNOD@ 685 # if @REPLACE_MKNOD@ 686 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 687 # undef mknod 688 # define mknod rpl_mknod 689 # endif 690 _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) 691 _GL_ARG_NONNULL ((1))); 692 _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); 693 # else 694 # if !@HAVE_MKNOD@ 695 _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) 696 _GL_ARG_NONNULL ((1))); 697 # endif 698 /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ 699 _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); 700 # endif 701 _GL_CXXALIASWARN (mknod); 702 #elif defined GNULIB_POSIXCHECK 703 # undef mknod 704 # if HAVE_RAW_DECL_MKNOD 705 _GL_WARN_ON_USE (mknod, "mknod is not portable - " 706 "use gnulib module mknod for portability"); 707 # endif 708 #endif 709 710 711 #if @GNULIB_MKNODAT@ 712 # if !@HAVE_MKNODAT@ 713 _GL_FUNCDECL_SYS (mknodat, int, 714 (int fd, char const *file, mode_t mode, dev_t dev) 715 _GL_ARG_NONNULL ((2))); 716 # endif 717 _GL_CXXALIAS_SYS (mknodat, int, 718 (int fd, char const *file, mode_t mode, dev_t dev)); 719 _GL_CXXALIASWARN (mknodat); 720 #elif defined GNULIB_POSIXCHECK 721 # undef mknodat 722 # if HAVE_RAW_DECL_MKNODAT 723 _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " 724 "use gnulib module mkfifoat for portability"); 725 # endif 726 #endif 727 728 729 #if @GNULIB_STAT@ 730 # if @REPLACE_STAT@ 731 # if !@GNULIB_OVERRIDES_STRUCT_STAT@ 732 /* We can't use the object-like #define stat rpl_stat, because of 733 struct stat. This means that rpl_stat will not be used if the user 734 does (stat)(a,b). Oh well. */ 735 # if defined _AIX && defined stat && defined _LARGE_FILES 736 /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, 737 so we have to replace stat64() instead of stat(). */ 738 # undef stat64 739 # define stat64(name, st) rpl_stat (name, st) 740 # elif @WINDOWS_64_BIT_ST_SIZE@ 741 /* Above, we define stat to _stati64. */ 742 # if defined __MINGW32__ && defined _stati64 743 # ifndef _USE_32BIT_TIME_T 744 /* The system headers define _stati64 to _stat64. */ 745 # undef _stat64 746 # define _stat64(name, st) rpl_stat (name, st) 747 # endif 748 # elif defined _MSC_VER && defined _stati64 749 # ifdef _USE_32BIT_TIME_T 750 /* The system headers define _stati64 to _stat32i64. */ 751 # undef _stat32i64 752 # define _stat32i64(name, st) rpl_stat (name, st) 753 # else 754 /* The system headers define _stati64 to _stat64. */ 755 # undef _stat64 756 # define _stat64(name, st) rpl_stat (name, st) 757 # endif 758 # else 759 # undef _stati64 760 # define _stati64(name, st) rpl_stat (name, st) 761 # endif 762 # elif defined __MINGW32__ && defined stat 763 # ifdef _USE_32BIT_TIME_T 764 /* The system headers define stat to _stat32i64. */ 765 # undef _stat32i64 766 # define _stat32i64(name, st) rpl_stat (name, st) 767 # else 768 /* The system headers define stat to _stat64. */ 769 # undef _stat64 770 # define _stat64(name, st) rpl_stat (name, st) 771 # endif 772 # elif defined _MSC_VER && defined stat 773 # ifdef _USE_32BIT_TIME_T 774 /* The system headers define stat to _stat32. */ 775 # undef _stat32 776 # define _stat32(name, st) rpl_stat (name, st) 777 # else 778 /* The system headers define stat to _stat64i32. */ 779 # undef _stat64i32 780 # define _stat64i32(name, st) rpl_stat (name, st) 781 # endif 782 # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ 783 # undef stat 784 # define stat(name, st) rpl_stat (name, st) 785 # endif /* !_LARGE_FILES */ 786 # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ 787 _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) 788 _GL_ARG_NONNULL ((1, 2)); 789 # endif 790 #elif @GNULIB_OVERRIDES_STRUCT_STAT@ 791 /* see above: 792 #define stat stat_used_without_requesting_gnulib_module_stat 793 */ 794 #elif defined GNULIB_POSIXCHECK 795 # undef stat 796 # if HAVE_RAW_DECL_STAT 797 _GL_WARN_ON_USE (stat, "stat is unportable - " 798 "use gnulib module stat for portability"); 799 # endif 800 #endif 801 802 803 #if @GNULIB_UTIMENSAT@ 804 /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat 805 implementation relies on futimesat, which on Solaris 10 makes an invocation 806 to utimensat that is meant to invoke the libc's utimensat(), not gnulib's 807 utimensat(). */ 808 # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) 809 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 810 # undef utimensat 811 # define utimensat rpl_utimensat 812 # endif 813 _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, 814 struct timespec const times[2], int flag) 815 _GL_ARG_NONNULL ((2))); 816 _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, 817 struct timespec const times[2], int flag)); 818 # else 819 # if !@HAVE_UTIMENSAT@ 820 _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, 821 struct timespec const times[2], int flag) 822 _GL_ARG_NONNULL ((2))); 823 # endif 824 _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, 825 struct timespec const times[2], int flag)); 826 # endif 827 # if @HAVE_UTIMENSAT@ 828 _GL_CXXALIASWARN (utimensat); 829 # endif 830 #elif defined GNULIB_POSIXCHECK 831 # undef utimensat 832 # if HAVE_RAW_DECL_UTIMENSAT 833 _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " 834 "use gnulib module utimensat for portability"); 835 # endif 836 #endif 837 838 839 #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ 840 #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ 841 #endif 842