105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A GNU-like <string.h>.
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 1995-1996, 2001-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#ifndef _GL_STRING_H
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#pragma GCC system_header
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard.  */
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include_next <string.h>
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_STRING_H
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_STRING_H
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* NetBSD 5.0 mis-defines NULL.  */
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <stddef.h>
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* MirBSD defines mbslen as a macro.  */
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0 && defined __MirBSD__
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <wchar.h>
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The __attribute__ feature is available in gcc versions 2.5 and later.
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   The attribute __pure__ was added in gcc 2.96.  */
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_ATTRIBUTE_PURE /* empty */
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>.  */
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* But in any case avoid namespace pollution on glibc systems.  */
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if (0 || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    && ! defined __GLIBC__
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <unistd.h>
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_CXXDEFS_H
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_CXXDEFS_H
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The three most frequent use cases of these macros are:
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a substitute for a function that is missing on some
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     platforms, but is declared and works fine on the platforms on which
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     it exists:
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if !@HAVE_FOO@
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_SYS (foo, ...);
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a replacement for a function that exists on all platforms,
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but is broken/insufficient and needs to be replaced on some platforms:
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if @REPLACE_FOO@
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   undef foo
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   define foo rpl_foo
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_RPL (foo, ...);
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_RPL (foo, ...);
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # else
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   * For providing a replacement for a function that exists on some platforms
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but is broken/insufficient and needs to be replaced on some of them and
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     is additionally either missing or undeclared on some other platforms:
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #if @GNULIB_FOO@
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # if @REPLACE_FOO@
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   undef foo
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #   define foo rpl_foo
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_RPL (foo, ...);
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_RPL (foo, ...);
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # else
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_FUNCDECL_SYS (foo, ...);
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #  endif
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIAS_SYS (foo, ...);
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       # endif
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       _GL_CXXALIASWARN (foo);
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #elif defined GNULIB_POSIXCHECK
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       ...
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       #endif
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang*/
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_EXTERN_C declaration;
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_EXTERN_C extern "C"
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_EXTERN_C extern
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a replacement function, named rpl_func, with the given prototype,
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   consisting of return type, parameters, and attributes.
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares the system function, named func, with the given prototype,
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   consisting of return type, parameters, and attributes.
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_EXTERN_C rettype func parameters_and_attributes
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_RPL (func, rettype, parameters);
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a C++ alias called GNULIB_NAMESPACE::func
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                \
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                         \
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rettype (*const func) parameters = ::rpl_func;          \
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                         \
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function rpl_func may have a slightly different
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declaration.  A cast is used to silence the "invalid conversion" error
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that would otherwise occur.  */
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                     \
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                              \
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      rettype (*const func) parameters =                           \
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                              \
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS (func, rettype, parameters);
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declares a C++ alias called GNULIB_NAMESPACE::func
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that redirects to the system provided function func, if GNULIB_NAMESPACE
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is defined.
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Example:
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* If we were to write
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       rettype (*const func) parameters = ::func;
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     better (remove an indirection through a 'static' pointer variable),
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     but then the _GL_CXXALIASWARN macro below would cause a warning not only
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                     \
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                              \
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters = ::func;  \
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                              \
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function func may have a slightly different declaration.
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   A cast is used to silence the "invalid conversion" error that would
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   otherwise occur.  */
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                          \
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                   \
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters =               \
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(::func); \
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                   \
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   except that the C function is picked among a set of overloaded functions,
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   namely the one with rettype2 and parameters2.  Two consecutive casts
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   are used to silence the "cannot find a match" and "invalid conversion"
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   errors that would otherwise occur.  */
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* The outer cast must be a reinterpret_cast.
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     The inner cast: When the function is defined as a set of overloaded
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     functions, it works as a static_cast<>, choosing the designated variant.
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     When the function is defined as a single variant, it works as a
24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    namespace GNULIB_NAMESPACE                                                \
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                                         \
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      static rettype (*func) parameters =                                     \
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        reinterpret_cast<rettype(*)parameters>(                               \
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          (rettype2(*)parameters2)(::func));                                  \
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                                         \
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIASWARN (func);
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   causes a warning to be emitted when ::func is used but not when
25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   variants.  */
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN(func) \
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN_1(func,namespace) \
26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN_2 (func, namespace)
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   we enable the warning only when not optimizing.  */
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !__OPTIMIZE__
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_WARN_ON_USE (func, \
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     "The symbol ::" #func " refers to the system function. " \
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     "Use " #namespace "::" #func " instead.")
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     extern __typeof__ (func) func
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN_2(func,namespace) \
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_EXTERN_C int _gl_cxxalias_dummy
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN(func) \
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   causes a warning to be emitted when the given overloaded variant of ::func
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is used but not when GNULIB_NAMESPACE::func is used.  */
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __cplusplus && defined GNULIB_NAMESPACE
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        GNULIB_NAMESPACE)
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   we enable the warning only when not optimizing.  */
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !__OPTIMIZE__
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         "The symbol ::" #func " refers to the system function. " \
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                         "Use " #namespace "::" #func " instead.")
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     extern __typeof__ (func) func
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_EXTERN_C int _gl_cxxalias_dummy
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    _GL_EXTERN_C int _gl_cxxalias_dummy
30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_CXXDEFS_H */
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here.  */
31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   that the values passed as arguments n, ..., m must be non-NULL pointers.
31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_ARG_NONNULL
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_ARG_NONNULL(params)
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here.  */
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function __attribute__ ((__warning__ (message)))
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like _GL_WARN_ON_USE (function, "string"), except that the function is
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declared with the given prototype, consisting of return type, parameters,
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   and attributes.
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   not work in this case.  */
34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE_CXX
34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes \
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     __attribute__ ((__warning__ (msg)))
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes
35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_EXTERN_C declaration;
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_EXTERN_C
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern "C"
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern
36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the index of the least-significant set bit.  */
37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (ffsl, int, (long int i));
37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (ffsl, int, (long int i));
37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (ffsl);
38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef ffsl
38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FFSL
38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the index of the least-significant set bit.  */
38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (ffsll);
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef ffsll
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FFSLL
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the first instance of C within N bytes of S, or NULL.  */
40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define memchr rpl_memchr
40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C" { const void * std::memchr (const void *, int, size_t); }
42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { void * std::memchr (void *, int, size_t); }  */
42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (memchr,
42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        void *, (void const *__s, int __c, size_t __n),
42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        void const *, (void const *__s, int __c, size_t __n));
42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memchr, void const *,
43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (void const *__s, int __c, size_t __n));
43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (memchr);
43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef memchr
43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume memchr is always declared.  */
43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module memchr for portability" );
43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the first occurrence of NEEDLE in HAYSTACK.  */
44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define memmem rpl_memmem
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (memmem, void *,
44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (void const *__haystack, size_t __haystack_len,
44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   void const *__needle, size_t __needle_len)
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 3)));
45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (memmem, void *,
45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (void const *__haystack, size_t __haystack_len,
45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   void const *__needle, size_t __needle_len));
45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (memmem, void *,
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (void const *__haystack, size_t __haystack_len,
45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   void const *__needle, size_t __needle_len)
46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE
46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 3)));
46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (memmem, void *,
46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (void const *__haystack, size_t __haystack_len,
46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   void const *__needle, size_t __needle_len));
46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (memmem);
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef memmem
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MEMMEM
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module memmem-simple for portability, "
47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "and module memmem for speed" );
47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy N bytes of SRC to DEST, return pointer to bytes after the
47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   last written byte.  */
47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mempcpy, void *,
48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (void *restrict __dest, void const *restrict __src,
48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t __n)
48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mempcpy, void *,
48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (void *restrict __dest, void const *restrict __src,
48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t __n));
48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mempcpy);
49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mempcpy
49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MEMPCPY
49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mempcpy for portability");
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search backwards through a block for a byte (specified as an int).  */
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (memrchr,
50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        void *, (void const *, int, size_t),
51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        void const *, (void const *, int, size_t));
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (memrchr);
51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef memrchr
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MEMRCHR
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module memrchr for portability");
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of C in S.  More efficient than
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   memchr(S,C,N), at the expense of undefined behavior if C does not
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   occur within N bytes.  */
52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ATTRIBUTE_PURE
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ARG_NONNULL ((1)));
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { const void * std::rawmemchr (const void *, int); }
53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { void * std::rawmemchr (void *, int); }  */
53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        void *, (void const *__s, int __c_in),
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        void const *, (void const *__s, int __c_in));
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (rawmemchr);
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef rawmemchr
55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_RAWMEMCHR
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module rawmemchr for portability");
55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (stpcpy, char *,
56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict __dst, char const *restrict __src)
56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (stpcpy, char *,
56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict __dst, char const *restrict __src));
56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (stpcpy);
56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stpcpy
56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STPCPY
56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module stpcpy for portability");
57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy no more than N bytes of SRC to DST, returning a pointer past the
57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   last non-NUL byte written into DST.  */
57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef stpncpy
58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define stpncpy rpl_stpncpy
58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (stpncpy, char *,
58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict __dst, char const *restrict __src,
58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t __n)
58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (stpncpy, char *,
58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict __dst, char const *restrict __src,
58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t __n));
58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (stpncpy, char *,
59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict __dst, char const *restrict __src,
59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t __n)
59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (stpncpy, char *,
59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict __dst, char const *restrict __src,
59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t __n));
59905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (stpncpy);
60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stpncpy
60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STPNCPY
60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module stpncpy for portability");
60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK
61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strchr() does not work with multibyte strings if the locale encoding is
61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GB18030 and the character to be searched is a digit.  */
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strchr
61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strchr is always declared.  */
61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "in some multibyte locales - "
61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbschr if you care about internationalization");
61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of C in S or the final NUL byte.  */
62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strchrnul rpl_strchrnul
62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ATTRIBUTE_PURE
62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ARG_NONNULL ((1)));
62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strchrnul, char *,
62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const char *str, int ch));
63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ATTRIBUTE_PURE
63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ARG_NONNULL ((1)));
63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { const char * std::strchrnul (const char *, int); }
63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { char * std::strchrnul (char *, int); }  */
63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strchrnul,
64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        char *, (char const *__s, int __c_in),
64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        char const *, (char const *__s, int __c_in));
64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strchrnul);
64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strchrnul
65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRCHRNUL
65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strchrnul for portability");
65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Duplicate S, returning an identical malloc'd string.  */
65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strdup
66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strdup rpl_strdup
66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /* strdup exists as a function and as a macro.  Get rid of the macro.  */
67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strdup
67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(1 || defined strdup)
67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strdup);
67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strdup
68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRDUP
68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strdup, "strdup is unportable - "
68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strdup for portability");
68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Append no more than N characters from SRC onto DEST.  */
68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strncat
69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strncat rpl_strncat
69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1, 2)));
69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
69605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strncat);
70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strncat
70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRNCAT
70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strncat, "strncat is unportable - "
70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strncat for portability");
70505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return a newly allocated copy of at most N bytes of STRING.  */
70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strndup
71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strndup rpl_strndup
71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strndup);
72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strndup
72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRNDUP
72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strndup, "strndup is unportable - "
73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strndup for portability");
73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the length (number of bytes) of STRING, but scan at most
73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   return MAXLEN.  */
73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strnlen
74105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strnlen rpl_strnlen
74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
74605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
75105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
75205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strnlen);
75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strnlen
75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRNLEN
75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strnlen for portability");
76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
76305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
76405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK
76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strcspn() assumes the second argument is a list of single-byte characters.
76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Even in this simple case, it does not work with multibyte strings if the
76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   locale encoding is GB18030 and one of the characters to be searched is a
76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   digit.  */
76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strcspn
77005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strcspn is always declared.  */
77105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
77205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "in multibyte locales - "
77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbscspn if you care about internationalization");
77405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
77505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
77605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in S of any character in ACCEPT.  */
77705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
77805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
77905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
78005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
78105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1, 2)));
78205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
78305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
78405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C" { const char * strpbrk (const char *, const char *); }
78505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { char * strpbrk (char *, const char *); }  */
78605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strpbrk,
78705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        char *, (char const *__s, char const *__accept),
78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const char *, (char const *__s, char const *__accept));
78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
79005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
79105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
79205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strpbrk, char const *,
79305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (char const *__s, char const *__accept));
79405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
79505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strpbrk);
79605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
79805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strpbrk() assumes the second argument is a list of single-byte characters.
79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Even in this simple case, it does not work with multibyte strings if the
80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   locale encoding is GB18030 and one of the characters to be searched is a
80105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   digit.  */
80205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef strpbrk
80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "in multibyte locales - "
80505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbspbrk if you care about internationalization");
80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
80705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
80805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strpbrk
80905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRPBRK
81005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
81105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strpbrk for portability");
81205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
81305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK
81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strspn() assumes the second argument is a list of single-byte characters.
81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Even in this simple case, it cannot work with multibyte strings.  */
81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strspn
81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strspn is always declared.  */
82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "in multibyte locales - "
82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbsspn if you care about internationalization");
82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK
82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strrchr() does not work with multibyte strings if the locale encoding is
82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GB18030 and the character to be searched is a digit.  */
82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strrchr
82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strrchr is always declared.  */
83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "in some multibyte locales - "
83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbsrchr if you care about internationalization");
83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   If one is found, overwrite it with a NUL, and advance *STRINGP
83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   If *STRINGP was already NULL, nothing happens.
83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Return the old value of *STRINGP.
84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This is a variant of strtok() that is multithread-safe and supports
84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   empty fields.
84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: It modifies the original string.
84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: These functions cannot be used on constant strings.
84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: The identity of the delimiting character is lost.
84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: It doesn't work with multibyte strings unless all of the delimiter
84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang           characters are ASCII characters < 0x30.
84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   See also strtok_r().  */
85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! 1
85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strsep, char *,
85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char **restrict __stringp, char const *restrict __delim)
85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strsep, char *,
85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char **restrict __stringp, char const *restrict __delim));
85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strsep);
86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef strsep
86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "in multibyte locales - "
86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbssep if you care about internationalization");
86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strsep
86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRSEP
86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strsep, "strsep is unportable - "
87005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strsep for portability");
87105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
87205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
87505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strstr rpl_strstr
87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1, 2)));
88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { const char * strstr (const char *, const char *); }
88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { char * strstr (char *, const char *); }  */
88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strstr,
88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        char *, (const char *haystack, const char *needle),
88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const char *, (const char *haystack, const char *needle));
89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strstr, const char *,
89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (const char *haystack, const char *needle));
89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strstr);
89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strstr() does not work with multibyte strings if the locale encoding is
90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   different from UTF-8:
90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   POSIX says that it operates on "strings", and "string" in POSIX is defined
90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   as a sequence of bytes, not of characters.  */
90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strstr
90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strstr is always declared.  */
90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "work correctly on character strings in most "
90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "multibyte locales - "
90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbsstr if you care about internationalization, "
91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "or use strstr if you care about speed");
91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   comparison.  */
91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strcasestr rpl_strcasestr
91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strcasestr, char *,
92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const char *haystack, const char *needle)
92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE
92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strcasestr, char *,
92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const char *haystack, const char *needle));
92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
92705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
92805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strcasestr, char *,
92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const char *haystack, const char *needle)
93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE
93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((1, 2)));
93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { const char * strcasestr (const char *, const char *); }
93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" { char * strcasestr (char *, const char *); }  */
93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strcasestr,
93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        char *, (const char *haystack, const char *needle),
93805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const char *, (const char *haystack, const char *needle));
93905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
94005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
94105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
94205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
94305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strcasestr, const char *,
94405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (const char *haystack, const char *needle));
94505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
94605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strcasestr);
94705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strcasestr() does not work with multibyte strings:
95005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   It is a glibc extension, and glibc implements it only for unibyte
95105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   locales.  */
95205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strcasestr
95305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRCASESTR
95405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
95505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "strings in multibyte locales - "
95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbscasestr if you care about "
95705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "internationalization, or use c-strcasestr if you want "
95805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "a locale independent function");
95905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
96005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
96105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
96205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Parse S into tokens separated by characters in DELIM.
96305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   If S is NULL, the saved pointer in SAVE_PTR is used as
96405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the next starting point.  For example:
96505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        char s[] = "-abc-=-def";
96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        char *sp;
96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
96805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
96905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        x = strtok_r(NULL, "=", &sp);   // x = NULL
97005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                // s = "abc\0-def\0"
97105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
97205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This is a variant of strtok() that is multithread-safe.
97305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
97405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   For the POSIX documentation for this function, see:
97505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   http://www.opengroup.org/susv3xsh/strtok.html
97605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
97705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: It modifies the original string.
97805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: These functions cannot be used on constant strings.
97905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: The identity of the delimiting character is lost.
98005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: It doesn't work with multibyte strings unless all of the delimiter
98105436638acc7c010349a69c3395f1a57c642dc62Ying Wang           characters are ASCII characters < 0x30.
98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
98305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   See also strsep().  */
98405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
98505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
98605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
98705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strtok_r
98805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strtok_r rpl_strtok_r
98905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
99005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strtok_r, char *,
99105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict s, char const *restrict delim,
99205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   char **restrict save_ptr)
99305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2, 3)));
99405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strtok_r, char *,
99505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict s, char const *restrict delim,
99605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   char **restrict save_ptr));
99705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
99805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if 0 || defined GNULIB_POSIXCHECK
99905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strtok_r
100005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
100105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
100205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strtok_r, char *,
100305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict s, char const *restrict delim,
100405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   char **restrict save_ptr)
100505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2, 3)));
100605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
100705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strtok_r, char *,
100805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *restrict s, char const *restrict delim,
100905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   char **restrict save_ptr));
101005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
101105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strtok_r);
101205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK
101305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
101405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "strings in multibyte locales - "
101505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use mbstok_r if you care about internationalization");
101605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
101705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
101805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strtok_r
101905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRTOK_R
102005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
102105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strtok_r for portability");
102205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
102305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
102405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
102505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
102605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The following functions are not specified by POSIX.  They are gnulib
102705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   extensions.  */
102805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
102905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
103005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of multibyte characters in the character string STRING.
103105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This considers multibyte characters, unlike strlen, which counts bytes.  */
103205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
103305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef mbslen
103405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
103505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
103605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
103705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbslen rpl_mbslen
103805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
103905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
104005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
104105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
104205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
104305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
104405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
104505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
104605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
104705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
104805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
104905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbslen);
105005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
105105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
105205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
105305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of multibyte characters in the character string starting
105405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   at STRING and ending at STRING + LEN.  */
105505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
105605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
105705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1));
105805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
105905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
106005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
106105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Locate the first single-byte character C in the character string STRING,
106205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   and return a pointer to it.  Return NULL if C is not found in STRING.
106305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strchr(), this function works correctly in multibyte locales with
106405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   encodings such as GB18030.  */
106505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __hpux
106605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
106705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
106805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
106905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
107005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
107105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
107205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
107305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
107405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
107505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE
107605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ARG_NONNULL ((1)));
107705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
107805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
107905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbschr);
108005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
108105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
108205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
108305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Locate the last single-byte character C in the character string STRING,
108405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   and return a pointer to it.  Return NULL if C is not found in STRING.
108505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strrchr(), this function works correctly in multibyte locales with
108605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   encodings such as GB18030.  */
108705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __hpux || defined __INTERIX
108805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
108905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
109005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
109105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
109205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
109305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
109405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
109505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
109605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
109705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
109805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1)));
109905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
110005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
110105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbsrchr);
110205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
110305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
110405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
110505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of the character string NEEDLE in the character
110605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
110705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strstr(), this function works correctly in multibyte locales with
110805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   encodings different from UTF-8.  */
110905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
111005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
111105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
111205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
111305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
111405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
111505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare the character strings S1 and S2, ignoring case, returning less than,
111605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   equal to or greater than zero if S1 is lexicographically less than, equal to
111705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   or greater than S2.
111805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Note: This function may, in multibyte locales, return 0 for strings of
111905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   different lengths!
112005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
112105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
112205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
112305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
112405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
112505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
112605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
112705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare the initial segment of the character string S1 consisting of at most
112805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   N characters with the initial segment of the character string S2 consisting
112905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   of at most N characters, ignoring case, returning less than, equal to or
113005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   greater than zero if the initial segment of S1 is lexicographically less
113105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   than, equal to or greater than the initial segment of S2.
113205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Note: This function may, in multibyte locales, return 0 for initial segments
113305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   of different lengths!
113405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strncasecmp(), this function works correctly in multibyte locales.
113505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   But beware that N is not a byte count but a character count!  */
113605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
113705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
113805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
113905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
114005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
114105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
114205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare the initial segment of the character string STRING consisting of
114305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   at most mbslen (PREFIX) characters with the character string PREFIX,
114405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   ignoring case.  If the two match, return a pointer to the first byte
114505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   after this prefix in STRING.  Otherwise, return NULL.
114605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Note: This function may, in multibyte locales, return non-NULL if STRING
114705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is of smaller length than PREFIX!
114805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strncasecmp(), this function works correctly in multibyte
114905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   locales.  */
115005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
115105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
115205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
115305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
115405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
115505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
115605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of the character string NEEDLE in the character
115705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   string HAYSTACK, using case-insensitive comparison.
115805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Note: This function may, in multibyte locales, return success even if
115905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   strlen (haystack) < strlen (needle) !
116005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strcasestr(), this function works correctly in multibyte locales.  */
116105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
116205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
116305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
116405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
116505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
116605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
116705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in the character string STRING of any character
116805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   in the character string ACCEPT.  Return the number of bytes from the
116905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   beginning of the string to this occurrence, or to the end of the string
117005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   if none exists.
117105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strcspn(), this function works correctly in multibyte locales.  */
117205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
117305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
117405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
117505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
117605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
117705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
117805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in the character string STRING of any character
117905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   in the character string ACCEPT.  Return the pointer to it, or NULL if none
118005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   exists.
118105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strpbrk(), this function works correctly in multibyte locales.  */
118205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __hpux
118305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
118405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
118505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
118605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
118705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
118805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1, 2)));
118905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
119005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
119105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
119205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
119305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1, 2)));
119405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
119505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
119605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbspbrk);
119705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
119805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
119905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
120005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in the character string STRING of any character
120105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   not in the character string REJECT.  Return the number of bytes from the
120205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   beginning of the string to this occurrence, or to the end of the string
120305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   if none exists.
120405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Unlike strspn(), this function works correctly in multibyte locales.  */
120505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
120605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ATTRIBUTE_PURE
120705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
120805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
120905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
121005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
121105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search the next delimiter (multibyte character listed in the character
121205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   string DELIM) starting at the character string *STRINGP.
121305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   If one is found, overwrite it with a NUL, and advance *STRINGP to point
121405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
121505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   If *STRINGP was already NULL, nothing happens.
121605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Return the old value of *STRINGP.
121705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
121805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This is a variant of mbstok_r() that supports empty fields.
121905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
122005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: It modifies the original string.
122105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: These functions cannot be used on constant strings.
122205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: The identity of the delimiting character is lost.
122305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
122405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   See also mbstok_r().  */
122505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
122605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((1, 2));
122705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
122805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
122905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
123005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Parse the character string STRING into tokens separated by characters in
123105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the character string DELIM.
123205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   If STRING is NULL, the saved pointer in SAVE_PTR is used as
123305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the next starting point.  For example:
123405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        char s[] = "-abc-=-def";
123505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        char *sp;
123605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
123705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
123805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        x = mbstok_r(NULL, "=", &sp);   // x = NULL
123905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                // s = "abc\0-def\0"
124005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
124105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: It modifies the original string.
124205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: These functions cannot be used on constant strings.
124305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Caveat: The identity of the delimiting character is lost.
124405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
124505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   See also mbssep().  */
124605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
124705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     _GL_ARG_NONNULL ((2, 3));
124805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
124905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
125005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Map any int, typically from errno, into an error message.  */
125105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
125205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
125305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
125405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strerror
125505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strerror rpl_strerror
125605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
125705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strerror, char *, (int));
125805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strerror, char *, (int));
125905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
126005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strerror, char *, (int));
126105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
126205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strerror);
126305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
126405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strerror
126505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strerror is always declared.  */
126605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strerror, "strerror is unportable - "
126705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strerror to guarantee non-NULL result");
126805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
126905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
127005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Map any int, typically from errno, into an error message.  Multithread-safe.
127105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Uses the POSIX declaration, not the glibc declaration.  */
127205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
127305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
127405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
127505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef strerror_r
127605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strerror_r rpl_strerror_r
127705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
127805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
127905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((2)));
128005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
128105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
128205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !1
128305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
128405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((2)));
128505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
128605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
128705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
128805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 1
128905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strerror_r);
129005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
129105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
129205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strerror_r
129305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRERROR_R
129405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
129505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strerror_r-posix for portability");
129605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
129705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
129805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
129905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 0
130005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 0
130105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
130205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define strsignal rpl_strsignal
130305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
130405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
130505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
130605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
130705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if ! 1
130805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
130905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
131005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Need to cast, because on Cygwin 1.5.x systems, the return type is
131105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   'const char *'.  */
131205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
131305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
131405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strsignal);
131505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
131605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strsignal
131705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRSIGNAL
131805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
131905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strsignal for portability");
132005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
132105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
132205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
132305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if 1
132405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !1
132505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
132605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE
132705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ARG_NONNULL ((1, 2)));
132805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
132905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
133005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strverscmp);
133105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
133205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strverscmp
133305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRVERSCMP
133405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
133505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module strverscmp for portability");
133605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
133705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
133805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
133905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
134005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_STRING_H */
134105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _GL_STRING_H */
1342