105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 2007-2012 Free Software Foundation, Inc.
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software; you can redistribute it and/or modify
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation; either version 3, or (at your option)
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   any later version.
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Written by Eric Blake.  */
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang * ISO C 99 <wchar.h> for platforms that have issues.
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * <http://www.opengroup.org/susv3xbd/wchar.h.html>
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * For now, this just ensures proper prerequisite inclusion order and
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang * the declaration of wcwidth().
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_SYSTEM_HEADER@
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_COLUMNS@
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Special invocation convention:
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   - Inside glibc and uClibc header files.
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   - On HP-UX 11.00 we have a sequence of nested includes
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang     and once directly.  In both situations 'wint_t' is not yet defined,
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     therefore we cannot provide the function overrides; instead include only
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     the system's <wchar.h>.
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     the latter includes <wchar.h>.  But here, we have no way to detect whether
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     <wctype.h> is completely included or is still being included.  */
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Normal invocation convention.  */
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_WCHAR_H
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_ALREADY_INCLUDING_WCHAR_H
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @HAVE_FEATURES_H@
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <features.h> /* for __GLIBC__ */
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   <wchar.h>.
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   included before <wchar.h>.
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   by <stddef.h>.
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   But avoid namespace pollution on glibc systems.  */
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !(defined __GLIBC__ && !defined __UCLIBC__)
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <stddef.h>
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef __GLIBC__
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <stdio.h>
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <time.h>
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Include the original <wchar.h> if it exists.
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Some builds of uClibc lack it.  */
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard.  */
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @HAVE_WCHAR_H@
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#undef _GL_ALREADY_INCLUDING_WCHAR_H
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_WCHAR_H
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _@GUARD_PREFIX@_WCHAR_H
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The __attribute__ feature is available in gcc versions 2.5 and later.
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   The attribute __pure__ was added in gcc 2.96.  */
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_ATTRIBUTE_PURE /* empty */
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here.  */
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here.  */
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !@HAVE_WINT_T@ && !defined wint_t
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define wint_t int
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WEOF
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WEOF -1
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   "unchanged by default argument promotions".  Override it.  */
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined _MSC_VER
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !GNULIB_defined_wint_t
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   include <crtdefs.h>
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef unsigned int rpl_wint_t;
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wint_t
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wint_t rpl_wint_t
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define GNULIB_defined_wint_t 1
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef WEOF
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define WEOF ((wint_t) -1)
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Override mbstate_t if it is too small.
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   implementing mbrtowc for encodings like UTF-8.  */
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_mbstate_t
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int rpl_mbstate_t;
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  undef mbstate_t
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define mbstate_t rpl_mbstate_t
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define GNULIB_defined_mbstate_t 1
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a single-byte character to a wide character.  */
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_BTOWC@
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_BTOWC@
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef btowc
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define btowc rpl_btowc
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_BTOWC@
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (btowc);
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef btowc
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_BTOWC
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (btowc, "btowc is unportable - "
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module btowc for portability");
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a wide character to a single-byte character.  */
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCTOB@
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_WCTOB@
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wctob
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wctob rpl_wctob
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !defined wctob && !@HAVE_DECL_WCTOB@
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* wctob is provided by gnulib, or wctob exists but is not declared.  */
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wctob);
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wctob
18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCTOB
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wctob, "wctob is unportable - "
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wctob for portability");
18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Test whether *PS is in the initial state.  */
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSINIT@
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MBSINIT@
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mbsinit
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbsinit rpl_mbsinit
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MBSINIT@
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbsinit);
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mbsinit
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MBSINIT
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mbsinit for portability");
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a multibyte character to a wide character.  */
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBRTOWC@
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MBRTOWC@
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mbrtowc
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbrtowc rpl_mbrtowc
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbrtowc, size_t,
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbrtowc, size_t,
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MBRTOWC@
22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbrtowc, size_t,
22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbrtowc, size_t,
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbrtowc);
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mbrtowc
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MBRTOWC
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mbrtowc for portability");
24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Recognize a multibyte character.  */
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBRLEN@
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MBRLEN@
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mbrlen
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbrlen rpl_mbrlen
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MBRLEN@
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbrlen);
26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mbrlen
26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MBRLEN
26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mbrlen for portability");
26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a string to a wide string.  */
27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSRTOWCS@
27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MBSRTOWCS@
27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mbsrtowcs
27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbsrtowcs rpl_mbsrtowcs
27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t len,
28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MBSRTOWCS@
28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t len,
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbsrtowcs);
29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mbsrtowcs
29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MBSRTOWCS
29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mbsrtowcs for portability");
29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a string to a wide string.  */
30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSNRTOWCS@
30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MBSNRTOWCS@
30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef mbsnrtowcs
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define mbsnrtowcs rpl_mbsnrtowcs
30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps)
31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_MBSNRTOWCS@
31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps)
32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbsnrtowcs);
32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mbsnrtowcs
33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MBSNRTOWCS
33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module mbsnrtowcs for portability");
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a wide character to a multibyte character.  */
33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCRTOMB@
33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_WCRTOMB@
34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wcrtomb
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wcrtomb rpl_wcrtomb
34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_WCRTOMB@
34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcrtomb);
35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcrtomb
35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCRTOMB
35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcrtomb for portability");
35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a wide string to a string.  */
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSRTOMBS@
36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_WCSRTOMBS@
36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wcsrtombs
36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wcsrtombs rpl_wcsrtombs
36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (wcsrtombs, size_t,
37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (wcsrtombs, size_t,
37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t len,
37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_WCSRTOMBS@
37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsrtombs, size_t,
37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsrtombs, size_t,
38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t len,
38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsrtombs);
38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsrtombs
38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSRTOMBS
38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsrtombs for portability");
39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Convert a wide string to a string.  */
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSNRTOMBS@
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_WCSNRTOMBS@
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wcsnrtombs
40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wcsnrtombs rpl_wcsnrtombs
40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps)
40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_WCSNRTOMBS@
41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps)
41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ARG_NONNULL ((2)));
41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   mbstate_t *ps));
41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsnrtombs);
42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsnrtombs
42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSNRTOMBS
42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsnrtombs for portability");
42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of screen columns needed for WC.  */
43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCWIDTH@
43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_WCWIDTH@
43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wcwidth
43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wcwidth rpl_wcwidth
43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_DECL_WCWIDTH@
44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* wcwidth exists but is not declared.  */
44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcwidth);
44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcwidth
44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCWIDTH
45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcwidth for portability");
45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search N wide characters of S for C.  */
45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WMEMCHR@
45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WMEMCHR@
45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                      _GL_ATTRIBUTE_PURE);
46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" {
46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       }  */
46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (wmemchr,
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        wchar_t *, (const wchar_t *, wchar_t, size_t),
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (const wchar_t *s, wchar_t c, size_t n));
47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wmemchr);
47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wmemchr
48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WMEMCHR
48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wmemchr for portability");
48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare N wide characters of S1 and S2.  */
48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WMEMCMP@
48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WMEMCMP@
49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wmemcmp, int,
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *s1, const wchar_t *s2, size_t n)
49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE);
49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wmemcmp, int,
49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *s1, const wchar_t *s2, size_t n));
49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wmemcmp);
49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wmemcmp
49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WMEMCMP
50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wmemcmp for portability");
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy N wide characters of SRC to DEST.  */
50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WMEMCPY@
50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WMEMCPY@
50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wmemcpy);
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wmemcpy
51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WMEMCPY
51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wmemcpy for portability");
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   overlapping memory areas.  */
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WMEMMOVE@
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WMEMMOVE@
52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wmemmove);
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wmemmove
53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WMEMMOVE
53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wmemmove for portability");
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Set N wide characters of S to C.  */
54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WMEMSET@
54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WMEMSET@
54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wmemset);
55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wmemset
55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WMEMSET
55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wmemset for portability");
55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of wide characters in S.  */
56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSLEN@
56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSLEN@
56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcslen);
56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcslen
56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSLEN
56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcslen for portability");
57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of wide characters in S, but at most MAXLEN.  */
57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSNLEN@
57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSNLEN@
57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE);
58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsnlen);
58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsnlen
58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSNLEN
58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsnlen for portability");
58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy SRC to DEST.  */
59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCPY@
59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCPY@
59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcscpy);
59905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcscpy
60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCPY
60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcscpy for portability");
60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCPCPY@
61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCPCPY@
61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcpcpy);
61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcpcpy
61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCPCPY
61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcpcpy for portability");
62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy no more than N wide characters of SRC to DEST.  */
62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSNCPY@
62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSNCPY@
62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsncpy);
63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsncpy
63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSNCPY
63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsncpy for portability");
63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy no more than N characters of SRC to DEST, returning the address of
64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the last character written into DEST.  */
64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCPNCPY@
64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCPNCPY@
64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcpncpy);
65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcpncpy
65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCPNCPY
65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcpncpy for portability");
65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Append SRC onto DEST.  */
66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCAT@
66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCAT@
66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcscat);
66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcscat
67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCAT
67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcscat for portability");
67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Append no more than N wide characters of SRC onto DEST.  */
67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSNCAT@
67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSNCAT@
68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *dest, const wchar_t *src, size_t n));
68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsncat);
68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsncat
68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSNCAT
68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsncat for portability");
69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare S1 and S2.  */
69605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCMP@
69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCMP@
69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               _GL_ATTRIBUTE_PURE);
70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcscmp);
70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcscmp
70505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCMP
70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcscmp for portability");
70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare no more than N wide characters of S1 and S2.  */
71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSNCMP@
71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSNCMP@
71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsncmp, int,
71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *s1, const wchar_t *s2, size_t n)
71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE);
71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsncmp, int,
72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *s1, const wchar_t *s2, size_t n));
72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsncmp);
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsncmp
72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSNCMP
72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsncmp for portability");
72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare S1 and S2, ignoring case.  */
73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCASECMP@
73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCASECMP@
73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE);
73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcscasecmp);
73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcscasecmp
74105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCASECMP
74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcscasecmp for portability");
74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
74605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare no more than N chars of S1 and S2, ignoring case.  */
74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSNCASECMP@
75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSNCASECMP@
75105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsncasecmp, int,
75205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *s1, const wchar_t *s2, size_t n)
75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE);
75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsncasecmp, int,
75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *s1, const wchar_t *s2, size_t n));
75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsncasecmp);
75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsncasecmp
76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSNCASECMP
76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsncasecmp for portability");
76305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
76405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   category of the current locale.  */
76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCOLL@
77005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCOLL@
77105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
77205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
77405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcscoll);
77505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
77605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcscoll
77705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCOLL
77805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
77905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcscoll for portability");
78005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
78105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
78205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
78305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
78405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
78505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   to two transformed strings the result is the as applying 'wcscoll' to the
78605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   original strings.  */
78705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSXFRM@
78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSXFRM@
78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
79005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
79105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
79205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsxfrm);
79305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
79405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsxfrm
79505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSXFRM
79605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsxfrm for portability");
79805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
80105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
80205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Duplicate S, returning an identical malloc'd string.  */
80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSDUP@
80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSDUP@
80505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
80705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
80805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsdup);
80905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
81005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsdup
81105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSDUP
81205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
81305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsdup for portability");
81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of WC in WCS.  */
81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCHR@
82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCHR@
82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                     _GL_ATTRIBUTE_PURE);
82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" {
82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang         wchar_t * std::wcschr (wchar_t *, wchar_t);
82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       }  */
82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (wcschr,
83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        wchar_t *, (const wchar_t *, wchar_t),
83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const wchar_t *, (const wchar_t *, wchar_t));
83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcschr);
83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcschr
84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCHR
84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcschr for portability");
84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the last occurrence of WC in WCS.  */
84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSRCHR@
85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSRCHR@
85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                      _GL_ATTRIBUTE_PURE);
85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" {
85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       }  */
85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        wchar_t *, (const wchar_t *, wchar_t),
86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const wchar_t *, (const wchar_t *, wchar_t));
86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsrchr);
86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
87005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsrchr
87105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSRCHR
87205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsrchr for portability");
87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
87505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the length of the initial segmet of WCS which consists entirely
87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   of wide characters not in REJECT.  */
88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSCSPN@
88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSCSPN@
88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   _GL_ATTRIBUTE_PURE);
88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcscspn);
88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcscspn
88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSCSPN
89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcscspn for portability");
89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the length of the initial segmet of WCS which consists entirely
89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   of wide characters in ACCEPT.  */
89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSSPN@
89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSSPN@
90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  _GL_ATTRIBUTE_PURE);
90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsspn);
90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsspn
90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSSPN
90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsspn for portability");
91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in WCS of any character in ACCEPT.  */
91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSPBRK@
91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSPBRK@
91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *wcs, const wchar_t *accept)
91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE);
92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" {
92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       }  */
92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
92705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        wchar_t *, (const wchar_t *, const wchar_t *),
92805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const wchar_t *, (const wchar_t *, const wchar_t *));
92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (wchar_t *wcs, const wchar_t *accept));
93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (const wchar_t *wcs, const wchar_t *accept));
93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcspbrk);
93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
93805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
93905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcspbrk
94005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSPBRK
94105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
94205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcspbrk for portability");
94305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
94405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
94505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
94605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
94705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of NEEDLE in HAYSTACK.  */
94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSSTR@
94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSSTR@
95005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
95105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (const wchar_t *haystack, const wchar_t *needle)
95205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  _GL_ATTRIBUTE_PURE);
95305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
95405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* On some systems, this function is defined as an overloaded function:
95505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       extern "C++" {
95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
95705436638acc7c010349a69c3395f1a57c642dc62Ying Wang         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
95805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       }  */
95905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (wcsstr,
96005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        wchar_t *, (const wchar_t *, const wchar_t *),
96105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        const wchar_t *, (const wchar_t *, const wchar_t *));
96205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
96305436638acc7c010349a69c3395f1a57c642dc62Ying Wang     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
96405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
96505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (wchar_t *haystack, const wchar_t *needle));
96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   (const wchar_t *haystack, const wchar_t *needle));
96805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
96905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcsstr);
97005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
97105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
97205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcsstr
97305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSSTR
97405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
97505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcsstr for portability");
97605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
97705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
97805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
97905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
98005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Divide WCS into tokens separated by characters in DELIM.  */
98105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSTOK@
98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_WCSTOK@
98305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcstok, wchar_t *,
98405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
98505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
98605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcstok, wchar_t *,
98705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
98805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcstok);
98905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
99005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcstok
99105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSTOK
99205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
99305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcstok for portability");
99405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
99505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
99605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
99705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
99805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Determine number of column positions required for first N wide
99905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   characters (or fewer if S ends before this) in S.  */
100005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_WCSWIDTH@
100105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_WCSWIDTH@
100205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
100305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   undef wcswidth
100405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define wcswidth rpl_wcswidth
100505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
100605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
100705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 _GL_ATTRIBUTE_PURE);
100805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
100905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
101005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if !@HAVE_WCSWIDTH@
101105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
101205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 _GL_ATTRIBUTE_PURE);
101305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
101405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
101505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
101605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (wcswidth);
101705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK
101805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef wcswidth
101905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_WCSWIDTH
102005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
102105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 "use gnulib module wcswidth for portability");
102205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
102305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
102405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
102505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
102605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_WCHAR_H */
102705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_WCHAR_H */
102805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
1029