1/* Provide a more complete sys/stat header file. 2 Copyright (C) 2005-2011 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, write to the Free Software Foundation, 16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 17 18/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ 19 20/* This file is supposed to be used on platforms where <sys/stat.h> is 21 incomplete. It is intended to provide definitions and prototypes 22 needed by an application. Start with what the system provides. */ 23 24#if __GNUC__ >= 3 25@PRAGMA_SYSTEM_HEADER@ 26#endif 27@PRAGMA_COLUMNS@ 28 29#if defined __need_system_sys_stat_h 30/* Special invocation convention. */ 31 32#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ 33 34#else 35/* Normal invocation convention. */ 36 37#ifndef _@GUARD_PREFIX@_SYS_STAT_H 38 39/* Get nlink_t. */ 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 mkdir rpl_mkdir" below, we need to include all 58 headers that may declare mkdir(). */ 59#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ 60# include <io.h> /* mingw32, mingw64 */ 61# include <direct.h> /* mingw64 */ 62#endif 63 64#ifndef S_IFMT 65# define S_IFMT 0170000 66#endif 67 68#if STAT_MACROS_BROKEN 69# undef S_ISBLK 70# undef S_ISCHR 71# undef S_ISDIR 72# undef S_ISFIFO 73# undef S_ISLNK 74# undef S_ISNAM 75# undef S_ISMPB 76# undef S_ISMPC 77# undef S_ISNWK 78# undef S_ISREG 79# undef S_ISSOCK 80#endif 81 82#ifndef S_ISBLK 83# ifdef S_IFBLK 84# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 85# else 86# define S_ISBLK(m) 0 87# endif 88#endif 89 90#ifndef S_ISCHR 91# ifdef S_IFCHR 92# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 93# else 94# define S_ISCHR(m) 0 95# endif 96#endif 97 98#ifndef S_ISDIR 99# ifdef S_IFDIR 100# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 101# else 102# define S_ISDIR(m) 0 103# endif 104#endif 105 106#ifndef S_ISDOOR /* Solaris 2.5 and up */ 107# define S_ISDOOR(m) 0 108#endif 109 110#ifndef S_ISFIFO 111# ifdef S_IFIFO 112# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 113# else 114# define S_ISFIFO(m) 0 115# endif 116#endif 117 118#ifndef S_ISLNK 119# ifdef S_IFLNK 120# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 121# else 122# define S_ISLNK(m) 0 123# endif 124#endif 125 126#ifndef S_ISMPB /* V7 */ 127# ifdef S_IFMPB 128# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) 129# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) 130# else 131# define S_ISMPB(m) 0 132# define S_ISMPC(m) 0 133# endif 134#endif 135 136#ifndef S_ISNAM /* Xenix */ 137# ifdef S_IFNAM 138# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) 139# else 140# define S_ISNAM(m) 0 141# endif 142#endif 143 144#ifndef S_ISNWK /* HP/UX */ 145# ifdef S_IFNWK 146# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) 147# else 148# define S_ISNWK(m) 0 149# endif 150#endif 151 152#ifndef S_ISPORT /* Solaris 10 and up */ 153# define S_ISPORT(m) 0 154#endif 155 156#ifndef S_ISREG 157# ifdef S_IFREG 158# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 159# else 160# define S_ISREG(m) 0 161# endif 162#endif 163 164#ifndef S_ISSOCK 165# ifdef S_IFSOCK 166# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 167# else 168# define S_ISSOCK(m) 0 169# endif 170#endif 171 172 173#ifndef S_TYPEISMQ 174# define S_TYPEISMQ(p) 0 175#endif 176 177#ifndef S_TYPEISTMO 178# define S_TYPEISTMO(p) 0 179#endif 180 181 182#ifndef S_TYPEISSEM 183# ifdef S_INSEM 184# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) 185# else 186# define S_TYPEISSEM(p) 0 187# endif 188#endif 189 190#ifndef S_TYPEISSHM 191# ifdef S_INSHD 192# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) 193# else 194# define S_TYPEISSHM(p) 0 195# endif 196#endif 197 198/* high performance ("contiguous data") */ 199#ifndef S_ISCTG 200# define S_ISCTG(p) 0 201#endif 202 203/* Cray DMF (data migration facility): off line, with data */ 204#ifndef S_ISOFD 205# define S_ISOFD(p) 0 206#endif 207 208/* Cray DMF (data migration facility): off line, with no data */ 209#ifndef S_ISOFL 210# define S_ISOFL(p) 0 211#endif 212 213/* 4.4BSD whiteout */ 214#ifndef S_ISWHT 215# define S_ISWHT(m) 0 216#endif 217 218/* If any of the following are undefined, 219 define them to their de facto standard values. */ 220#if !S_ISUID 221# define S_ISUID 04000 222#endif 223#if !S_ISGID 224# define S_ISGID 02000 225#endif 226 227/* S_ISVTX is a common extension to POSIX. */ 228#ifndef S_ISVTX 229# define S_ISVTX 01000 230#endif 231 232#if !S_IRUSR && S_IREAD 233# define S_IRUSR S_IREAD 234#endif 235#if !S_IRUSR 236# define S_IRUSR 00400 237#endif 238#if !S_IRGRP 239# define S_IRGRP (S_IRUSR >> 3) 240#endif 241#if !S_IROTH 242# define S_IROTH (S_IRUSR >> 6) 243#endif 244 245#if !S_IWUSR && S_IWRITE 246# define S_IWUSR S_IWRITE 247#endif 248#if !S_IWUSR 249# define S_IWUSR 00200 250#endif 251#if !S_IWGRP 252# define S_IWGRP (S_IWUSR >> 3) 253#endif 254#if !S_IWOTH 255# define S_IWOTH (S_IWUSR >> 6) 256#endif 257 258#if !S_IXUSR && S_IEXEC 259# define S_IXUSR S_IEXEC 260#endif 261#if !S_IXUSR 262# define S_IXUSR 00100 263#endif 264#if !S_IXGRP 265# define S_IXGRP (S_IXUSR >> 3) 266#endif 267#if !S_IXOTH 268# define S_IXOTH (S_IXUSR >> 6) 269#endif 270 271#if !S_IRWXU 272# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) 273#endif 274#if !S_IRWXG 275# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) 276#endif 277#if !S_IRWXO 278# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) 279#endif 280 281/* S_IXUGO is a common extension to POSIX. */ 282#if !S_IXUGO 283# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) 284#endif 285 286#ifndef S_IRWXUGO 287# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) 288#endif 289 290/* Macros for futimens and utimensat. */ 291#ifndef UTIME_NOW 292# define UTIME_NOW (-1) 293# define UTIME_OMIT (-2) 294#endif 295 296 297#if @GNULIB_FCHMODAT@ 298# if !@HAVE_FCHMODAT@ 299_GL_FUNCDECL_SYS (fchmodat, int, 300 (int fd, char const *file, mode_t mode, int flag) 301 _GL_ARG_NONNULL ((2))); 302# endif 303_GL_CXXALIAS_SYS (fchmodat, int, 304 (int fd, char const *file, mode_t mode, int flag)); 305_GL_CXXALIASWARN (fchmodat); 306#elif defined GNULIB_POSIXCHECK 307# undef fchmodat 308# if HAVE_RAW_DECL_FCHMODAT 309_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " 310 "use gnulib module openat for portability"); 311# endif 312#endif 313 314 315#if @REPLACE_FSTAT@ 316# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 317# define fstat rpl_fstat 318# endif 319_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); 320_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); 321#else 322_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); 323#endif 324_GL_CXXALIASWARN (fstat); 325 326 327#if @GNULIB_FSTATAT@ 328# if @REPLACE_FSTATAT@ 329# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 330# undef fstatat 331# define fstatat rpl_fstatat 332# endif 333_GL_FUNCDECL_RPL (fstatat, int, 334 (int fd, char const *name, struct stat *st, int flags) 335 _GL_ARG_NONNULL ((2, 3))); 336_GL_CXXALIAS_RPL (fstatat, int, 337 (int fd, char const *name, struct stat *st, int flags)); 338# else 339# if !@HAVE_FSTATAT@ 340_GL_FUNCDECL_SYS (fstatat, int, 341 (int fd, char const *name, struct stat *st, int flags) 342 _GL_ARG_NONNULL ((2, 3))); 343# endif 344_GL_CXXALIAS_SYS (fstatat, int, 345 (int fd, char const *name, struct stat *st, int flags)); 346# endif 347_GL_CXXALIASWARN (fstatat); 348#elif defined GNULIB_POSIXCHECK 349# undef fstatat 350# if HAVE_RAW_DECL_FSTATAT 351_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " 352 "use gnulib module openat for portability"); 353# endif 354#endif 355 356 357#if @GNULIB_FUTIMENS@ 358/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens 359 implementation relies on futimesat, which on Solaris 10 makes an invocation 360 to futimens that is meant to invoke the libc's futimens(), not gnulib's 361 futimens(). */ 362# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) 363# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 364# undef futimens 365# define futimens rpl_futimens 366# endif 367_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); 368_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); 369# else 370# if !@HAVE_FUTIMENS@ 371_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); 372# endif 373_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); 374# endif 375# if @HAVE_FUTIMENS@ 376_GL_CXXALIASWARN (futimens); 377# endif 378#elif defined GNULIB_POSIXCHECK 379# undef futimens 380# if HAVE_RAW_DECL_FUTIMENS 381_GL_WARN_ON_USE (futimens, "futimens is not portable - " 382 "use gnulib module futimens for portability"); 383# endif 384#endif 385 386 387#if @GNULIB_LCHMOD@ 388/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME 389 denotes a symbolic link. */ 390# if !@HAVE_LCHMOD@ 391/* The lchmod replacement follows symbolic links. Callers should take 392 this into account; lchmod should be applied only to arguments that 393 are known to not be symbolic links. On hosts that lack lchmod, 394 this can lead to race conditions between the check and the 395 invocation of lchmod, but we know of no workarounds that are 396 reliable in general. You might try requesting support for lchmod 397 from your operating system supplier. */ 398# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 399# define lchmod chmod 400# endif 401/* Need to cast, because on mingw, the second parameter of chmod is 402 int mode. */ 403_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, 404 (const char *filename, mode_t mode)); 405# else 406# if 0 /* assume already declared */ 407_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) 408 _GL_ARG_NONNULL ((1))); 409# endif 410_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); 411# endif 412# if @HAVE_LCHMOD@ 413_GL_CXXALIASWARN (lchmod); 414# endif 415#elif defined GNULIB_POSIXCHECK 416# undef lchmod 417# if HAVE_RAW_DECL_LCHMOD 418_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " 419 "use gnulib module lchmod for portability"); 420# endif 421#endif 422 423 424#if @GNULIB_LSTAT@ 425# if ! @HAVE_LSTAT@ 426/* mingw does not support symlinks, therefore it does not have lstat. But 427 without links, stat does just fine. */ 428# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 429# define lstat stat 430# endif 431_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); 432# elif @REPLACE_LSTAT@ 433# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 434# undef lstat 435# define lstat rpl_lstat 436# endif 437_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) 438 _GL_ARG_NONNULL ((1, 2))); 439_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); 440# else 441_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); 442# endif 443# if @HAVE_LSTAT@ 444_GL_CXXALIASWARN (lstat); 445# endif 446#elif defined GNULIB_POSIXCHECK 447# undef lstat 448# if HAVE_RAW_DECL_LSTAT 449_GL_WARN_ON_USE (lstat, "lstat is unportable - " 450 "use gnulib module lstat for portability"); 451# endif 452#endif 453 454 455#if @REPLACE_MKDIR@ 456# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 457# undef mkdir 458# define mkdir rpl_mkdir 459# endif 460_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) 461 _GL_ARG_NONNULL ((1))); 462_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); 463#else 464/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. 465 Additionally, it declares _mkdir (and depending on compile flags, an 466 alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, 467 which are included above. */ 468# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ 469 470# if !GNULIB_defined_rpl_mkdir 471static inline int 472rpl_mkdir (char const *name, mode_t mode) 473{ 474 return _mkdir (name); 475} 476# define GNULIB_defined_rpl_mkdir 1 477# endif 478 479# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 480# define mkdir rpl_mkdir 481# endif 482_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); 483# else 484_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); 485# endif 486#endif 487_GL_CXXALIASWARN (mkdir); 488 489 490#if @GNULIB_MKDIRAT@ 491# if !@HAVE_MKDIRAT@ 492_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) 493 _GL_ARG_NONNULL ((2))); 494# endif 495_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); 496_GL_CXXALIASWARN (mkdirat); 497#elif defined GNULIB_POSIXCHECK 498# undef mkdirat 499# if HAVE_RAW_DECL_MKDIRAT 500_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " 501 "use gnulib module openat for portability"); 502# endif 503#endif 504 505 506#if @GNULIB_MKFIFO@ 507# if @REPLACE_MKFIFO@ 508# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 509# undef mkfifo 510# define mkfifo rpl_mkfifo 511# endif 512_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) 513 _GL_ARG_NONNULL ((1))); 514_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); 515# else 516# if !@HAVE_MKFIFO@ 517_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) 518 _GL_ARG_NONNULL ((1))); 519# endif 520_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); 521# endif 522_GL_CXXALIASWARN (mkfifo); 523#elif defined GNULIB_POSIXCHECK 524# undef mkfifo 525# if HAVE_RAW_DECL_MKFIFO 526_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " 527 "use gnulib module mkfifo for portability"); 528# endif 529#endif 530 531 532#if @GNULIB_MKFIFOAT@ 533# if !@HAVE_MKFIFOAT@ 534_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) 535 _GL_ARG_NONNULL ((2))); 536# endif 537_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); 538_GL_CXXALIASWARN (mkfifoat); 539#elif defined GNULIB_POSIXCHECK 540# undef mkfifoat 541# if HAVE_RAW_DECL_MKFIFOAT 542_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " 543 "use gnulib module mkfifoat for portability"); 544# endif 545#endif 546 547 548#if @GNULIB_MKNOD@ 549# if @REPLACE_MKNOD@ 550# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 551# undef mknod 552# define mknod rpl_mknod 553# endif 554_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) 555 _GL_ARG_NONNULL ((1))); 556_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); 557# else 558# if !@HAVE_MKNOD@ 559_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) 560 _GL_ARG_NONNULL ((1))); 561# endif 562/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ 563_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); 564# endif 565_GL_CXXALIASWARN (mknod); 566#elif defined GNULIB_POSIXCHECK 567# undef mknod 568# if HAVE_RAW_DECL_MKNOD 569_GL_WARN_ON_USE (mknod, "mknod is not portable - " 570 "use gnulib module mknod for portability"); 571# endif 572#endif 573 574 575#if @GNULIB_MKNODAT@ 576# if !@HAVE_MKNODAT@ 577_GL_FUNCDECL_SYS (mknodat, int, 578 (int fd, char const *file, mode_t mode, dev_t dev) 579 _GL_ARG_NONNULL ((2))); 580# endif 581_GL_CXXALIAS_SYS (mknodat, int, 582 (int fd, char const *file, mode_t mode, dev_t dev)); 583_GL_CXXALIASWARN (mknodat); 584#elif defined GNULIB_POSIXCHECK 585# undef mknodat 586# if HAVE_RAW_DECL_MKNODAT 587_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " 588 "use gnulib module mkfifoat for portability"); 589# endif 590#endif 591 592 593#if @GNULIB_STAT@ 594# if @REPLACE_STAT@ 595/* We can't use the object-like #define stat rpl_stat, because of 596 struct stat. This means that rpl_stat will not be used if the user 597 does (stat)(a,b). Oh well. */ 598# undef stat 599# ifdef _LARGE_FILES 600 /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, 601 so we have to replace stat64() instead of stat(). */ 602# define stat stat64 603# undef stat64 604# define stat64(name, st) rpl_stat (name, st) 605# else /* !_LARGE_FILES */ 606# define stat(name, st) rpl_stat (name, st) 607# endif /* !_LARGE_FILES */ 608_GL_EXTERN_C int stat (const char *name, struct stat *buf) 609 _GL_ARG_NONNULL ((1, 2)); 610# endif 611#elif defined GNULIB_POSIXCHECK 612# undef stat 613# if HAVE_RAW_DECL_STAT 614_GL_WARN_ON_USE (stat, "stat is unportable - " 615 "use gnulib module stat for portability"); 616# endif 617#endif 618 619 620#if @GNULIB_UTIMENSAT@ 621/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat 622 implementation relies on futimesat, which on Solaris 10 makes an invocation 623 to utimensat that is meant to invoke the libc's utimensat(), not gnulib's 624 utimensat(). */ 625# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) 626# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 627# undef utimensat 628# define utimensat rpl_utimensat 629# endif 630_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, 631 struct timespec const times[2], int flag) 632 _GL_ARG_NONNULL ((2))); 633_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, 634 struct timespec const times[2], int flag)); 635# else 636# if !@HAVE_UTIMENSAT@ 637_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, 638 struct timespec const times[2], int flag) 639 _GL_ARG_NONNULL ((2))); 640# endif 641_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, 642 struct timespec const times[2], int flag)); 643# endif 644# if @HAVE_UTIMENSAT@ 645_GL_CXXALIASWARN (utimensat); 646# endif 647#elif defined GNULIB_POSIXCHECK 648# undef utimensat 649# if HAVE_RAW_DECL_UTIMENSAT 650_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " 651 "use gnulib module utimensat for portability"); 652# endif 653#endif 654 655 656#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ 657#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ 658#endif 659