105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Provide a more complete sys/stat header file.
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2005-2012 Free Software Foundation, Inc.
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software; you can redistribute it and/or modify
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation; either version 3, or (at your option)
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   any later version.
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This file is supposed to be used on platforms where <sys/stat.h> is
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   incomplete.  It is intended to provide definitions and prototypes
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   needed by an application.  Start with what the system provides.  */
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_SYSTEM_HEADER@
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_COLUMNS@
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __need_system_sys_stat_h
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Special invocation convention.  */
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Normal invocation convention.  */
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_SYS_STAT_H
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Get nlink_t.
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   May also define off_t to a 64-bit type on native Windows.  */
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <sys/types.h>
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Get struct timespec.  */
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <time.h>
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard.  */
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_SYS_STAT_H
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _@GUARD_PREFIX@_SYS_STAT_H
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here.  */
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here.  */
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   headers that may declare mkdir().  Native Windows platforms declare mkdir
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   in <io.h> and/or <direct.h>, not in <unistd.h>.  */
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <io.h>     /* mingw32, mingw64 */
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <direct.h> /* mingw64, MSVC 9 */
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Native Windows platforms declare umask() in <io.h>.  */
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <io.h>
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Large File Support on native Windows.  */
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @WINDOWS_64_BIT_ST_SIZE@
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define stat _stati64
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_IFIFO
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef _S_IFIFO
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_IFIFO _S_IFIFO
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_IFMT
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IFMT 0170000
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if STAT_MACROS_BROKEN
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISBLK
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISCHR
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISDIR
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISFIFO
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISLNK
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISNAM
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISMPB
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISMPC
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISNWK
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISREG
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISSOCK
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISBLK
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFBLK
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISBLK(m) 0
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISCHR
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFCHR
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISCHR(m) 0
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISDIR
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFDIR
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISDIR(m) 0
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISDOOR /* Solaris 2.5 and up */
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISDOOR(m) 0
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISFIFO
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFIFO
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISFIFO(m) 0
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISLNK
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFLNK
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISLNK(m) 0
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISMPB /* V7 */
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFMPB
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPB(m) 0
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPC(m) 0
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISNAM /* Xenix */
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFNAM
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNAM(m) 0
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISNWK /* HP/UX */
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFNWK
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNWK(m) 0
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISPORT /* Solaris 10 and up */
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISPORT(m) 0
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISREG
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFREG
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISREG(m) 0
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISSOCK
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFSOCK
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISSOCK(m) 0
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISMQ
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_TYPEISMQ(p) 0
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISTMO
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_TYPEISTMO(p) 0
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISSEM
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_INSEM
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSEM(p) 0
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISSHM
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_INSHD
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSHM(p) 0
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* high performance ("contiguous data") */
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISCTG
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISCTG(p) 0
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Cray DMF (data migration facility): off line, with data  */
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISOFD
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISOFD(p) 0
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Cray DMF (data migration facility): off line, with no data  */
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISOFL
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISOFL(p) 0
22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* 4.4BSD whiteout */
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISWHT
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISWHT(m) 0
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* If any of the following are undefined,
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   define them to their de facto standard values.  */
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_ISUID
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISUID 04000
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_ISGID
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISGID 02000
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* S_ISVTX is a common extension to POSIX.  */
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISVTX
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISVTX 01000
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRUSR && S_IREAD
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRUSR S_IREAD
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRUSR
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRUSR 00400
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRGRP
25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRGRP (S_IRUSR >> 3)
25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IROTH
25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IROTH (S_IRUSR >> 6)
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWUSR && S_IWRITE
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWUSR S_IWRITE
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWUSR
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWUSR 00200
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWGRP
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWGRP (S_IWUSR >> 3)
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWOTH
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWOTH (S_IWUSR >> 6)
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXUSR && S_IEXEC
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXUSR S_IEXEC
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXUSR
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXUSR 00100
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXGRP
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXGRP (S_IXUSR >> 3)
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXOTH
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXOTH (S_IXUSR >> 6)
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRWXU
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRWXG
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRWXO
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* S_IXUGO is a common extension to POSIX.  */
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXUGO
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_IRWXUGO
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Macros for futimens and utimensat.  */
30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef UTIME_NOW
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define UTIME_NOW (-1)
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define UTIME_OMIT (-2)
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_FCHMODAT@
31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_FCHMODAT@
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (fchmodat, int,
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, int flag)
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (fchmodat, int,
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, int flag));
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (fchmodat);
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef fchmodat
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FCHMODAT
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module openat for portability");
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_FSTAT@
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_FSTAT@
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef fstat
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define fstat rpl_fstat
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (fstat);
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif @WINDOWS_64_BIT_ST_SIZE@
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Above, we define stat to _stati64.  */
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define fstat _fstati64
34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef fstat
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FSTAT
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (fstat, "fstat has portability problems - "
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module fstat for portability");
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_FSTATAT@
35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_FSTATAT@
35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef fstatat
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define fstatat rpl_fstatat
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (fstatat, int,
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags)
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2, 3)));
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (fstatat, int,
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags));
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_FSTATAT@
36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (fstatat, int,
37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags)
37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2, 3)));
37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (fstatat, int,
37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags));
37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (fstatat);
37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef fstatat
37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FSTATAT
38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module openat for portability");
38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_FUTIMENS@
38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   implementation relies on futimesat, which on Solaris 10 makes an invocation
38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to futimens that is meant to invoke the libc's futimens(), not gnulib's
39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   futimens().  */
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun)
39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef futimens
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define futimens rpl_futimens
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_FUTIMENS@
40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_FUTIMENS@
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (futimens);
40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef futimens
40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FUTIMENS
41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (futimens, "futimens is not portable - "
41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module futimens for portability");
41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_LCHMOD@
41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   denotes a symbolic link.  */
41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_LCHMOD@
42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The lchmod replacement follows symbolic links.  Callers should take
42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   this into account; lchmod should be applied only to arguments that
42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   are known to not be symbolic links.  On hosts that lack lchmod,
42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   this can lead to race conditions between the check and the
42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   invocation of lchmod, but we know of no workarounds that are
42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   reliable in general.  You might try requesting support for lchmod
42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   from your operating system supplier.  */
42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define lchmod chmod
42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Need to cast, because on mingw, the second parameter of chmod is
43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                                int mode.  */
43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         (const char *filename, mode_t mode));
43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if 0 /* assume already declared */
43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ARG_NONNULL ((1)));
43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_LCHMOD@
44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (lchmod);
44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef lchmod
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_LCHMOD
44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module lchmod for portability");
44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_LSTAT@
45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_LSTAT@
45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* mingw does not support symlinks, therefore it does not have lstat.  But
45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   without links, stat does just fine.  */
45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define lstat stat
45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif @REPLACE_LSTAT@
46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef lstat
46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define lstat rpl_lstat
46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1, 2)));
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_LSTAT@
47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (lstat);
47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef lstat
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_LSTAT
47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (lstat, "lstat is unportable - "
47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module lstat for portability");
48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @REPLACE_MKDIR@
48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef mkdir
48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define mkdir rpl_mkdir
48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1)));
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Additionally, it declares _mkdir (and depending on compile flags, an
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   which are included above.  */
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !GNULIB_defined_rpl_mkdir
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int
50105436638acc7c010349a69c3395f1a57c642dc62Ying Wangrpl_mkdir (char const *name, mode_t mode)
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  return _mkdir (name);
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define GNULIB_defined_rpl_mkdir 1
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mkdir rpl_mkdir
51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkdir);
51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MKDIRAT@
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_MKDIRAT@
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                _GL_ARG_NONNULL ((2)));
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkdirat);
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mkdirat
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKDIRAT
52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module openat for portability");
53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MKFIFO@
53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MKFIFO@
53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mkfifo
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mkfifo rpl_mkfifo
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ARG_NONNULL ((1)));
54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MKFIFO@
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ARG_NONNULL ((1)));
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkfifo);
55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mkfifo
55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKFIFO
55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mkfifo for portability");
55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MKFIFOAT@
56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_MKFIFOAT@
56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 _GL_ARG_NONNULL ((2)));
56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkfifoat);
56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mkfifoat
57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKFIFOAT
57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mkfifoat for portability");
57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MKNOD@
57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MKNOD@
57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mknod
58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mknod rpl_mknod
58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1)));
58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MKNOD@
58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1)));
59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mknod);
59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mknod
59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKNOD
59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mknod, "mknod is not portable - "
59905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mknod for portability");
60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MKNODAT@
60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_MKNODAT@
60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mknodat, int,
60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, dev_t dev)
60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mknodat, int,
61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, dev_t dev));
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mknodat);
61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mknodat
61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKNODAT
61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mkfifoat for portability");
61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STAT@
62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STAT@
62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* We can't use the object-like #define stat rpl_stat, because of
62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   struct stat.  This means that rpl_stat will not be used if the user
62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   does (stat)(a,b).  Oh well.  */
62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if defined _AIX && defined stat && defined _LARGE_FILES
62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       so we have to replace stat64() instead of stat(). */
63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef stat64
63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define stat64(name, st) rpl_stat (name, st)
63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif @WINDOWS_64_BIT_ST_SIZE@
63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Above, we define stat to _stati64.  */
63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if defined __MINGW32__ && defined _stati64
63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    ifndef _USE_32BIT_TIME_T
63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      /* The system headers define _stati64 to _stat64.  */
63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     undef _stat64
63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     define _stat64(name, st) rpl_stat (name, st)
63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    endif
64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   elif defined _MSC_VER && defined _stati64
64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    ifdef _USE_32BIT_TIME_T
64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      /* The system headers define _stati64 to _stat32i64.  */
64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     undef _stat32i64
64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     define _stat32i64(name, st) rpl_stat (name, st)
64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    else
64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      /* The system headers define _stati64 to _stat64.  */
64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     undef _stat64
64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     define _stat64(name, st) rpl_stat (name, st)
64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    endif
65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   else
65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stati64
65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stati64(name, st) rpl_stat (name, st)
65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif defined __MINGW32__ && defined stat
65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   ifdef _USE_32BIT_TIME_T
65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat32i64.  */
65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat32i64
65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat32i64(name, st) rpl_stat (name, st)
65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   else
66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat64.  */
66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat64
66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat64(name, st) rpl_stat (name, st)
66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif defined _MSC_VER && defined stat
66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   ifdef _USE_32BIT_TIME_T
66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat32.  */
66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat32
66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat32(name, st) rpl_stat (name, st)
66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   else
67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat64i32.  */
67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat64i32
67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat64i32(name, st) rpl_stat (name, st)
67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else /* !(_AIX ||__MINGW32__ ||  _MSC_VER) */
67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef stat
67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define stat(name, st) rpl_stat (name, st)
67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif /* !_LARGE_FILES */
67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int stat (const char *name, struct stat *buf)
67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                      _GL_ARG_NONNULL ((1, 2));
68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stat
68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STAT
68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (stat, "stat is unportable - "
68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module stat for portability");
68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_UTIMENSAT@
69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   implementation relies on futimesat, which on Solaris 10 makes an invocation
69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   utimensat().  */
69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun)
69605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef utimensat
69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define utimensat rpl_utimensat
69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag)
70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((2)));
70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag));
70505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_UTIMENSAT@
70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag)
70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((2)));
71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag));
71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_UTIMENSAT@
71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (utimensat);
71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef utimensat
71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_UTIMENSAT
72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module utimensat for portability");
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
729