xref: /dflybsd-src/gnu/usr.bin/grep/libgreputils/sys/stat.h (revision 51ddd709576b6d603cb35ff07b103a739f875a02)
16aaf5a41SJohn Marino /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
26aaf5a41SJohn Marino /* Provide a more complete sys/stat header file.
3*51ddd709SJohn Marino    Copyright (C) 2005-2014 Free Software Foundation, Inc.
46aaf5a41SJohn Marino 
56aaf5a41SJohn Marino    This program is free software; you can redistribute it and/or modify
66aaf5a41SJohn Marino    it under the terms of the GNU General Public License as published by
76aaf5a41SJohn Marino    the Free Software Foundation; either version 3, or (at your option)
86aaf5a41SJohn Marino    any later version.
96aaf5a41SJohn Marino 
106aaf5a41SJohn Marino    This program is distributed in the hope that it will be useful,
116aaf5a41SJohn Marino    but WITHOUT ANY WARRANTY; without even the implied warranty of
126aaf5a41SJohn Marino    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
136aaf5a41SJohn Marino    GNU General Public License for more details.
146aaf5a41SJohn Marino 
156aaf5a41SJohn Marino    You should have received a copy of the GNU General Public License
166aaf5a41SJohn Marino    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
176aaf5a41SJohn Marino 
186aaf5a41SJohn Marino /* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
196aaf5a41SJohn Marino 
206aaf5a41SJohn Marino /* This file is supposed to be used on platforms where <sys/stat.h> is
216aaf5a41SJohn Marino    incomplete.  It is intended to provide definitions and prototypes
226aaf5a41SJohn Marino    needed by an application.  Start with what the system provides.  */
236aaf5a41SJohn Marino 
246aaf5a41SJohn Marino #if __GNUC__ >= 3
256aaf5a41SJohn Marino #pragma GCC system_header
266aaf5a41SJohn Marino #endif
276aaf5a41SJohn Marino 
286aaf5a41SJohn Marino 
296aaf5a41SJohn Marino #if defined __need_system_sys_stat_h
306aaf5a41SJohn Marino /* Special invocation convention.  */
316aaf5a41SJohn Marino 
326aaf5a41SJohn Marino #include_next <sys/stat.h>
336aaf5a41SJohn Marino 
346aaf5a41SJohn Marino #else
356aaf5a41SJohn Marino /* Normal invocation convention.  */
366aaf5a41SJohn Marino 
376aaf5a41SJohn Marino #ifndef _GL_SYS_STAT_H
386aaf5a41SJohn Marino 
396aaf5a41SJohn Marino /* Get nlink_t.
406aaf5a41SJohn Marino    May also define off_t to a 64-bit type on native Windows.  */
416aaf5a41SJohn Marino #include <sys/types.h>
426aaf5a41SJohn Marino 
436aaf5a41SJohn Marino /* Get struct timespec.  */
446aaf5a41SJohn Marino #include <time.h>
456aaf5a41SJohn Marino 
466aaf5a41SJohn Marino /* The include_next requires a split double-inclusion guard.  */
476aaf5a41SJohn Marino #include_next <sys/stat.h>
486aaf5a41SJohn Marino 
496aaf5a41SJohn Marino #ifndef _GL_SYS_STAT_H
506aaf5a41SJohn Marino #define _GL_SYS_STAT_H
516aaf5a41SJohn Marino 
526aaf5a41SJohn Marino /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
536aaf5a41SJohn Marino #ifndef _GL_CXXDEFS_H
546aaf5a41SJohn Marino #define _GL_CXXDEFS_H
556aaf5a41SJohn Marino 
566aaf5a41SJohn Marino /* The three most frequent use cases of these macros are:
576aaf5a41SJohn Marino 
586aaf5a41SJohn Marino    * For providing a substitute for a function that is missing on some
596aaf5a41SJohn Marino      platforms, but is declared and works fine on the platforms on which
606aaf5a41SJohn Marino      it exists:
616aaf5a41SJohn Marino 
626aaf5a41SJohn Marino        #if @GNULIB_FOO@
636aaf5a41SJohn Marino        # if !@HAVE_FOO@
646aaf5a41SJohn Marino        _GL_FUNCDECL_SYS (foo, ...);
656aaf5a41SJohn Marino        # endif
666aaf5a41SJohn Marino        _GL_CXXALIAS_SYS (foo, ...);
676aaf5a41SJohn Marino        _GL_CXXALIASWARN (foo);
686aaf5a41SJohn Marino        #elif defined GNULIB_POSIXCHECK
696aaf5a41SJohn Marino        ...
706aaf5a41SJohn Marino        #endif
716aaf5a41SJohn Marino 
726aaf5a41SJohn Marino    * For providing a replacement for a function that exists on all platforms,
736aaf5a41SJohn Marino      but is broken/insufficient and needs to be replaced on some platforms:
746aaf5a41SJohn Marino 
756aaf5a41SJohn Marino        #if @GNULIB_FOO@
766aaf5a41SJohn Marino        # if @REPLACE_FOO@
776aaf5a41SJohn Marino        #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
786aaf5a41SJohn Marino        #   undef foo
796aaf5a41SJohn Marino        #   define foo rpl_foo
806aaf5a41SJohn Marino        #  endif
816aaf5a41SJohn Marino        _GL_FUNCDECL_RPL (foo, ...);
826aaf5a41SJohn Marino        _GL_CXXALIAS_RPL (foo, ...);
836aaf5a41SJohn Marino        # else
846aaf5a41SJohn Marino        _GL_CXXALIAS_SYS (foo, ...);
856aaf5a41SJohn Marino        # endif
866aaf5a41SJohn Marino        _GL_CXXALIASWARN (foo);
876aaf5a41SJohn Marino        #elif defined GNULIB_POSIXCHECK
886aaf5a41SJohn Marino        ...
896aaf5a41SJohn Marino        #endif
906aaf5a41SJohn Marino 
916aaf5a41SJohn Marino    * For providing a replacement for a function that exists on some platforms
926aaf5a41SJohn Marino      but is broken/insufficient and needs to be replaced on some of them and
936aaf5a41SJohn Marino      is additionally either missing or undeclared on some other platforms:
946aaf5a41SJohn Marino 
956aaf5a41SJohn Marino        #if @GNULIB_FOO@
966aaf5a41SJohn Marino        # if @REPLACE_FOO@
976aaf5a41SJohn Marino        #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
986aaf5a41SJohn Marino        #   undef foo
996aaf5a41SJohn Marino        #   define foo rpl_foo
1006aaf5a41SJohn Marino        #  endif
1016aaf5a41SJohn Marino        _GL_FUNCDECL_RPL (foo, ...);
1026aaf5a41SJohn Marino        _GL_CXXALIAS_RPL (foo, ...);
1036aaf5a41SJohn Marino        # else
1046aaf5a41SJohn Marino        #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
1056aaf5a41SJohn Marino        _GL_FUNCDECL_SYS (foo, ...);
1066aaf5a41SJohn Marino        #  endif
1076aaf5a41SJohn Marino        _GL_CXXALIAS_SYS (foo, ...);
1086aaf5a41SJohn Marino        # endif
1096aaf5a41SJohn Marino        _GL_CXXALIASWARN (foo);
1106aaf5a41SJohn Marino        #elif defined GNULIB_POSIXCHECK
1116aaf5a41SJohn Marino        ...
1126aaf5a41SJohn Marino        #endif
1136aaf5a41SJohn Marino */
1146aaf5a41SJohn Marino 
1156aaf5a41SJohn Marino /* _GL_EXTERN_C declaration;
1166aaf5a41SJohn Marino    performs the declaration with C linkage.  */
1176aaf5a41SJohn Marino #if defined __cplusplus
1186aaf5a41SJohn Marino # define _GL_EXTERN_C extern "C"
1196aaf5a41SJohn Marino #else
1206aaf5a41SJohn Marino # define _GL_EXTERN_C extern
1216aaf5a41SJohn Marino #endif
1226aaf5a41SJohn Marino 
1236aaf5a41SJohn Marino /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
1246aaf5a41SJohn Marino    declares a replacement function, named rpl_func, with the given prototype,
1256aaf5a41SJohn Marino    consisting of return type, parameters, and attributes.
1266aaf5a41SJohn Marino    Example:
1276aaf5a41SJohn Marino      _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
1286aaf5a41SJohn Marino                                   _GL_ARG_NONNULL ((1)));
1296aaf5a41SJohn Marino  */
1306aaf5a41SJohn Marino #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
1316aaf5a41SJohn Marino   _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
1326aaf5a41SJohn Marino #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
1336aaf5a41SJohn Marino   _GL_EXTERN_C rettype rpl_func parameters_and_attributes
1346aaf5a41SJohn Marino 
1356aaf5a41SJohn Marino /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
1366aaf5a41SJohn Marino    declares the system function, named func, with the given prototype,
1376aaf5a41SJohn Marino    consisting of return type, parameters, and attributes.
1386aaf5a41SJohn Marino    Example:
1396aaf5a41SJohn Marino      _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
1406aaf5a41SJohn Marino                                   _GL_ARG_NONNULL ((1)));
1416aaf5a41SJohn Marino  */
1426aaf5a41SJohn Marino #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
1436aaf5a41SJohn Marino   _GL_EXTERN_C rettype func parameters_and_attributes
1446aaf5a41SJohn Marino 
1456aaf5a41SJohn Marino /* _GL_CXXALIAS_RPL (func, rettype, parameters);
1466aaf5a41SJohn Marino    declares a C++ alias called GNULIB_NAMESPACE::func
1476aaf5a41SJohn Marino    that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
1486aaf5a41SJohn Marino    Example:
1496aaf5a41SJohn Marino      _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
1506aaf5a41SJohn Marino  */
1516aaf5a41SJohn Marino #define _GL_CXXALIAS_RPL(func,rettype,parameters) \
1526aaf5a41SJohn Marino   _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
1536aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
1546aaf5a41SJohn Marino # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
1556aaf5a41SJohn Marino     namespace GNULIB_NAMESPACE                                \
1566aaf5a41SJohn Marino     {                                                         \
1576aaf5a41SJohn Marino       rettype (*const func) parameters = ::rpl_func;          \
1586aaf5a41SJohn Marino     }                                                         \
1596aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
1606aaf5a41SJohn Marino #else
1616aaf5a41SJohn Marino # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
1626aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
1636aaf5a41SJohn Marino #endif
1646aaf5a41SJohn Marino 
1656aaf5a41SJohn Marino /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
1666aaf5a41SJohn Marino    is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
1676aaf5a41SJohn Marino    except that the C function rpl_func may have a slightly different
1686aaf5a41SJohn Marino    declaration.  A cast is used to silence the "invalid conversion" error
1696aaf5a41SJohn Marino    that would otherwise occur.  */
1706aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
1716aaf5a41SJohn Marino # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
1726aaf5a41SJohn Marino     namespace GNULIB_NAMESPACE                                     \
1736aaf5a41SJohn Marino     {                                                              \
1746aaf5a41SJohn Marino       rettype (*const func) parameters =                           \
1756aaf5a41SJohn Marino         reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
1766aaf5a41SJohn Marino     }                                                              \
1776aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
1786aaf5a41SJohn Marino #else
1796aaf5a41SJohn Marino # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
1806aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
1816aaf5a41SJohn Marino #endif
1826aaf5a41SJohn Marino 
1836aaf5a41SJohn Marino /* _GL_CXXALIAS_SYS (func, rettype, parameters);
1846aaf5a41SJohn Marino    declares a C++ alias called GNULIB_NAMESPACE::func
1856aaf5a41SJohn Marino    that redirects to the system provided function func, if GNULIB_NAMESPACE
1866aaf5a41SJohn Marino    is defined.
1876aaf5a41SJohn Marino    Example:
1886aaf5a41SJohn Marino      _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
1896aaf5a41SJohn Marino  */
1906aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
1916aaf5a41SJohn Marino   /* If we were to write
1926aaf5a41SJohn Marino        rettype (*const func) parameters = ::func;
1936aaf5a41SJohn Marino      like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
1946aaf5a41SJohn Marino      better (remove an indirection through a 'static' pointer variable),
1956aaf5a41SJohn Marino      but then the _GL_CXXALIASWARN macro below would cause a warning not only
1966aaf5a41SJohn Marino      for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
1976aaf5a41SJohn Marino # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
1986aaf5a41SJohn Marino     namespace GNULIB_NAMESPACE                     \
1996aaf5a41SJohn Marino     {                                              \
2006aaf5a41SJohn Marino       static rettype (*func) parameters = ::func;  \
2016aaf5a41SJohn Marino     }                                              \
2026aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2036aaf5a41SJohn Marino #else
2046aaf5a41SJohn Marino # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
2056aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2066aaf5a41SJohn Marino #endif
2076aaf5a41SJohn Marino 
2086aaf5a41SJohn Marino /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
2096aaf5a41SJohn Marino    is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
2106aaf5a41SJohn Marino    except that the C function func may have a slightly different declaration.
2116aaf5a41SJohn Marino    A cast is used to silence the "invalid conversion" error that would
2126aaf5a41SJohn Marino    otherwise occur.  */
2136aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
2146aaf5a41SJohn Marino # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
2156aaf5a41SJohn Marino     namespace GNULIB_NAMESPACE                          \
2166aaf5a41SJohn Marino     {                                                   \
2176aaf5a41SJohn Marino       static rettype (*func) parameters =               \
2186aaf5a41SJohn Marino         reinterpret_cast<rettype(*)parameters>(::func); \
2196aaf5a41SJohn Marino     }                                                   \
2206aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2216aaf5a41SJohn Marino #else
2226aaf5a41SJohn Marino # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
2236aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2246aaf5a41SJohn Marino #endif
2256aaf5a41SJohn Marino 
2266aaf5a41SJohn Marino /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
2276aaf5a41SJohn Marino    is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
2286aaf5a41SJohn Marino    except that the C function is picked among a set of overloaded functions,
2296aaf5a41SJohn Marino    namely the one with rettype2 and parameters2.  Two consecutive casts
2306aaf5a41SJohn Marino    are used to silence the "cannot find a match" and "invalid conversion"
2316aaf5a41SJohn Marino    errors that would otherwise occur.  */
2326aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
2336aaf5a41SJohn Marino   /* The outer cast must be a reinterpret_cast.
2346aaf5a41SJohn Marino      The inner cast: When the function is defined as a set of overloaded
2356aaf5a41SJohn Marino      functions, it works as a static_cast<>, choosing the designated variant.
2366aaf5a41SJohn Marino      When the function is defined as a single variant, it works as a
2376aaf5a41SJohn Marino      reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
2386aaf5a41SJohn Marino # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
2396aaf5a41SJohn Marino     namespace GNULIB_NAMESPACE                                                \
2406aaf5a41SJohn Marino     {                                                                         \
2416aaf5a41SJohn Marino       static rettype (*func) parameters =                                     \
2426aaf5a41SJohn Marino         reinterpret_cast<rettype(*)parameters>(                               \
2436aaf5a41SJohn Marino           (rettype2(*)parameters2)(::func));                                  \
2446aaf5a41SJohn Marino     }                                                                         \
2456aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2466aaf5a41SJohn Marino #else
2476aaf5a41SJohn Marino # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
2486aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2496aaf5a41SJohn Marino #endif
2506aaf5a41SJohn Marino 
2516aaf5a41SJohn Marino /* _GL_CXXALIASWARN (func);
2526aaf5a41SJohn Marino    causes a warning to be emitted when ::func is used but not when
2536aaf5a41SJohn Marino    GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
2546aaf5a41SJohn Marino    variants.  */
2556aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
2566aaf5a41SJohn Marino # define _GL_CXXALIASWARN(func) \
2576aaf5a41SJohn Marino    _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
2586aaf5a41SJohn Marino # define _GL_CXXALIASWARN_1(func,namespace) \
2596aaf5a41SJohn Marino    _GL_CXXALIASWARN_2 (func, namespace)
2606aaf5a41SJohn Marino /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
2616aaf5a41SJohn Marino    we enable the warning only when not optimizing.  */
2626aaf5a41SJohn Marino # if !__OPTIMIZE__
2636aaf5a41SJohn Marino #  define _GL_CXXALIASWARN_2(func,namespace) \
2646aaf5a41SJohn Marino     _GL_WARN_ON_USE (func, \
2656aaf5a41SJohn Marino                      "The symbol ::" #func " refers to the system function. " \
2666aaf5a41SJohn Marino                      "Use " #namespace "::" #func " instead.")
2676aaf5a41SJohn Marino # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
2686aaf5a41SJohn Marino #  define _GL_CXXALIASWARN_2(func,namespace) \
2696aaf5a41SJohn Marino      extern __typeof__ (func) func
2706aaf5a41SJohn Marino # else
2716aaf5a41SJohn Marino #  define _GL_CXXALIASWARN_2(func,namespace) \
2726aaf5a41SJohn Marino      _GL_EXTERN_C int _gl_cxxalias_dummy
2736aaf5a41SJohn Marino # endif
2746aaf5a41SJohn Marino #else
2756aaf5a41SJohn Marino # define _GL_CXXALIASWARN(func) \
2766aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
2776aaf5a41SJohn Marino #endif
2786aaf5a41SJohn Marino 
2796aaf5a41SJohn Marino /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
2806aaf5a41SJohn Marino    causes a warning to be emitted when the given overloaded variant of ::func
2816aaf5a41SJohn Marino    is used but not when GNULIB_NAMESPACE::func is used.  */
2826aaf5a41SJohn Marino #if defined __cplusplus && defined GNULIB_NAMESPACE
2836aaf5a41SJohn Marino # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
2846aaf5a41SJohn Marino    _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
2856aaf5a41SJohn Marino                         GNULIB_NAMESPACE)
2866aaf5a41SJohn Marino # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
2876aaf5a41SJohn Marino    _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
2886aaf5a41SJohn Marino /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
2896aaf5a41SJohn Marino    we enable the warning only when not optimizing.  */
2906aaf5a41SJohn Marino # if !__OPTIMIZE__
2916aaf5a41SJohn Marino #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
2926aaf5a41SJohn Marino     _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
2936aaf5a41SJohn Marino                          "The symbol ::" #func " refers to the system function. " \
2946aaf5a41SJohn Marino                          "Use " #namespace "::" #func " instead.")
2956aaf5a41SJohn Marino # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
2966aaf5a41SJohn Marino #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
2976aaf5a41SJohn Marino      extern __typeof__ (func) func
2986aaf5a41SJohn Marino # else
2996aaf5a41SJohn Marino #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
3006aaf5a41SJohn Marino      _GL_EXTERN_C int _gl_cxxalias_dummy
3016aaf5a41SJohn Marino # endif
3026aaf5a41SJohn Marino #else
3036aaf5a41SJohn Marino # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
3046aaf5a41SJohn Marino     _GL_EXTERN_C int _gl_cxxalias_dummy
3056aaf5a41SJohn Marino #endif
3066aaf5a41SJohn Marino 
3076aaf5a41SJohn Marino #endif /* _GL_CXXDEFS_H */
3086aaf5a41SJohn Marino 
3096aaf5a41SJohn Marino /* The definition of _GL_ARG_NONNULL is copied here.  */
3106aaf5a41SJohn Marino /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
3116aaf5a41SJohn Marino    that the values passed as arguments n, ..., m must be non-NULL pointers.
3126aaf5a41SJohn Marino    n = 1 stands for the first argument, n = 2 for the second argument etc.  */
3136aaf5a41SJohn Marino #ifndef _GL_ARG_NONNULL
3146aaf5a41SJohn Marino # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
3156aaf5a41SJohn Marino #  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
3166aaf5a41SJohn Marino # else
3176aaf5a41SJohn Marino #  define _GL_ARG_NONNULL(params)
3186aaf5a41SJohn Marino # endif
3196aaf5a41SJohn Marino #endif
3206aaf5a41SJohn Marino 
3216aaf5a41SJohn Marino /* The definition of _GL_WARN_ON_USE is copied here.  */
3226aaf5a41SJohn Marino #ifndef _GL_WARN_ON_USE
3236aaf5a41SJohn Marino 
3246aaf5a41SJohn Marino # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
3256aaf5a41SJohn Marino /* A compiler attribute is available in gcc versions 4.3.0 and later.  */
3266aaf5a41SJohn Marino #  define _GL_WARN_ON_USE(function, message) \
3276aaf5a41SJohn Marino extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
3286aaf5a41SJohn Marino # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
3296aaf5a41SJohn Marino /* Verify the existence of the function.  */
3306aaf5a41SJohn Marino #  define _GL_WARN_ON_USE(function, message) \
3316aaf5a41SJohn Marino extern __typeof__ (function) function
3326aaf5a41SJohn Marino # else /* Unsupported.  */
3336aaf5a41SJohn Marino #  define _GL_WARN_ON_USE(function, message) \
3346aaf5a41SJohn Marino _GL_WARN_EXTERN_C int _gl_warn_on_use
3356aaf5a41SJohn Marino # endif
3366aaf5a41SJohn Marino #endif
3376aaf5a41SJohn Marino 
3386aaf5a41SJohn Marino /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
3396aaf5a41SJohn Marino    is like _GL_WARN_ON_USE (function, "string"), except that the function is
3406aaf5a41SJohn Marino    declared with the given prototype, consisting of return type, parameters,
3416aaf5a41SJohn Marino    and attributes.
3426aaf5a41SJohn Marino    This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
3436aaf5a41SJohn Marino    not work in this case.  */
3446aaf5a41SJohn Marino #ifndef _GL_WARN_ON_USE_CXX
3456aaf5a41SJohn Marino # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
3466aaf5a41SJohn Marino #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
3476aaf5a41SJohn Marino extern rettype function parameters_and_attributes \
3486aaf5a41SJohn Marino      __attribute__ ((__warning__ (msg)))
3496aaf5a41SJohn Marino # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
3506aaf5a41SJohn Marino /* Verify the existence of the function.  */
3516aaf5a41SJohn Marino #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
3526aaf5a41SJohn Marino extern rettype function parameters_and_attributes
3536aaf5a41SJohn Marino # else /* Unsupported.  */
3546aaf5a41SJohn Marino #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
3556aaf5a41SJohn Marino _GL_WARN_EXTERN_C int _gl_warn_on_use
3566aaf5a41SJohn Marino # endif
3576aaf5a41SJohn Marino #endif
3586aaf5a41SJohn Marino 
3596aaf5a41SJohn Marino /* _GL_WARN_EXTERN_C declaration;
3606aaf5a41SJohn Marino    performs the declaration with C linkage.  */
3616aaf5a41SJohn Marino #ifndef _GL_WARN_EXTERN_C
3626aaf5a41SJohn Marino # if defined __cplusplus
3636aaf5a41SJohn Marino #  define _GL_WARN_EXTERN_C extern "C"
3646aaf5a41SJohn Marino # else
3656aaf5a41SJohn Marino #  define _GL_WARN_EXTERN_C extern
3666aaf5a41SJohn Marino # endif
3676aaf5a41SJohn Marino #endif
3686aaf5a41SJohn Marino 
3696aaf5a41SJohn Marino /* Before doing "#define mkdir rpl_mkdir" below, we need to include all
3706aaf5a41SJohn Marino    headers that may declare mkdir().  Native Windows platforms declare mkdir
3716aaf5a41SJohn Marino    in <io.h> and/or <direct.h>, not in <unistd.h>.  */
3726aaf5a41SJohn Marino #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
3736aaf5a41SJohn Marino # include <io.h>     /* mingw32, mingw64 */
3746aaf5a41SJohn Marino # include <direct.h> /* mingw64, MSVC 9 */
3756aaf5a41SJohn Marino #endif
3766aaf5a41SJohn Marino 
3776aaf5a41SJohn Marino /* Native Windows platforms declare umask() in <io.h>.  */
3786aaf5a41SJohn Marino #if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
3796aaf5a41SJohn Marino # include <io.h>
3806aaf5a41SJohn Marino #endif
3816aaf5a41SJohn Marino 
3826aaf5a41SJohn Marino /* Large File Support on native Windows.  */
3836aaf5a41SJohn Marino #if 0
3846aaf5a41SJohn Marino # define stat _stati64
3856aaf5a41SJohn Marino #endif
3866aaf5a41SJohn Marino 
3876aaf5a41SJohn Marino #ifndef S_IFIFO
3886aaf5a41SJohn Marino # ifdef _S_IFIFO
3896aaf5a41SJohn Marino #  define S_IFIFO _S_IFIFO
3906aaf5a41SJohn Marino # endif
3916aaf5a41SJohn Marino #endif
3926aaf5a41SJohn Marino 
3936aaf5a41SJohn Marino #ifndef S_IFMT
3946aaf5a41SJohn Marino # define S_IFMT 0170000
3956aaf5a41SJohn Marino #endif
3966aaf5a41SJohn Marino 
3976aaf5a41SJohn Marino #if STAT_MACROS_BROKEN
3986aaf5a41SJohn Marino # undef S_ISBLK
3996aaf5a41SJohn Marino # undef S_ISCHR
4006aaf5a41SJohn Marino # undef S_ISDIR
4016aaf5a41SJohn Marino # undef S_ISFIFO
4026aaf5a41SJohn Marino # undef S_ISLNK
4036aaf5a41SJohn Marino # undef S_ISNAM
4046aaf5a41SJohn Marino # undef S_ISMPB
4056aaf5a41SJohn Marino # undef S_ISMPC
4066aaf5a41SJohn Marino # undef S_ISNWK
4076aaf5a41SJohn Marino # undef S_ISREG
4086aaf5a41SJohn Marino # undef S_ISSOCK
4096aaf5a41SJohn Marino #endif
4106aaf5a41SJohn Marino 
4116aaf5a41SJohn Marino #ifndef S_ISBLK
4126aaf5a41SJohn Marino # ifdef S_IFBLK
4136aaf5a41SJohn Marino #  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
4146aaf5a41SJohn Marino # else
4156aaf5a41SJohn Marino #  define S_ISBLK(m) 0
4166aaf5a41SJohn Marino # endif
4176aaf5a41SJohn Marino #endif
4186aaf5a41SJohn Marino 
4196aaf5a41SJohn Marino #ifndef S_ISCHR
4206aaf5a41SJohn Marino # ifdef S_IFCHR
4216aaf5a41SJohn Marino #  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
4226aaf5a41SJohn Marino # else
4236aaf5a41SJohn Marino #  define S_ISCHR(m) 0
4246aaf5a41SJohn Marino # endif
4256aaf5a41SJohn Marino #endif
4266aaf5a41SJohn Marino 
4276aaf5a41SJohn Marino #ifndef S_ISDIR
4286aaf5a41SJohn Marino # ifdef S_IFDIR
4296aaf5a41SJohn Marino #  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
4306aaf5a41SJohn Marino # else
4316aaf5a41SJohn Marino #  define S_ISDIR(m) 0
4326aaf5a41SJohn Marino # endif
4336aaf5a41SJohn Marino #endif
4346aaf5a41SJohn Marino 
4356aaf5a41SJohn Marino #ifndef S_ISDOOR /* Solaris 2.5 and up */
4366aaf5a41SJohn Marino # define S_ISDOOR(m) 0
4376aaf5a41SJohn Marino #endif
4386aaf5a41SJohn Marino 
4396aaf5a41SJohn Marino #ifndef S_ISFIFO
4406aaf5a41SJohn Marino # ifdef S_IFIFO
4416aaf5a41SJohn Marino #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
4426aaf5a41SJohn Marino # else
4436aaf5a41SJohn Marino #  define S_ISFIFO(m) 0
4446aaf5a41SJohn Marino # endif
4456aaf5a41SJohn Marino #endif
4466aaf5a41SJohn Marino 
4476aaf5a41SJohn Marino #ifndef S_ISLNK
4486aaf5a41SJohn Marino # ifdef S_IFLNK
4496aaf5a41SJohn Marino #  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
4506aaf5a41SJohn Marino # else
4516aaf5a41SJohn Marino #  define S_ISLNK(m) 0
4526aaf5a41SJohn Marino # endif
4536aaf5a41SJohn Marino #endif
4546aaf5a41SJohn Marino 
4556aaf5a41SJohn Marino #ifndef S_ISMPB /* V7 */
4566aaf5a41SJohn Marino # ifdef S_IFMPB
4576aaf5a41SJohn Marino #  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
4586aaf5a41SJohn Marino #  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
4596aaf5a41SJohn Marino # else
4606aaf5a41SJohn Marino #  define S_ISMPB(m) 0
4616aaf5a41SJohn Marino #  define S_ISMPC(m) 0
4626aaf5a41SJohn Marino # endif
4636aaf5a41SJohn Marino #endif
4646aaf5a41SJohn Marino 
465*51ddd709SJohn Marino #ifndef S_ISMPX /* AIX */
466*51ddd709SJohn Marino # define S_ISMPX(m) 0
467*51ddd709SJohn Marino #endif
468*51ddd709SJohn Marino 
4696aaf5a41SJohn Marino #ifndef S_ISNAM /* Xenix */
4706aaf5a41SJohn Marino # ifdef S_IFNAM
4716aaf5a41SJohn Marino #  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
4726aaf5a41SJohn Marino # else
4736aaf5a41SJohn Marino #  define S_ISNAM(m) 0
4746aaf5a41SJohn Marino # endif
4756aaf5a41SJohn Marino #endif
4766aaf5a41SJohn Marino 
4776aaf5a41SJohn Marino #ifndef S_ISNWK /* HP/UX */
4786aaf5a41SJohn Marino # ifdef S_IFNWK
4796aaf5a41SJohn Marino #  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
4806aaf5a41SJohn Marino # else
4816aaf5a41SJohn Marino #  define S_ISNWK(m) 0
4826aaf5a41SJohn Marino # endif
4836aaf5a41SJohn Marino #endif
4846aaf5a41SJohn Marino 
4856aaf5a41SJohn Marino #ifndef S_ISPORT /* Solaris 10 and up */
4866aaf5a41SJohn Marino # define S_ISPORT(m) 0
4876aaf5a41SJohn Marino #endif
4886aaf5a41SJohn Marino 
4896aaf5a41SJohn Marino #ifndef S_ISREG
4906aaf5a41SJohn Marino # ifdef S_IFREG
4916aaf5a41SJohn Marino #  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
4926aaf5a41SJohn Marino # else
4936aaf5a41SJohn Marino #  define S_ISREG(m) 0
4946aaf5a41SJohn Marino # endif
4956aaf5a41SJohn Marino #endif
4966aaf5a41SJohn Marino 
4976aaf5a41SJohn Marino #ifndef S_ISSOCK
4986aaf5a41SJohn Marino # ifdef S_IFSOCK
4996aaf5a41SJohn Marino #  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
5006aaf5a41SJohn Marino # else
5016aaf5a41SJohn Marino #  define S_ISSOCK(m) 0
5026aaf5a41SJohn Marino # endif
5036aaf5a41SJohn Marino #endif
5046aaf5a41SJohn Marino 
5056aaf5a41SJohn Marino 
5066aaf5a41SJohn Marino #ifndef S_TYPEISMQ
5076aaf5a41SJohn Marino # define S_TYPEISMQ(p) 0
5086aaf5a41SJohn Marino #endif
5096aaf5a41SJohn Marino 
5106aaf5a41SJohn Marino #ifndef S_TYPEISTMO
5116aaf5a41SJohn Marino # define S_TYPEISTMO(p) 0
5126aaf5a41SJohn Marino #endif
5136aaf5a41SJohn Marino 
5146aaf5a41SJohn Marino 
5156aaf5a41SJohn Marino #ifndef S_TYPEISSEM
5166aaf5a41SJohn Marino # ifdef S_INSEM
5176aaf5a41SJohn Marino #  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
5186aaf5a41SJohn Marino # else
5196aaf5a41SJohn Marino #  define S_TYPEISSEM(p) 0
5206aaf5a41SJohn Marino # endif
5216aaf5a41SJohn Marino #endif
5226aaf5a41SJohn Marino 
5236aaf5a41SJohn Marino #ifndef S_TYPEISSHM
5246aaf5a41SJohn Marino # ifdef S_INSHD
5256aaf5a41SJohn Marino #  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
5266aaf5a41SJohn Marino # else
5276aaf5a41SJohn Marino #  define S_TYPEISSHM(p) 0
5286aaf5a41SJohn Marino # endif
5296aaf5a41SJohn Marino #endif
5306aaf5a41SJohn Marino 
5316aaf5a41SJohn Marino /* high performance ("contiguous data") */
5326aaf5a41SJohn Marino #ifndef S_ISCTG
5336aaf5a41SJohn Marino # define S_ISCTG(p) 0
5346aaf5a41SJohn Marino #endif
5356aaf5a41SJohn Marino 
5366aaf5a41SJohn Marino /* Cray DMF (data migration facility): off line, with data  */
5376aaf5a41SJohn Marino #ifndef S_ISOFD
5386aaf5a41SJohn Marino # define S_ISOFD(p) 0
5396aaf5a41SJohn Marino #endif
5406aaf5a41SJohn Marino 
5416aaf5a41SJohn Marino /* Cray DMF (data migration facility): off line, with no data  */
5426aaf5a41SJohn Marino #ifndef S_ISOFL
5436aaf5a41SJohn Marino # define S_ISOFL(p) 0
5446aaf5a41SJohn Marino #endif
5456aaf5a41SJohn Marino 
5466aaf5a41SJohn Marino /* 4.4BSD whiteout */
5476aaf5a41SJohn Marino #ifndef S_ISWHT
5486aaf5a41SJohn Marino # define S_ISWHT(m) 0
5496aaf5a41SJohn Marino #endif
5506aaf5a41SJohn Marino 
5516aaf5a41SJohn Marino /* If any of the following are undefined,
5526aaf5a41SJohn Marino    define them to their de facto standard values.  */
5536aaf5a41SJohn Marino #if !S_ISUID
5546aaf5a41SJohn Marino # define S_ISUID 04000
5556aaf5a41SJohn Marino #endif
5566aaf5a41SJohn Marino #if !S_ISGID
5576aaf5a41SJohn Marino # define S_ISGID 02000
5586aaf5a41SJohn Marino #endif
5596aaf5a41SJohn Marino 
5606aaf5a41SJohn Marino /* S_ISVTX is a common extension to POSIX.  */
5616aaf5a41SJohn Marino #ifndef S_ISVTX
5626aaf5a41SJohn Marino # define S_ISVTX 01000
5636aaf5a41SJohn Marino #endif
5646aaf5a41SJohn Marino 
5656aaf5a41SJohn Marino #if !S_IRUSR && S_IREAD
5666aaf5a41SJohn Marino # define S_IRUSR S_IREAD
5676aaf5a41SJohn Marino #endif
5686aaf5a41SJohn Marino #if !S_IRUSR
5696aaf5a41SJohn Marino # define S_IRUSR 00400
5706aaf5a41SJohn Marino #endif
5716aaf5a41SJohn Marino #if !S_IRGRP
5726aaf5a41SJohn Marino # define S_IRGRP (S_IRUSR >> 3)
5736aaf5a41SJohn Marino #endif
5746aaf5a41SJohn Marino #if !S_IROTH
5756aaf5a41SJohn Marino # define S_IROTH (S_IRUSR >> 6)
5766aaf5a41SJohn Marino #endif
5776aaf5a41SJohn Marino 
5786aaf5a41SJohn Marino #if !S_IWUSR && S_IWRITE
5796aaf5a41SJohn Marino # define S_IWUSR S_IWRITE
5806aaf5a41SJohn Marino #endif
5816aaf5a41SJohn Marino #if !S_IWUSR
5826aaf5a41SJohn Marino # define S_IWUSR 00200
5836aaf5a41SJohn Marino #endif
5846aaf5a41SJohn Marino #if !S_IWGRP
5856aaf5a41SJohn Marino # define S_IWGRP (S_IWUSR >> 3)
5866aaf5a41SJohn Marino #endif
5876aaf5a41SJohn Marino #if !S_IWOTH
5886aaf5a41SJohn Marino # define S_IWOTH (S_IWUSR >> 6)
5896aaf5a41SJohn Marino #endif
5906aaf5a41SJohn Marino 
5916aaf5a41SJohn Marino #if !S_IXUSR && S_IEXEC
5926aaf5a41SJohn Marino # define S_IXUSR S_IEXEC
5936aaf5a41SJohn Marino #endif
5946aaf5a41SJohn Marino #if !S_IXUSR
5956aaf5a41SJohn Marino # define S_IXUSR 00100
5966aaf5a41SJohn Marino #endif
5976aaf5a41SJohn Marino #if !S_IXGRP
5986aaf5a41SJohn Marino # define S_IXGRP (S_IXUSR >> 3)
5996aaf5a41SJohn Marino #endif
6006aaf5a41SJohn Marino #if !S_IXOTH
6016aaf5a41SJohn Marino # define S_IXOTH (S_IXUSR >> 6)
6026aaf5a41SJohn Marino #endif
6036aaf5a41SJohn Marino 
6046aaf5a41SJohn Marino #if !S_IRWXU
6056aaf5a41SJohn Marino # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
6066aaf5a41SJohn Marino #endif
6076aaf5a41SJohn Marino #if !S_IRWXG
6086aaf5a41SJohn Marino # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
6096aaf5a41SJohn Marino #endif
6106aaf5a41SJohn Marino #if !S_IRWXO
6116aaf5a41SJohn Marino # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
6126aaf5a41SJohn Marino #endif
6136aaf5a41SJohn Marino 
6146aaf5a41SJohn Marino /* S_IXUGO is a common extension to POSIX.  */
6156aaf5a41SJohn Marino #if !S_IXUGO
6166aaf5a41SJohn Marino # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
6176aaf5a41SJohn Marino #endif
6186aaf5a41SJohn Marino 
6196aaf5a41SJohn Marino #ifndef S_IRWXUGO
6206aaf5a41SJohn Marino # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
6216aaf5a41SJohn Marino #endif
6226aaf5a41SJohn Marino 
6236aaf5a41SJohn Marino /* Macros for futimens and utimensat.  */
6246aaf5a41SJohn Marino #ifndef UTIME_NOW
6256aaf5a41SJohn Marino # define UTIME_NOW (-1)
6266aaf5a41SJohn Marino # define UTIME_OMIT (-2)
6276aaf5a41SJohn Marino #endif
6286aaf5a41SJohn Marino 
6296aaf5a41SJohn Marino 
6306aaf5a41SJohn Marino #if 0
6316aaf5a41SJohn Marino # if !1
6326aaf5a41SJohn Marino _GL_FUNCDECL_SYS (fchmodat, int,
6336aaf5a41SJohn Marino                   (int fd, char const *file, mode_t mode, int flag)
6346aaf5a41SJohn Marino                   _GL_ARG_NONNULL ((2)));
6356aaf5a41SJohn Marino # endif
6366aaf5a41SJohn Marino _GL_CXXALIAS_SYS (fchmodat, int,
6376aaf5a41SJohn Marino                   (int fd, char const *file, mode_t mode, int flag));
6386aaf5a41SJohn Marino _GL_CXXALIASWARN (fchmodat);
6396aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
6406aaf5a41SJohn Marino # undef fchmodat
6416aaf5a41SJohn Marino # if HAVE_RAW_DECL_FCHMODAT
6426aaf5a41SJohn Marino _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
6436aaf5a41SJohn Marino                  "use gnulib module openat for portability");
6446aaf5a41SJohn Marino # endif
6456aaf5a41SJohn Marino #endif
6466aaf5a41SJohn Marino 
6476aaf5a41SJohn Marino 
6486aaf5a41SJohn Marino #if 1
6496aaf5a41SJohn Marino # if 0
6506aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
6516aaf5a41SJohn Marino #   undef fstat
6526aaf5a41SJohn Marino #   define fstat rpl_fstat
6536aaf5a41SJohn Marino #  endif
6546aaf5a41SJohn Marino _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
6556aaf5a41SJohn Marino _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
6566aaf5a41SJohn Marino # else
6576aaf5a41SJohn Marino _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
6586aaf5a41SJohn Marino # endif
6596aaf5a41SJohn Marino _GL_CXXALIASWARN (fstat);
6606aaf5a41SJohn Marino #elif 0
6616aaf5a41SJohn Marino /* Above, we define stat to _stati64.  */
6626aaf5a41SJohn Marino # define fstat _fstati64
6636aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
6646aaf5a41SJohn Marino # undef fstat
6656aaf5a41SJohn Marino # if HAVE_RAW_DECL_FSTAT
6666aaf5a41SJohn Marino _GL_WARN_ON_USE (fstat, "fstat has portability problems - "
6676aaf5a41SJohn Marino                  "use gnulib module fstat for portability");
6686aaf5a41SJohn Marino # endif
6696aaf5a41SJohn Marino #endif
6706aaf5a41SJohn Marino 
6716aaf5a41SJohn Marino 
6726aaf5a41SJohn Marino #if 1
6736aaf5a41SJohn Marino # if 0
6746aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
6756aaf5a41SJohn Marino #   undef fstatat
6766aaf5a41SJohn Marino #   define fstatat rpl_fstatat
6776aaf5a41SJohn Marino #  endif
6786aaf5a41SJohn Marino _GL_FUNCDECL_RPL (fstatat, int,
6796aaf5a41SJohn Marino                   (int fd, char const *name, struct stat *st, int flags)
6806aaf5a41SJohn Marino                   _GL_ARG_NONNULL ((2, 3)));
6816aaf5a41SJohn Marino _GL_CXXALIAS_RPL (fstatat, int,
6826aaf5a41SJohn Marino                   (int fd, char const *name, struct stat *st, int flags));
6836aaf5a41SJohn Marino # else
6846aaf5a41SJohn Marino #  if !1
6856aaf5a41SJohn Marino _GL_FUNCDECL_SYS (fstatat, int,
6866aaf5a41SJohn Marino                   (int fd, char const *name, struct stat *st, int flags)
6876aaf5a41SJohn Marino                   _GL_ARG_NONNULL ((2, 3)));
6886aaf5a41SJohn Marino #  endif
6896aaf5a41SJohn Marino _GL_CXXALIAS_SYS (fstatat, int,
6906aaf5a41SJohn Marino                   (int fd, char const *name, struct stat *st, int flags));
6916aaf5a41SJohn Marino # endif
6926aaf5a41SJohn Marino _GL_CXXALIASWARN (fstatat);
6936aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
6946aaf5a41SJohn Marino # undef fstatat
6956aaf5a41SJohn Marino # if HAVE_RAW_DECL_FSTATAT
6966aaf5a41SJohn Marino _GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
6976aaf5a41SJohn Marino                  "use gnulib module openat for portability");
6986aaf5a41SJohn Marino # endif
6996aaf5a41SJohn Marino #endif
7006aaf5a41SJohn Marino 
7016aaf5a41SJohn Marino 
7026aaf5a41SJohn Marino #if 0
7036aaf5a41SJohn Marino /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
7046aaf5a41SJohn Marino    implementation relies on futimesat, which on Solaris 10 makes an invocation
7056aaf5a41SJohn Marino    to futimens that is meant to invoke the libc's futimens(), not gnulib's
7066aaf5a41SJohn Marino    futimens().  */
7076aaf5a41SJohn Marino # if 0 || (!1 && defined __sun)
7086aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
7096aaf5a41SJohn Marino #   undef futimens
7106aaf5a41SJohn Marino #   define futimens rpl_futimens
7116aaf5a41SJohn Marino #  endif
7126aaf5a41SJohn Marino _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
7136aaf5a41SJohn Marino _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
7146aaf5a41SJohn Marino # else
7156aaf5a41SJohn Marino #  if !1
7166aaf5a41SJohn Marino _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
7176aaf5a41SJohn Marino #  endif
7186aaf5a41SJohn Marino _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
7196aaf5a41SJohn Marino # endif
7206aaf5a41SJohn Marino # if 1
7216aaf5a41SJohn Marino _GL_CXXALIASWARN (futimens);
7226aaf5a41SJohn Marino # endif
7236aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
7246aaf5a41SJohn Marino # undef futimens
7256aaf5a41SJohn Marino # if HAVE_RAW_DECL_FUTIMENS
7266aaf5a41SJohn Marino _GL_WARN_ON_USE (futimens, "futimens is not portable - "
7276aaf5a41SJohn Marino                  "use gnulib module futimens for portability");
7286aaf5a41SJohn Marino # endif
7296aaf5a41SJohn Marino #endif
7306aaf5a41SJohn Marino 
7316aaf5a41SJohn Marino 
7326aaf5a41SJohn Marino #if 0
7336aaf5a41SJohn Marino /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
7346aaf5a41SJohn Marino    denotes a symbolic link.  */
7356aaf5a41SJohn Marino # if !1
7366aaf5a41SJohn Marino /* The lchmod replacement follows symbolic links.  Callers should take
7376aaf5a41SJohn Marino    this into account; lchmod should be applied only to arguments that
7386aaf5a41SJohn Marino    are known to not be symbolic links.  On hosts that lack lchmod,
7396aaf5a41SJohn Marino    this can lead to race conditions between the check and the
7406aaf5a41SJohn Marino    invocation of lchmod, but we know of no workarounds that are
7416aaf5a41SJohn Marino    reliable in general.  You might try requesting support for lchmod
7426aaf5a41SJohn Marino    from your operating system supplier.  */
7436aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
7446aaf5a41SJohn Marino #   define lchmod chmod
7456aaf5a41SJohn Marino #  endif
7466aaf5a41SJohn Marino /* Need to cast, because on mingw, the second parameter of chmod is
7476aaf5a41SJohn Marino                                                 int mode.  */
7486aaf5a41SJohn Marino _GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int,
7496aaf5a41SJohn Marino                          (const char *filename, mode_t mode));
7506aaf5a41SJohn Marino # else
7516aaf5a41SJohn Marino #  if 0 /* assume already declared */
7526aaf5a41SJohn Marino _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
7536aaf5a41SJohn Marino                                _GL_ARG_NONNULL ((1)));
7546aaf5a41SJohn Marino #  endif
7556aaf5a41SJohn Marino _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
7566aaf5a41SJohn Marino # endif
7576aaf5a41SJohn Marino # if 1
7586aaf5a41SJohn Marino _GL_CXXALIASWARN (lchmod);
7596aaf5a41SJohn Marino # endif
7606aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
7616aaf5a41SJohn Marino # undef lchmod
7626aaf5a41SJohn Marino # if HAVE_RAW_DECL_LCHMOD
7636aaf5a41SJohn Marino _GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
7646aaf5a41SJohn Marino                  "use gnulib module lchmod for portability");
7656aaf5a41SJohn Marino # endif
7666aaf5a41SJohn Marino #endif
7676aaf5a41SJohn Marino 
7686aaf5a41SJohn Marino 
7696aaf5a41SJohn Marino #if 1
7706aaf5a41SJohn Marino # if ! 1
7716aaf5a41SJohn Marino /* mingw does not support symlinks, therefore it does not have lstat.  But
7726aaf5a41SJohn Marino    without links, stat does just fine.  */
7736aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
7746aaf5a41SJohn Marino #   define lstat stat
7756aaf5a41SJohn Marino #  endif
7766aaf5a41SJohn Marino _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
7776aaf5a41SJohn Marino # elif 0
7786aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
7796aaf5a41SJohn Marino #   undef lstat
7806aaf5a41SJohn Marino #   define lstat rpl_lstat
7816aaf5a41SJohn Marino #  endif
7826aaf5a41SJohn Marino _GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
7836aaf5a41SJohn Marino                               _GL_ARG_NONNULL ((1, 2)));
7846aaf5a41SJohn Marino _GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
7856aaf5a41SJohn Marino # else
7866aaf5a41SJohn Marino _GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
7876aaf5a41SJohn Marino # endif
7886aaf5a41SJohn Marino # if 1
7896aaf5a41SJohn Marino _GL_CXXALIASWARN (lstat);
7906aaf5a41SJohn Marino # endif
7916aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
7926aaf5a41SJohn Marino # undef lstat
7936aaf5a41SJohn Marino # if HAVE_RAW_DECL_LSTAT
7946aaf5a41SJohn Marino _GL_WARN_ON_USE (lstat, "lstat is unportable - "
7956aaf5a41SJohn Marino                  "use gnulib module lstat for portability");
7966aaf5a41SJohn Marino # endif
7976aaf5a41SJohn Marino #endif
7986aaf5a41SJohn Marino 
7996aaf5a41SJohn Marino 
8006aaf5a41SJohn Marino #if 0
8016aaf5a41SJohn Marino # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
8026aaf5a41SJohn Marino #  undef mkdir
8036aaf5a41SJohn Marino #  define mkdir rpl_mkdir
8046aaf5a41SJohn Marino # endif
8056aaf5a41SJohn Marino _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
8066aaf5a41SJohn Marino                               _GL_ARG_NONNULL ((1)));
8076aaf5a41SJohn Marino _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
8086aaf5a41SJohn Marino #else
8096aaf5a41SJohn Marino /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
8106aaf5a41SJohn Marino    Additionally, it declares _mkdir (and depending on compile flags, an
8116aaf5a41SJohn Marino    alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
8126aaf5a41SJohn Marino    which are included above.  */
8136aaf5a41SJohn Marino # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
8146aaf5a41SJohn Marino 
8156aaf5a41SJohn Marino #  if !GNULIB_defined_rpl_mkdir
816*51ddd709SJohn Marino static int
rpl_mkdir(char const * name,mode_t mode)8176aaf5a41SJohn Marino rpl_mkdir (char const *name, mode_t mode)
8186aaf5a41SJohn Marino {
8196aaf5a41SJohn Marino   return _mkdir (name);
8206aaf5a41SJohn Marino }
8216aaf5a41SJohn Marino #   define GNULIB_defined_rpl_mkdir 1
8226aaf5a41SJohn Marino #  endif
8236aaf5a41SJohn Marino 
8246aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
8256aaf5a41SJohn Marino #   define mkdir rpl_mkdir
8266aaf5a41SJohn Marino #  endif
8276aaf5a41SJohn Marino _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
8286aaf5a41SJohn Marino # else
8296aaf5a41SJohn Marino _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
8306aaf5a41SJohn Marino # endif
8316aaf5a41SJohn Marino #endif
8326aaf5a41SJohn Marino _GL_CXXALIASWARN (mkdir);
8336aaf5a41SJohn Marino 
8346aaf5a41SJohn Marino 
8356aaf5a41SJohn Marino #if 0
8366aaf5a41SJohn Marino # if !1
8376aaf5a41SJohn Marino _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
8386aaf5a41SJohn Marino                                 _GL_ARG_NONNULL ((2)));
8396aaf5a41SJohn Marino # endif
8406aaf5a41SJohn Marino _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
8416aaf5a41SJohn Marino _GL_CXXALIASWARN (mkdirat);
8426aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
8436aaf5a41SJohn Marino # undef mkdirat
8446aaf5a41SJohn Marino # if HAVE_RAW_DECL_MKDIRAT
8456aaf5a41SJohn Marino _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
8466aaf5a41SJohn Marino                  "use gnulib module openat for portability");
8476aaf5a41SJohn Marino # endif
8486aaf5a41SJohn Marino #endif
8496aaf5a41SJohn Marino 
8506aaf5a41SJohn Marino 
8516aaf5a41SJohn Marino #if 0
8526aaf5a41SJohn Marino # if 0
8536aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
8546aaf5a41SJohn Marino #   undef mkfifo
8556aaf5a41SJohn Marino #   define mkfifo rpl_mkfifo
8566aaf5a41SJohn Marino #  endif
8576aaf5a41SJohn Marino _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
8586aaf5a41SJohn Marino                                _GL_ARG_NONNULL ((1)));
8596aaf5a41SJohn Marino _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
8606aaf5a41SJohn Marino # else
8616aaf5a41SJohn Marino #  if !1
8626aaf5a41SJohn Marino _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
8636aaf5a41SJohn Marino                                _GL_ARG_NONNULL ((1)));
8646aaf5a41SJohn Marino #  endif
8656aaf5a41SJohn Marino _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
8666aaf5a41SJohn Marino # endif
8676aaf5a41SJohn Marino _GL_CXXALIASWARN (mkfifo);
8686aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
8696aaf5a41SJohn Marino # undef mkfifo
8706aaf5a41SJohn Marino # if HAVE_RAW_DECL_MKFIFO
8716aaf5a41SJohn Marino _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
8726aaf5a41SJohn Marino                  "use gnulib module mkfifo for portability");
8736aaf5a41SJohn Marino # endif
8746aaf5a41SJohn Marino #endif
8756aaf5a41SJohn Marino 
8766aaf5a41SJohn Marino 
8776aaf5a41SJohn Marino #if 0
8786aaf5a41SJohn Marino # if !1
8796aaf5a41SJohn Marino _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
8806aaf5a41SJohn Marino                                  _GL_ARG_NONNULL ((2)));
8816aaf5a41SJohn Marino # endif
8826aaf5a41SJohn Marino _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
8836aaf5a41SJohn Marino _GL_CXXALIASWARN (mkfifoat);
8846aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
8856aaf5a41SJohn Marino # undef mkfifoat
8866aaf5a41SJohn Marino # if HAVE_RAW_DECL_MKFIFOAT
8876aaf5a41SJohn Marino _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
8886aaf5a41SJohn Marino                  "use gnulib module mkfifoat for portability");
8896aaf5a41SJohn Marino # endif
8906aaf5a41SJohn Marino #endif
8916aaf5a41SJohn Marino 
8926aaf5a41SJohn Marino 
8936aaf5a41SJohn Marino #if 0
8946aaf5a41SJohn Marino # if 0
8956aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
8966aaf5a41SJohn Marino #   undef mknod
8976aaf5a41SJohn Marino #   define mknod rpl_mknod
8986aaf5a41SJohn Marino #  endif
8996aaf5a41SJohn Marino _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
9006aaf5a41SJohn Marino                               _GL_ARG_NONNULL ((1)));
9016aaf5a41SJohn Marino _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
9026aaf5a41SJohn Marino # else
9036aaf5a41SJohn Marino #  if !1
9046aaf5a41SJohn Marino _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
9056aaf5a41SJohn Marino                               _GL_ARG_NONNULL ((1)));
9066aaf5a41SJohn Marino #  endif
9076aaf5a41SJohn Marino /* Need to cast, because on OSF/1 5.1, the third parameter is '...'.  */
9086aaf5a41SJohn Marino _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
9096aaf5a41SJohn Marino # endif
9106aaf5a41SJohn Marino _GL_CXXALIASWARN (mknod);
9116aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
9126aaf5a41SJohn Marino # undef mknod
9136aaf5a41SJohn Marino # if HAVE_RAW_DECL_MKNOD
9146aaf5a41SJohn Marino _GL_WARN_ON_USE (mknod, "mknod is not portable - "
9156aaf5a41SJohn Marino                  "use gnulib module mknod for portability");
9166aaf5a41SJohn Marino # endif
9176aaf5a41SJohn Marino #endif
9186aaf5a41SJohn Marino 
9196aaf5a41SJohn Marino 
9206aaf5a41SJohn Marino #if 0
9216aaf5a41SJohn Marino # if !1
9226aaf5a41SJohn Marino _GL_FUNCDECL_SYS (mknodat, int,
9236aaf5a41SJohn Marino                   (int fd, char const *file, mode_t mode, dev_t dev)
9246aaf5a41SJohn Marino                   _GL_ARG_NONNULL ((2)));
9256aaf5a41SJohn Marino # endif
9266aaf5a41SJohn Marino _GL_CXXALIAS_SYS (mknodat, int,
9276aaf5a41SJohn Marino                   (int fd, char const *file, mode_t mode, dev_t dev));
9286aaf5a41SJohn Marino _GL_CXXALIASWARN (mknodat);
9296aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
9306aaf5a41SJohn Marino # undef mknodat
9316aaf5a41SJohn Marino # if HAVE_RAW_DECL_MKNODAT
9326aaf5a41SJohn Marino _GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
9336aaf5a41SJohn Marino                  "use gnulib module mkfifoat for portability");
9346aaf5a41SJohn Marino # endif
9356aaf5a41SJohn Marino #endif
9366aaf5a41SJohn Marino 
9376aaf5a41SJohn Marino 
9386aaf5a41SJohn Marino #if 1
9396aaf5a41SJohn Marino # if 0
9406aaf5a41SJohn Marino /* We can't use the object-like #define stat rpl_stat, because of
9416aaf5a41SJohn Marino    struct stat.  This means that rpl_stat will not be used if the user
9426aaf5a41SJohn Marino    does (stat)(a,b).  Oh well.  */
9436aaf5a41SJohn Marino #  if defined _AIX && defined stat && defined _LARGE_FILES
9446aaf5a41SJohn Marino     /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
9456aaf5a41SJohn Marino        so we have to replace stat64() instead of stat(). */
9466aaf5a41SJohn Marino #   undef stat64
9476aaf5a41SJohn Marino #   define stat64(name, st) rpl_stat (name, st)
9486aaf5a41SJohn Marino #  elif 0
9496aaf5a41SJohn Marino     /* Above, we define stat to _stati64.  */
9506aaf5a41SJohn Marino #   if defined __MINGW32__ && defined _stati64
9516aaf5a41SJohn Marino #    ifndef _USE_32BIT_TIME_T
9526aaf5a41SJohn Marino       /* The system headers define _stati64 to _stat64.  */
9536aaf5a41SJohn Marino #     undef _stat64
9546aaf5a41SJohn Marino #     define _stat64(name, st) rpl_stat (name, st)
9556aaf5a41SJohn Marino #    endif
9566aaf5a41SJohn Marino #   elif defined _MSC_VER && defined _stati64
9576aaf5a41SJohn Marino #    ifdef _USE_32BIT_TIME_T
9586aaf5a41SJohn Marino       /* The system headers define _stati64 to _stat32i64.  */
9596aaf5a41SJohn Marino #     undef _stat32i64
9606aaf5a41SJohn Marino #     define _stat32i64(name, st) rpl_stat (name, st)
9616aaf5a41SJohn Marino #    else
9626aaf5a41SJohn Marino       /* The system headers define _stati64 to _stat64.  */
9636aaf5a41SJohn Marino #     undef _stat64
9646aaf5a41SJohn Marino #     define _stat64(name, st) rpl_stat (name, st)
9656aaf5a41SJohn Marino #    endif
9666aaf5a41SJohn Marino #   else
9676aaf5a41SJohn Marino #    undef _stati64
9686aaf5a41SJohn Marino #    define _stati64(name, st) rpl_stat (name, st)
9696aaf5a41SJohn Marino #   endif
9706aaf5a41SJohn Marino #  elif defined __MINGW32__ && defined stat
9716aaf5a41SJohn Marino #   ifdef _USE_32BIT_TIME_T
9726aaf5a41SJohn Marino      /* The system headers define stat to _stat32i64.  */
9736aaf5a41SJohn Marino #    undef _stat32i64
9746aaf5a41SJohn Marino #    define _stat32i64(name, st) rpl_stat (name, st)
9756aaf5a41SJohn Marino #   else
9766aaf5a41SJohn Marino      /* The system headers define stat to _stat64.  */
9776aaf5a41SJohn Marino #    undef _stat64
9786aaf5a41SJohn Marino #    define _stat64(name, st) rpl_stat (name, st)
9796aaf5a41SJohn Marino #   endif
9806aaf5a41SJohn Marino #  elif defined _MSC_VER && defined stat
9816aaf5a41SJohn Marino #   ifdef _USE_32BIT_TIME_T
9826aaf5a41SJohn Marino      /* The system headers define stat to _stat32.  */
9836aaf5a41SJohn Marino #    undef _stat32
9846aaf5a41SJohn Marino #    define _stat32(name, st) rpl_stat (name, st)
9856aaf5a41SJohn Marino #   else
9866aaf5a41SJohn Marino      /* The system headers define stat to _stat64i32.  */
9876aaf5a41SJohn Marino #    undef _stat64i32
9886aaf5a41SJohn Marino #    define _stat64i32(name, st) rpl_stat (name, st)
9896aaf5a41SJohn Marino #   endif
9906aaf5a41SJohn Marino #  else /* !(_AIX ||__MINGW32__ ||  _MSC_VER) */
9916aaf5a41SJohn Marino #   undef stat
9926aaf5a41SJohn Marino #   define stat(name, st) rpl_stat (name, st)
9936aaf5a41SJohn Marino #  endif /* !_LARGE_FILES */
9946aaf5a41SJohn Marino _GL_EXTERN_C int stat (const char *name, struct stat *buf)
9956aaf5a41SJohn Marino                       _GL_ARG_NONNULL ((1, 2));
9966aaf5a41SJohn Marino # endif
9976aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
9986aaf5a41SJohn Marino # undef stat
9996aaf5a41SJohn Marino # if HAVE_RAW_DECL_STAT
10006aaf5a41SJohn Marino _GL_WARN_ON_USE (stat, "stat is unportable - "
10016aaf5a41SJohn Marino                  "use gnulib module stat for portability");
10026aaf5a41SJohn Marino # endif
10036aaf5a41SJohn Marino #endif
10046aaf5a41SJohn Marino 
10056aaf5a41SJohn Marino 
10066aaf5a41SJohn Marino #if 0
10076aaf5a41SJohn Marino /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
10086aaf5a41SJohn Marino    implementation relies on futimesat, which on Solaris 10 makes an invocation
10096aaf5a41SJohn Marino    to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
10106aaf5a41SJohn Marino    utimensat().  */
10116aaf5a41SJohn Marino # if 0 || (!1 && defined __sun)
10126aaf5a41SJohn Marino #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
10136aaf5a41SJohn Marino #   undef utimensat
10146aaf5a41SJohn Marino #   define utimensat rpl_utimensat
10156aaf5a41SJohn Marino #  endif
10166aaf5a41SJohn Marino _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
10176aaf5a41SJohn Marino                                    struct timespec const times[2], int flag)
10186aaf5a41SJohn Marino                                   _GL_ARG_NONNULL ((2)));
10196aaf5a41SJohn Marino _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
10206aaf5a41SJohn Marino                                    struct timespec const times[2], int flag));
10216aaf5a41SJohn Marino # else
10226aaf5a41SJohn Marino #  if !1
10236aaf5a41SJohn Marino _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
10246aaf5a41SJohn Marino                                    struct timespec const times[2], int flag)
10256aaf5a41SJohn Marino                                   _GL_ARG_NONNULL ((2)));
10266aaf5a41SJohn Marino #  endif
10276aaf5a41SJohn Marino _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
10286aaf5a41SJohn Marino                                    struct timespec const times[2], int flag));
10296aaf5a41SJohn Marino # endif
10306aaf5a41SJohn Marino # if 1
10316aaf5a41SJohn Marino _GL_CXXALIASWARN (utimensat);
10326aaf5a41SJohn Marino # endif
10336aaf5a41SJohn Marino #elif defined GNULIB_POSIXCHECK
10346aaf5a41SJohn Marino # undef utimensat
10356aaf5a41SJohn Marino # if HAVE_RAW_DECL_UTIMENSAT
10366aaf5a41SJohn Marino _GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
10376aaf5a41SJohn Marino                  "use gnulib module utimensat for portability");
10386aaf5a41SJohn Marino # endif
10396aaf5a41SJohn Marino #endif
10406aaf5a41SJohn Marino 
10416aaf5a41SJohn Marino 
10426aaf5a41SJohn Marino #endif /* _GL_SYS_STAT_H */
10436aaf5a41SJohn Marino #endif /* _GL_SYS_STAT_H */
10446aaf5a41SJohn Marino #endif
1045