105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A more-standard <time.h>.
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2007-2012 Free Software Foundation, Inc.
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software; you can redistribute it and/or modify
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation; either version 3, or (at your option)
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   any later version.
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#pragma GCC system_header
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Don't get in the way of glibc when it includes time.h merely to
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declare a few standard symbols, rather than to declare all the
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   symbols.  Also, Solaris 8 <time.h> eventually includes itself
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   recursively; if that is happening, just include the system <time.h>
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   without adding our own declarations.  */
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if (defined __need_time_t || defined __need_clock_t \
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     || defined __need_timespec \
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     || defined _GL_TIME_H)
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include_next <time.h>
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_TIME_H
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include_next <time.h>
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* NetBSD 5.0 mis-defines NULL.  */
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <stddef.h>
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_CXXDEFS_H
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_CXXDEFS_H
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The three most frequent use cases of these macros are:
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a substitute for a function that is missing on some
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     platforms, but is declared and works fine on the platforms on which
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     it exists:
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if !@HAVE_FOO@
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_SYS (foo, ...);
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a replacement for a function that exists on all platforms,
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but is broken/insufficient and needs to be replaced on some platforms:
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if @REPLACE_FOO@
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   undef foo
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   define foo rpl_foo
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_RPL (foo, ...);
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_RPL (foo, ...);
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # else
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a replacement for a function that exists on some platforms
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but is broken/insufficient and needs to be replaced on some of them and
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     is additionally either missing or undeclared on some other platforms:
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if @REPLACE_FOO@
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   undef foo
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   define foo rpl_foo
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_RPL (foo, ...);
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_RPL (foo, ...);
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # else
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_SYS (foo, ...);
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang*/
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_EXTERN_C declaration;
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_EXTERN_C extern "C"
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_EXTERN_C extern
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a replacement function, named rpl_func, with the given prototype,
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   consisting of return type, parameters, and attributes.
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares the system function, named func, with the given prototype,
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   consisting of return type, parameters, and attributes.
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_EXTERN_C rettype func parameters_and_attributes
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_RPL (func, rettype, parameters);
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a C++ alias called GNULIB_NAMESPACE::func
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                \
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                         \
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rettype (*const func) parameters = ::rpl_func;          \
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                         \
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function rpl_func may have a slightly different
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declaration.  A cast is used to silence the "invalid conversion" error
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that would otherwise occur.  */
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                     \
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                              \
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rettype (*const func) parameters =                           \
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                              \
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS (func, rettype, parameters);
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a C++ alias called GNULIB_NAMESPACE::func
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that redirects to the system provided function func, if GNULIB_NAMESPACE
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is defined.
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* If we were to write
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       rettype (*const func) parameters = ::func;
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     better (remove an indirection through a 'static' pointer variable),
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but then the _GL_CXXALIASWARN macro below would cause a warning not only
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                     \
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                              \
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters = ::func;  \
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                              \
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function func may have a slightly different declaration.
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   A cast is used to silence the "invalid conversion" error that would
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   otherwise occur.  */
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                          \
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                   \
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters =               \
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(::func); \
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                   \
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function is picked among a set of overloaded functions,
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   namely the one with rettype2 and parameters2.  Two consecutive casts
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   are used to silence the "cannot find a match" and "invalid conversion"
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   errors that would otherwise occur.  */
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* The outer cast must be a reinterpret_cast.
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     The inner cast: When the function is defined as a set of overloaded
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     functions, it works as a static_cast<>, choosing the designated variant.
22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     When the function is defined as a single variant, it works as a
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                                \
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                                         \
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters =                                     \
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(                               \
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          (rettype2(*)parameters2)(::func));                                  \
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                                         \
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIASWARN (func);
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   causes a warning to be emitted when ::func is used but not when
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   variants.  */
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN(func) \
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN_1(func,namespace) \
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN_2 (func, namespace)
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   we enable the warning only when not optimizing.  */
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !__OPTIMIZE__
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_WARN_ON_USE (func, \
25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     "The symbol ::" #func " refers to the system function. " \
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     "Use " #namespace "::" #func " instead.")
25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     extern __typeof__ (func) func
26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_EXTERN_C int _gl_cxxalias_dummy
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN(func) \
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   causes a warning to be emitted when the given overloaded variant of ::func
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is used but not when GNULIB_NAMESPACE::func is used.  */
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        GNULIB_NAMESPACE)
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   we enable the warning only when not optimizing.  */
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !__OPTIMIZE__
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         "The symbol ::" #func " refers to the system function. " \
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         "Use " #namespace "::" #func " instead.")
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     extern __typeof__ (func) func
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_EXTERN_C int _gl_cxxalias_dummy
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_CXXDEFS_H */
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here.  */
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that the values passed as arguments n, ..., m must be non-NULL pointers.
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_ARG_NONNULL
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_ARG_NONNULL(params)
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here.  */
31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE
31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
31905436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function __attribute__ ((__warning__ (message)))
32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like _GL_WARN_ON_USE (function, "string"), except that the function is
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declared with the given prototype, consisting of return type, parameters,
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   and attributes.
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   not work in this case.  */
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE_CXX
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes \
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     __attribute__ ((__warning__ (msg)))
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_EXTERN_C declaration;
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_EXTERN_C
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern "C"
35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern
35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Or they define it with the wrong member names or define it in <sys/time.h>
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   (e.g., FreeBSD circa 1997).  Stock Mingw does not define it, but the
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   pthreads-win32 library defines it in <pthread.h>.  */
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if 0
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   include <sys/time.h>
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  elif 0
36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   include <pthread.h>
37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The pthreads-win32 <pthread.h> also defines a couple of broken macros.  */
37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef asctime_r
37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef ctime_r
37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef gmtime_r
37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef localtime_r
37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef rand_r
37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strtok_r
37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   ifdef __cplusplus
38005436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern "C" {
38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if !GNULIB_defined_struct_timespec
38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef timespec
38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define timespec rpl_timespec
38605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct timespec
38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{
38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  time_t tv_sec;
38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  long int tv_nsec;
39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang};
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define GNULIB_defined_struct_timespec 1
39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   ifdef __cplusplus
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang}
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_struct_time_t_must_be_integral
40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   time_t to be an integer type, even though C99 permits floating
40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   point.  We don't know of any implementation that uses floating
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   point, and it is much easier to write code that doesn't have to
40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   worry about that corner case, so we force the issue.  */
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct __time_t_must_be_integral {
40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  unsigned int __floating_time_t_unsupported : (time_t) 1;
40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang};
41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define GNULIB_defined_struct_time_t_must_be_integral 1
41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   return -1 and store the remaining time into RMTP.  See
41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if GNULIB_PORTCHECK
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define nanosleep rpl_nanosleep
42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (nanosleep, int,
42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (struct timespec const *__rqtp, struct timespec *__rmtp)
42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1)));
42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (nanosleep, int,
42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (struct timespec const *__rqtp, struct timespec *__rmtp));
42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if ! 1
42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (nanosleep, int,
42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (struct timespec const *__rqtp, struct timespec *__rmtp)
43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1)));
43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (nanosleep, int,
43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (struct timespec const *__rqtp, struct timespec *__rmtp));
43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (nanosleep);
43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the 'time_t' representation of TP and normalize TP.  */
43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if GNULIB_PORTCHECK
44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define mktime rpl_mktime
44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mktime);
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   <http://www.opengroup.org/susv3xsh/localtime_r.html> and
45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if GNULIB_PORTCHECK
45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef localtime_r
45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define localtime_r rpl_localtime_r
46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                             struct tm *restrict __result)
46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                            _GL_ARG_NONNULL ((1, 2)));
46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                             struct tm *restrict __result));
46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if ! 1
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                             struct tm *restrict __result)
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                            _GL_ARG_NONNULL ((1, 2)));
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                             struct tm *restrict __result));
47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if 1
47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (localtime_r);
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if GNULIB_PORTCHECK
47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef gmtime_r
48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define gmtime_r rpl_gmtime_r
48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                          struct tm *restrict __result)
48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                         _GL_ARG_NONNULL ((1, 2)));
48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                          struct tm *restrict __result));
48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if ! 1
49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                          struct tm *restrict __result)
49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                         _GL_ARG_NONNULL ((1, 2)));
49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                          struct tm *restrict __result));
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if 1
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (gmtime_r);
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the resulting broken-down time into TM.  See
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     char const *restrict __format,
50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     struct tm *restrict __tm)
51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                    _GL_ARG_NONNULL ((1, 2, 3)));
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     char const *restrict __format,
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     struct tm *restrict __tm));
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strptime);
51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert TM to a time_t value, assuming UTC.  */
51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if GNULIB_PORTCHECK
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    undef timegm
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#    define timegm rpl_timegm
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   if ! 1
52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   endif
53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (timegm);
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Encourage applications to avoid unsafe functions that can overrun
53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   buffers when given outlandish struct tm values.  Portable
53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   applications should use strftime (or even sprintf) instead.  */
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef asctime
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "better use strftime (or even sprintf) instead");
54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef asctime_r
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - "
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "better use strftime (or even sprintf) instead");
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef ctime
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - "
55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "better use strftime (or even sprintf) instead");
55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef ctime_r
55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - "
55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "better use strftime (or even sprintf) instead");
55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
561