105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Provide a more complete sys/stat header file.
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2005-2012 Free Software Foundation, Inc.
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software; you can redistribute it and/or modify
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation; either version 3, or (at your option)
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   any later version.
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This file is supposed to be used on platforms where <sys/stat.h> is
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   incomplete.  It is intended to provide definitions and prototypes
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   needed by an application.  Start with what the system provides.  */
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#pragma GCC system_header
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __need_system_sys_stat_h
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Special invocation convention.  */
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include_next <sys/stat.h>
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Normal invocation convention.  */
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_SYS_STAT_H
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Get nlink_t.
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   May also define off_t to a 64-bit type on native Windows.  */
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <sys/types.h>
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Get struct timespec.  */
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <time.h>
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard.  */
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include_next <sys/stat.h>
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_SYS_STAT_H
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_SYS_STAT_H
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_CXXDEFS_H
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_CXXDEFS_H
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The three most frequent use cases of these macros are:
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a substitute for a function that is missing on some
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     platforms, but is declared and works fine on the platforms on which
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     it exists:
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if !@HAVE_FOO@
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_SYS (foo, ...);
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a replacement for a function that exists on all platforms,
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but is broken/insufficient and needs to be replaced on some platforms:
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if @REPLACE_FOO@
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   undef foo
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   define foo rpl_foo
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_RPL (foo, ...);
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_RPL (foo, ...);
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # else
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a replacement for a function that exists on some platforms
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but is broken/insufficient and needs to be replaced on some of them and
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     is additionally either missing or undeclared on some other platforms:
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if @REPLACE_FOO@
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   undef foo
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   define foo rpl_foo
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_RPL (foo, ...);
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_RPL (foo, ...);
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # else
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_SYS (foo, ...);
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang*/
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_EXTERN_C declaration;
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_EXTERN_C extern "C"
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_EXTERN_C extern
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a replacement function, named rpl_func, with the given prototype,
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   consisting of return type, parameters, and attributes.
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares the system function, named func, with the given prototype,
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   consisting of return type, parameters, and attributes.
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_EXTERN_C rettype func parameters_and_attributes
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_RPL (func, rettype, parameters);
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a C++ alias called GNULIB_NAMESPACE::func
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                \
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                         \
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rettype (*const func) parameters = ::rpl_func;          \
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                         \
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function rpl_func may have a slightly different
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declaration.  A cast is used to silence the "invalid conversion" error
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that would otherwise occur.  */
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                     \
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                              \
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rettype (*const func) parameters =                           \
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                              \
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS (func, rettype, parameters);
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a C++ alias called GNULIB_NAMESPACE::func
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that redirects to the system provided function func, if GNULIB_NAMESPACE
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is defined.
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* If we were to write
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       rettype (*const func) parameters = ::func;
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     better (remove an indirection through a 'static' pointer variable),
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but then the _GL_CXXALIASWARN macro below would cause a warning not only
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                     \
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                              \
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters = ::func;  \
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                              \
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function func may have a slightly different declaration.
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   A cast is used to silence the "invalid conversion" error that would
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   otherwise occur.  */
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                          \
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                   \
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters =               \
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(::func); \
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                   \
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function is picked among a set of overloaded functions,
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   namely the one with rettype2 and parameters2.  Two consecutive casts
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   are used to silence the "cannot find a match" and "invalid conversion"
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   errors that would otherwise occur.  */
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* The outer cast must be a reinterpret_cast.
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     The inner cast: When the function is defined as a set of overloaded
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     functions, it works as a static_cast<>, choosing the designated variant.
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     When the function is defined as a single variant, it works as a
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                                \
24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                                         \
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters =                                     \
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(                               \
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          (rettype2(*)parameters2)(::func));                                  \
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                                         \
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIASWARN (func);
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   causes a warning to be emitted when ::func is used but not when
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   variants.  */
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN(func) \
25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN_1(func,namespace) \
25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN_2 (func, namespace)
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   we enable the warning only when not optimizing.  */
26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !__OPTIMIZE__
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_WARN_ON_USE (func, \
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     "The symbol ::" #func " refers to the system function. " \
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     "Use " #namespace "::" #func " instead.")
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     extern __typeof__ (func) func
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_EXTERN_C int _gl_cxxalias_dummy
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN(func) \
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   causes a warning to be emitted when the given overloaded variant of ::func
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is used but not when GNULIB_NAMESPACE::func is used.  */
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        GNULIB_NAMESPACE)
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   we enable the warning only when not optimizing.  */
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !__OPTIMIZE__
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         "The symbol ::" #func " refers to the system function. " \
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         "Use " #namespace "::" #func " instead.")
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     extern __typeof__ (func) func
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_EXTERN_C int _gl_cxxalias_dummy
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_CXXDEFS_H */
30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here.  */
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that the values passed as arguments n, ..., m must be non-NULL pointers.
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_ARG_NONNULL
31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_ARG_NONNULL(params)
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here.  */
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function __attribute__ ((__warning__ (message)))
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like _GL_WARN_ON_USE (function, "string"), except that the function is
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declared with the given prototype, consisting of return type, parameters,
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   and attributes.
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   not work in this case.  */
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE_CXX
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
34705436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes \
34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     __attribute__ ((__warning__ (msg)))
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_EXTERN_C declaration;
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_EXTERN_C
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern "C"
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   headers that may declare mkdir().  Native Windows platforms declare mkdir
37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   in <io.h> and/or <direct.h>, not in <unistd.h>.  */
37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <io.h>     /* mingw32, mingw64 */
37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <direct.h> /* mingw64, MSVC 9 */
37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Native Windows platforms declare umask() in <io.h>.  */
37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <io.h>
38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Large File Support on native Windows.  */
38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define stat _stati64
38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_IFIFO
38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef _S_IFIFO
38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_IFIFO _S_IFIFO
39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_IFMT
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IFMT 0170000
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if STAT_MACROS_BROKEN
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISBLK
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISCHR
40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISDIR
40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISFIFO
40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISLNK
40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISNAM
40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISMPB
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISMPC
40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISNWK
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISREG
40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef S_ISSOCK
40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISBLK
41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFBLK
41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISBLK(m) 0
41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISCHR
42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFCHR
42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISCHR(m) 0
42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISDIR
42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFDIR
42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISDIR(m) 0
43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISDOOR /* Solaris 2.5 and up */
43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISDOOR(m) 0
43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISFIFO
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFIFO
44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISFIFO(m) 0
44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISLNK
44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFLNK
44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISLNK(m) 0
45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISMPB /* V7 */
45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFMPB
45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPB(m) 0
46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISMPC(m) 0
46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISNAM /* Xenix */
46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFNAM
46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNAM(m) 0
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISNWK /* HP/UX */
47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFNWK
47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISNWK(m) 0
47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISPORT /* Solaris 10 and up */
48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISPORT(m) 0
48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISREG
48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFREG
48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISREG(m) 0
49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISSOCK
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_IFSOCK
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_ISSOCK(m) 0
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISMQ
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_TYPEISMQ(p) 0
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISTMO
50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_TYPEISTMO(p) 0
50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISSEM
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_INSEM
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSEM(p) 0
51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_TYPEISSHM
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef S_INSHD
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define S_TYPEISSHM(p) 0
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* high performance ("contiguous data") */
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISCTG
52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISCTG(p) 0
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Cray DMF (data migration facility): off line, with data  */
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISOFD
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISOFD(p) 0
53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Cray DMF (data migration facility): off line, with no data  */
53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISOFL
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISOFL(p) 0
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* 4.4BSD whiteout */
54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISWHT
54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISWHT(m) 0
54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* If any of the following are undefined,
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   define them to their de facto standard values.  */
54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_ISUID
55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISUID 04000
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_ISGID
55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISGID 02000
55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* S_ISVTX is a common extension to POSIX.  */
55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_ISVTX
55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_ISVTX 01000
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRUSR && S_IREAD
56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRUSR S_IREAD
56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRUSR
56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRUSR 00400
56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRGRP
56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRGRP (S_IRUSR >> 3)
56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IROTH
57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IROTH (S_IRUSR >> 6)
57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWUSR && S_IWRITE
57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWUSR S_IWRITE
57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWUSR
57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWUSR 00200
57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWGRP
58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWGRP (S_IWUSR >> 3)
58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IWOTH
58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IWOTH (S_IWUSR >> 6)
58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXUSR && S_IEXEC
58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXUSR S_IEXEC
58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXUSR
59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXUSR 00100
59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXGRP
59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXGRP (S_IXUSR >> 3)
59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXOTH
59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXOTH (S_IXUSR >> 6)
59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
59905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRWXU
60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRWXG
60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IRWXO
60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* S_IXUGO is a common extension to POSIX.  */
61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !S_IXUGO
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef S_IRWXUGO
61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Macros for futimens and utimensat.  */
62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef UTIME_NOW
62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define UTIME_NOW (-1)
62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define UTIME_OMIT (-2)
62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (fchmodat, int,
62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, int flag)
63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (fchmodat, int,
63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, int flag));
63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (fchmodat);
63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef fchmodat
63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FCHMODAT
63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module openat for portability");
64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef fstat
64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define fstat rpl_fstat
64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (fstat);
65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif 0
65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Above, we define stat to _stati64.  */
65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define fstat _fstati64
65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef fstat
66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FSTAT
66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (fstat, "fstat has portability problems - "
66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module fstat for portability");
66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef fstatat
67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define fstatat rpl_fstatat
67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (fstatat, int,
67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags)
67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2, 3)));
67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (fstatat, int,
67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags));
67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !1
68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (fstatat, int,
68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags)
68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2, 3)));
68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (fstatat, int,
68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *name, struct stat *st, int flags));
68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (fstatat);
68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef fstatat
69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FSTATAT
69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module openat for portability");
69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
69605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   implementation relies on futimesat, which on Solaris 10 makes an invocation
70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to futimens that is meant to invoke the libc's futimens(), not gnulib's
70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   futimens().  */
70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0 || (!1 && defined __sun)
70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
70505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef futimens
70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define futimens rpl_futimens
70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !1
71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (futimens);
71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef futimens
72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FUTIMENS
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (futimens, "futimens is not portable - "
72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module futimens for portability");
72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   denotes a symbolic link.  */
73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The lchmod replacement follows symbolic links.  Callers should take
73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   this into account; lchmod should be applied only to arguments that
73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   are known to not be symbolic links.  On hosts that lack lchmod,
73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   this can lead to race conditions between the check and the
73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   invocation of lchmod, but we know of no workarounds that are
73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   reliable in general.  You might try requesting support for lchmod
73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   from your operating system supplier.  */
73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define lchmod chmod
74105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Need to cast, because on mingw, the second parameter of chmod is
74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                                int mode.  */
74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         (const char *filename, mode_t mode));
74605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if 0 /* assume already declared */
74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ARG_NONNULL ((1)));
75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
75105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
75205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (lchmod);
75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef lchmod
75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_LCHMOD
75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module lchmod for portability");
76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
76305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
76405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* mingw does not support symlinks, therefore it does not have lstat.  But
76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   without links, stat does just fine.  */
76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
77005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define lstat stat
77105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
77205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif 0
77405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
77505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef lstat
77605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define lstat rpl_lstat
77705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
77805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
77905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1, 2)));
78005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
78105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
78205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
78305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
78405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
78505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (lstat);
78605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
78705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef lstat
78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_LSTAT
79005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (lstat, "lstat is unportable - "
79105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module lstat for portability");
79205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
79305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
79405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
79505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
79605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
79805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef mkdir
79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define mkdir rpl_mkdir
80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
80105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
80205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1)));
80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
80505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Additionally, it declares _mkdir (and depending on compile flags, an
80705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
80805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   which are included above.  */
80905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
81005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
81105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !GNULIB_defined_rpl_mkdir
81205436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic int
81305436638acc7c010349a69c3395f1a57c642dc62Ying Wangrpl_mkdir (char const *name, mode_t mode)
81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  return _mkdir (name);
81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define GNULIB_defined_rpl_mkdir 1
81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mkdir rpl_mkdir
82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkdir);
82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                _GL_ARG_NONNULL ((2)));
83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkdirat);
83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mkdirat
84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKDIRAT
84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module openat for portability");
84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mkfifo
85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mkfifo rpl_mkfifo
85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ARG_NONNULL ((1)));
85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !1
85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ARG_NONNULL ((1)));
86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkfifo);
86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mkfifo
86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKFIFO
86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mkfifo for portability");
86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
87005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
87105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
87205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
87505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 _GL_ARG_NONNULL ((2)));
87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mkfifoat);
88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mkfifoat
88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKFIFOAT
88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mkfifoat for portability");
88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mknod
89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mknod rpl_mknod
89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1)));
89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !1
90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              _GL_ARG_NONNULL ((1)));
90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mknod);
90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mknod
90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKNOD
91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mknod, "mknod is not portable - "
91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mknod for portability");
91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mknodat, int,
91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, dev_t dev)
92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mknodat, int,
92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (int fd, char const *file, mode_t mode, dev_t dev));
92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mknodat);
92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mknodat
92705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MKNODAT
92805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mkfifoat for portability");
93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* We can't use the object-like #define stat rpl_stat, because of
93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   struct stat.  This means that rpl_stat will not be used if the user
93805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   does (stat)(a,b).  Oh well.  */
93905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if defined _AIX && defined stat && defined _LARGE_FILES
94005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
94105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       so we have to replace stat64() instead of stat(). */
94205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef stat64
94305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define stat64(name, st) rpl_stat (name, st)
94405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif 0
94505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* Above, we define stat to _stati64.  */
94605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if defined __MINGW32__ && defined _stati64
94705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    ifndef _USE_32BIT_TIME_T
94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      /* The system headers define _stati64 to _stat64.  */
94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     undef _stat64
95005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     define _stat64(name, st) rpl_stat (name, st)
95105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    endif
95205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   elif defined _MSC_VER && defined _stati64
95305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    ifdef _USE_32BIT_TIME_T
95405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      /* The system headers define _stati64 to _stat32i64.  */
95505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     undef _stat32i64
95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     define _stat32i64(name, st) rpl_stat (name, st)
95705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    else
95805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      /* The system headers define _stati64 to _stat64.  */
95905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     undef _stat64
96005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#     define _stat64(name, st) rpl_stat (name, st)
96105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    endif
96205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   else
96305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stati64
96405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stati64(name, st) rpl_stat (name, st)
96505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif defined __MINGW32__ && defined stat
96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   ifdef _USE_32BIT_TIME_T
96805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat32i64.  */
96905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat32i64
97005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat32i64(name, st) rpl_stat (name, st)
97105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   else
97205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat64.  */
97305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat64
97405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat64(name, st) rpl_stat (name, st)
97505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
97605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif defined _MSC_VER && defined stat
97705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   ifdef _USE_32BIT_TIME_T
97805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat32.  */
97905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat32
98005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat32(name, st) rpl_stat (name, st)
98105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   else
98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     /* The system headers define stat to _stat64i32.  */
98305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef _stat64i32
98405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define _stat64i32(name, st) rpl_stat (name, st)
98505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
98605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else /* !(_AIX ||__MINGW32__ ||  _MSC_VER) */
98705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef stat
98805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define stat(name, st) rpl_stat (name, st)
98905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif /* !_LARGE_FILES */
99005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int stat (const char *name, struct stat *buf)
99105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                      _GL_ARG_NONNULL ((1, 2));
99205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
99305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
99405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stat
99505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STAT
99605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (stat, "stat is unportable - "
99705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module stat for portability");
99805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
99905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
100005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
100105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
100205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
100305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
100405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   implementation relies on futimesat, which on Solaris 10 makes an invocation
100505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
100605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   utimensat().  */
100705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0 || (!1 && defined __sun)
100805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
100905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef utimensat
101005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define utimensat rpl_utimensat
101105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
101205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
101305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag)
101405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((2)));
101505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
101605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag));
101705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
101805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !1
101905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
102005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag)
102105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((2)));
102205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
102305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
102405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   struct timespec const times[2], int flag));
102505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
102605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
102705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (utimensat);
102805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
102905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
103005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef utimensat
103105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_UTIMENSAT
103205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
103305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module utimensat for portability");
103405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
103505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
103605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
103705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
103805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_SYS_STAT_H */
103905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_SYS_STAT_H */
104005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
1041