Home | History | Annotate | Line # | Download | only in import
wchar.in.h revision 1.1.1.2
      1 /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
      2 
      3    Copyright (C) 2007-2022 Free Software Foundation, Inc.
      4 
      5    This file is free software: you can redistribute it and/or modify
      6    it under the terms of the GNU Lesser General Public License as
      7    published by the Free Software Foundation; either version 2.1 of the
      8    License, or (at your option) any later version.
      9 
     10    This file is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13    GNU Lesser General Public License for more details.
     14 
     15    You should have received a copy of the GNU Lesser General Public License
     16    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
     17 
     18 /* Written by Eric Blake.  */
     19 
     20 /*
     21  * ISO C 99 <wchar.h> for platforms that have issues.
     22  * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html>
     23  *
     24  * For now, this just ensures proper prerequisite inclusion order and
     25  * the declaration of wcwidth().
     26  */
     27 
     28 #if __GNUC__ >= 3
     29 @PRAGMA_SYSTEM_HEADER@
     30 #endif
     31 @PRAGMA_COLUMNS@
     32 
     33 #if (((defined __need_mbstate_t || defined __need_wint_t)               \
     34       && !defined __MINGW32__)                                          \
     35      || (defined __hpux                                                 \
     36          && ((defined _INTTYPES_INCLUDED                                \
     37               && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H)     \
     38              || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H))               \
     39      || (defined __MINGW32__ && defined __STRING_H_SOURCED__)           \
     40      || defined _GL_ALREADY_INCLUDING_WCHAR_H)
     41 /* Special invocation convention:
     42    - Inside glibc and uClibc header files, but not MinGW.
     43    - On HP-UX 11.00 we have a sequence of nested includes
     44      <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
     45      once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
     46      and once directly.  In both situations 'wint_t' is not yet defined,
     47      therefore we cannot provide the function overrides; instead include only
     48      the system's <wchar.h>.
     49    - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of
     50      <wchar.h> is actually processed, and that doesn't include 'mbstate_t'.
     51    - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
     52      the latter includes <wchar.h>.  But here, we have no way to detect whether
     53      <wctype.h> is completely included or is still being included.  */
     54 
     55 #@INCLUDE_NEXT@ @NEXT_WCHAR_H@
     56 
     57 #else
     58 /* Normal invocation convention.  */
     59 
     60 #ifndef _@GUARD_PREFIX@_WCHAR_H
     61 
     62 #define _GL_ALREADY_INCLUDING_WCHAR_H
     63 
     64 #if @HAVE_FEATURES_H@
     65 # include <features.h> /* for __GLIBC__ */
     66 #endif
     67 
     68 /* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
     69    by <stddef.h>.
     70    But avoid namespace pollution on glibc systems.  */
     71 #if !(defined __GLIBC__ && !defined __UCLIBC__)
     72 # include <stddef.h>
     73 #endif
     74 
     75 /* Include the original <wchar.h> if it exists.
     76    Some builds of uClibc lack it.  */
     77 /* The include_next requires a split double-inclusion guard.  */
     78 #if @HAVE_WCHAR_H@
     79 # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
     80 #endif
     81 
     82 #undef _GL_ALREADY_INCLUDING_WCHAR_H
     83 
     84 #ifndef _@GUARD_PREFIX@_WCHAR_H
     85 #define _@GUARD_PREFIX@_WCHAR_H
     86 
     87 /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
     88    that can be freed by passing them as the Ith argument to the
     89    function F.  */
     90 #ifndef _GL_ATTRIBUTE_DEALLOC
     91 # if __GNUC__ >= 11
     92 #  define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
     93 # else
     94 #  define _GL_ATTRIBUTE_DEALLOC(f, i)
     95 # endif
     96 #endif
     97 
     98 /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
     99    can be freed via 'free'; it can be used only after declaring 'free'.  */
    100 /* Applies to: functions.  Cannot be used on inline functions.  */
    101 #ifndef _GL_ATTRIBUTE_DEALLOC_FREE
    102 # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
    103 #endif
    104 
    105 /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
    106    allocated memory.  */
    107 /* Applies to: functions.  */
    108 #ifndef _GL_ATTRIBUTE_MALLOC
    109 # if __GNUC__ >= 3 || defined __clang__
    110 #  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
    111 # else
    112 #  define _GL_ATTRIBUTE_MALLOC
    113 # endif
    114 #endif
    115 
    116 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    117    The attribute __pure__ was added in gcc 2.96.  */
    118 #ifndef _GL_ATTRIBUTE_PURE
    119 # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__
    120 #  define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
    121 # else
    122 #  define _GL_ATTRIBUTE_PURE /* empty */
    123 # endif
    124 #endif
    125 
    126 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
    127 
    128 /* The definition of _GL_ARG_NONNULL is copied here.  */
    129 
    130 /* The definition of _GL_WARN_ON_USE is copied here.  */
    131 
    132 
    133 /* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
    134 #if !@HAVE_WINT_T@ && !defined wint_t
    135 # define wint_t int
    136 # ifndef WEOF
    137 #  define WEOF -1
    138 # endif
    139 #else
    140 /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
    141    <stddef.h>.  This is too small: ISO C 99 section 7.24.1.(2) says that
    142    wint_t must be "unchanged by default argument promotions".  Override it.  */
    143 # if @GNULIBHEADERS_OVERRIDE_WINT_T@
    144 #  if !GNULIB_defined_wint_t
    145 #   if @HAVE_CRTDEFS_H@
    146 #    include <crtdefs.h>
    147 #   else
    148 #    include <stddef.h>
    149 #   endif
    150 typedef unsigned int rpl_wint_t;
    151 #   undef wint_t
    152 #   define wint_t rpl_wint_t
    153 #   define GNULIB_defined_wint_t 1
    154 #  endif
    155 # endif
    156 # ifndef WEOF
    157 #  define WEOF ((wint_t) -1)
    158 # endif
    159 #endif
    160 
    161 
    162 /* Override mbstate_t if it is too small.
    163    On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
    164    implementing mbrtowc for encodings like UTF-8.
    165    On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is
    166    large enough and overriding it would cause problems in C++ mode.  */
    167 #if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
    168 # if !GNULIB_defined_mbstate_t
    169 #  if !(defined _AIX || defined _MSC_VER)
    170 typedef int rpl_mbstate_t;
    171 #   undef mbstate_t
    172 #   define mbstate_t rpl_mbstate_t
    173 #  endif
    174 #  define GNULIB_defined_mbstate_t 1
    175 # endif
    176 #endif
    177 
    178 /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
    179    been included yet.  */
    180 #if @GNULIB_FREE_POSIX@
    181 # if (@REPLACE_FREE@ && !defined free \
    182       && !(defined __cplusplus && defined GNULIB_NAMESPACE))
    183 /* We can't do '#define free rpl_free' here.  */
    184 _GL_EXTERN_C void rpl_free (void *);
    185 #  undef _GL_ATTRIBUTE_DEALLOC_FREE
    186 #  define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1)
    187 # else
    188 #  if defined _MSC_VER
    189 _GL_EXTERN_C void __cdecl free (void *);
    190 #  else
    191 #   if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
    192 _GL_EXTERN_C void free (void *) throw ();
    193 #   else
    194 _GL_EXTERN_C void free (void *);
    195 #   endif
    196 #  endif
    197 # endif
    198 #else
    199 # if defined _MSC_VER
    200 _GL_EXTERN_C void __cdecl free (void *);
    201 # else
    202 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
    203 _GL_EXTERN_C void free (void *) throw ();
    204 #  else
    205 _GL_EXTERN_C void free (void *);
    206 #  endif
    207 # endif
    208 #endif
    209 
    210 /* Convert a single-byte character to a wide character.  */
    211 #if @GNULIB_BTOWC@
    212 # if @REPLACE_BTOWC@
    213 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    214 #   undef btowc
    215 #   define btowc rpl_btowc
    216 #  endif
    217 _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
    218 _GL_CXXALIAS_RPL (btowc, wint_t, (int c));
    219 # else
    220 #  if !@HAVE_BTOWC@
    221 _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
    222 #  endif
    223 /* Need to cast, because on mingw, the return type is 'unsigned short'.  */
    224 _GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c));
    225 # endif
    226 # if __GLIBC__ >= 2
    227 _GL_CXXALIASWARN (btowc);
    228 # endif
    229 #elif defined GNULIB_POSIXCHECK
    230 # undef btowc
    231 # if HAVE_RAW_DECL_BTOWC
    232 _GL_WARN_ON_USE (btowc, "btowc is unportable - "
    233                  "use gnulib module btowc for portability");
    234 # endif
    235 #endif
    236 
    237 
    238 /* Convert a wide character to a single-byte character.  */
    239 #if @GNULIB_WCTOB@
    240 # if @REPLACE_WCTOB@
    241 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    242 #   undef wctob
    243 #   define wctob rpl_wctob
    244 #  endif
    245 _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
    246 _GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
    247 # else
    248 #  if !defined wctob && !@HAVE_DECL_WCTOB@
    249 /* wctob is provided by gnulib, or wctob exists but is not declared.  */
    250 _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
    251 #  endif
    252 _GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
    253 # endif
    254 # if __GLIBC__ >= 2
    255 _GL_CXXALIASWARN (wctob);
    256 # endif
    257 #elif defined GNULIB_POSIXCHECK
    258 # undef wctob
    259 # if HAVE_RAW_DECL_WCTOB
    260 _GL_WARN_ON_USE (wctob, "wctob is unportable - "
    261                  "use gnulib module wctob for portability");
    262 # endif
    263 #endif
    264 
    265 
    266 /* Test whether *PS is in the initial state.  */
    267 #if @GNULIB_MBSINIT@
    268 # if @REPLACE_MBSINIT@
    269 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    270 #   undef mbsinit
    271 #   define mbsinit rpl_mbsinit
    272 #  endif
    273 _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
    274 _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
    275 # else
    276 #  if !@HAVE_MBSINIT@
    277 _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
    278 #  endif
    279 _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
    280 # endif
    281 # if __GLIBC__ >= 2
    282 _GL_CXXALIASWARN (mbsinit);
    283 # endif
    284 #elif defined GNULIB_POSIXCHECK
    285 # undef mbsinit
    286 # if HAVE_RAW_DECL_MBSINIT
    287 _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
    288                  "use gnulib module mbsinit for portability");
    289 # endif
    290 #endif
    291 
    292 
    293 /* Convert a multibyte character to a wide character.  */
    294 #if @GNULIB_MBRTOWC@
    295 # if @REPLACE_MBRTOWC@
    296 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    297 #   undef mbrtowc
    298 #   define mbrtowc rpl_mbrtowc
    299 #  endif
    300 _GL_FUNCDECL_RPL (mbrtowc, size_t,
    301                   (wchar_t *restrict pwc, const char *restrict s, size_t n,
    302                    mbstate_t *restrict ps));
    303 _GL_CXXALIAS_RPL (mbrtowc, size_t,
    304                   (wchar_t *restrict pwc, const char *restrict s, size_t n,
    305                    mbstate_t *restrict ps));
    306 # else
    307 #  if !@HAVE_MBRTOWC@
    308 _GL_FUNCDECL_SYS (mbrtowc, size_t,
    309                   (wchar_t *restrict pwc, const char *restrict s, size_t n,
    310                    mbstate_t *restrict ps));
    311 #  endif
    312 _GL_CXXALIAS_SYS (mbrtowc, size_t,
    313                   (wchar_t *restrict pwc, const char *restrict s, size_t n,
    314                    mbstate_t *restrict ps));
    315 # endif
    316 # if __GLIBC__ >= 2
    317 _GL_CXXALIASWARN (mbrtowc);
    318 # endif
    319 #elif defined GNULIB_POSIXCHECK
    320 # undef mbrtowc
    321 # if HAVE_RAW_DECL_MBRTOWC
    322 _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
    323                  "use gnulib module mbrtowc for portability");
    324 # endif
    325 #endif
    326 
    327 
    328 /* Recognize a multibyte character.  */
    329 #if @GNULIB_MBRLEN@
    330 # if @REPLACE_MBRLEN@
    331 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    332 #   undef mbrlen
    333 #   define mbrlen rpl_mbrlen
    334 #  endif
    335 _GL_FUNCDECL_RPL (mbrlen, size_t,
    336                   (const char *restrict s, size_t n, mbstate_t *restrict ps));
    337 _GL_CXXALIAS_RPL (mbrlen, size_t,
    338                   (const char *restrict s, size_t n, mbstate_t *restrict ps));
    339 # else
    340 #  if !@HAVE_MBRLEN@
    341 _GL_FUNCDECL_SYS (mbrlen, size_t,
    342                   (const char *restrict s, size_t n, mbstate_t *restrict ps));
    343 #  endif
    344 _GL_CXXALIAS_SYS (mbrlen, size_t,
    345                   (const char *restrict s, size_t n, mbstate_t *restrict ps));
    346 # endif
    347 # if __GLIBC__ >= 2
    348 _GL_CXXALIASWARN (mbrlen);
    349 # endif
    350 #elif defined GNULIB_POSIXCHECK
    351 # undef mbrlen
    352 # if HAVE_RAW_DECL_MBRLEN
    353 _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
    354                  "use gnulib module mbrlen for portability");
    355 # endif
    356 #endif
    357 
    358 
    359 /* Convert a string to a wide string.  */
    360 #if @GNULIB_MBSRTOWCS@
    361 # if @REPLACE_MBSRTOWCS@
    362 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    363 #   undef mbsrtowcs
    364 #   define mbsrtowcs rpl_mbsrtowcs
    365 #  endif
    366 _GL_FUNCDECL_RPL (mbsrtowcs, size_t,
    367                   (wchar_t *restrict dest,
    368                    const char **restrict srcp, size_t len,
    369                    mbstate_t *restrict ps)
    370                   _GL_ARG_NONNULL ((2)));
    371 _GL_CXXALIAS_RPL (mbsrtowcs, size_t,
    372                   (wchar_t *restrict dest,
    373                    const char **restrict srcp, size_t len,
    374                    mbstate_t *restrict ps));
    375 # else
    376 #  if !@HAVE_MBSRTOWCS@
    377 _GL_FUNCDECL_SYS (mbsrtowcs, size_t,
    378                   (wchar_t *restrict dest,
    379                    const char **restrict srcp, size_t len,
    380                    mbstate_t *restrict ps)
    381                   _GL_ARG_NONNULL ((2)));
    382 #  endif
    383 _GL_CXXALIAS_SYS (mbsrtowcs, size_t,
    384                   (wchar_t *restrict dest,
    385                    const char **restrict srcp, size_t len,
    386                    mbstate_t *restrict ps));
    387 # endif
    388 # if __GLIBC__ >= 2
    389 _GL_CXXALIASWARN (mbsrtowcs);
    390 # endif
    391 #elif defined GNULIB_POSIXCHECK
    392 # undef mbsrtowcs
    393 # if HAVE_RAW_DECL_MBSRTOWCS
    394 _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
    395                  "use gnulib module mbsrtowcs for portability");
    396 # endif
    397 #endif
    398 
    399 
    400 /* Convert a string to a wide string.  */
    401 #if @GNULIB_MBSNRTOWCS@
    402 # if @REPLACE_MBSNRTOWCS@
    403 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    404 #   undef mbsnrtowcs
    405 #   define mbsnrtowcs rpl_mbsnrtowcs
    406 #  endif
    407 _GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
    408                   (wchar_t *restrict dest,
    409                    const char **restrict srcp, size_t srclen, size_t len,
    410                    mbstate_t *restrict ps)
    411                   _GL_ARG_NONNULL ((2)));
    412 _GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
    413                   (wchar_t *restrict dest,
    414                    const char **restrict srcp, size_t srclen, size_t len,
    415                    mbstate_t *restrict ps));
    416 # else
    417 #  if !@HAVE_MBSNRTOWCS@
    418 _GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
    419                   (wchar_t *restrict dest,
    420                    const char **restrict srcp, size_t srclen, size_t len,
    421                    mbstate_t *restrict ps)
    422                   _GL_ARG_NONNULL ((2)));
    423 #  endif
    424 _GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
    425                   (wchar_t *restrict dest,
    426                    const char **restrict srcp, size_t srclen, size_t len,
    427                    mbstate_t *restrict ps));
    428 # endif
    429 _GL_CXXALIASWARN (mbsnrtowcs);
    430 #elif defined GNULIB_POSIXCHECK
    431 # undef mbsnrtowcs
    432 # if HAVE_RAW_DECL_MBSNRTOWCS
    433 _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
    434                  "use gnulib module mbsnrtowcs for portability");
    435 # endif
    436 #endif
    437 
    438 
    439 /* Convert a wide character to a multibyte character.  */
    440 #if @GNULIB_WCRTOMB@
    441 # if @REPLACE_WCRTOMB@
    442 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    443 #   undef wcrtomb
    444 #   define wcrtomb rpl_wcrtomb
    445 #  endif
    446 _GL_FUNCDECL_RPL (wcrtomb, size_t,
    447                   (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
    448 _GL_CXXALIAS_RPL (wcrtomb, size_t,
    449                   (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
    450 # else
    451 #  if !@HAVE_WCRTOMB@
    452 _GL_FUNCDECL_SYS (wcrtomb, size_t,
    453                   (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
    454 #  endif
    455 _GL_CXXALIAS_SYS (wcrtomb, size_t,
    456                   (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
    457 # endif
    458 # if __GLIBC__ >= 2
    459 _GL_CXXALIASWARN (wcrtomb);
    460 # endif
    461 #elif defined GNULIB_POSIXCHECK
    462 # undef wcrtomb
    463 # if HAVE_RAW_DECL_WCRTOMB
    464 _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
    465                  "use gnulib module wcrtomb for portability");
    466 # endif
    467 #endif
    468 
    469 
    470 /* Convert a wide string to a string.  */
    471 #if @GNULIB_WCSRTOMBS@
    472 # if @REPLACE_WCSRTOMBS@
    473 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    474 #   undef wcsrtombs
    475 #   define wcsrtombs rpl_wcsrtombs
    476 #  endif
    477 _GL_FUNCDECL_RPL (wcsrtombs, size_t,
    478                   (char *restrict dest, const wchar_t **restrict srcp,
    479                    size_t len,
    480                    mbstate_t *restrict ps)
    481                   _GL_ARG_NONNULL ((2)));
    482 _GL_CXXALIAS_RPL (wcsrtombs, size_t,
    483                   (char *restrict dest, const wchar_t **restrict srcp,
    484                    size_t len,
    485                    mbstate_t *restrict ps));
    486 # else
    487 #  if !@HAVE_WCSRTOMBS@
    488 _GL_FUNCDECL_SYS (wcsrtombs, size_t,
    489                   (char *restrict dest, const wchar_t **restrict srcp,
    490                    size_t len,
    491                    mbstate_t *restrict ps)
    492                   _GL_ARG_NONNULL ((2)));
    493 #  endif
    494 _GL_CXXALIAS_SYS (wcsrtombs, size_t,
    495                   (char *restrict dest, const wchar_t **restrict srcp,
    496                    size_t len,
    497                    mbstate_t *restrict ps));
    498 # endif
    499 # if __GLIBC__ >= 2
    500 _GL_CXXALIASWARN (wcsrtombs);
    501 # endif
    502 #elif defined GNULIB_POSIXCHECK
    503 # undef wcsrtombs
    504 # if HAVE_RAW_DECL_WCSRTOMBS
    505 _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
    506                  "use gnulib module wcsrtombs for portability");
    507 # endif
    508 #endif
    509 
    510 
    511 /* Convert a wide string to a string.  */
    512 #if @GNULIB_WCSNRTOMBS@
    513 # if @REPLACE_WCSNRTOMBS@
    514 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    515 #   undef wcsnrtombs
    516 #   define wcsnrtombs rpl_wcsnrtombs
    517 #  endif
    518 _GL_FUNCDECL_RPL (wcsnrtombs, size_t,
    519                   (char *restrict dest,
    520                    const wchar_t **restrict srcp, size_t srclen,
    521                    size_t len,
    522                    mbstate_t *restrict ps)
    523                   _GL_ARG_NONNULL ((2)));
    524 _GL_CXXALIAS_RPL (wcsnrtombs, size_t,
    525                   (char *restrict dest,
    526                    const wchar_t **restrict srcp, size_t srclen,
    527                    size_t len,
    528                    mbstate_t *restrict ps));
    529 # else
    530 #  if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun)
    531 _GL_FUNCDECL_SYS (wcsnrtombs, size_t,
    532                   (char *restrict dest,
    533                    const wchar_t **restrict srcp, size_t srclen,
    534                    size_t len,
    535                    mbstate_t *restrict ps)
    536                   _GL_ARG_NONNULL ((2)));
    537 #  endif
    538 _GL_CXXALIAS_SYS (wcsnrtombs, size_t,
    539                   (char *restrict dest,
    540                    const wchar_t **restrict srcp, size_t srclen,
    541                    size_t len,
    542                    mbstate_t *restrict ps));
    543 # endif
    544 # if __GLIBC__ >= 2
    545 _GL_CXXALIASWARN (wcsnrtombs);
    546 # endif
    547 #elif defined GNULIB_POSIXCHECK
    548 # undef wcsnrtombs
    549 # if HAVE_RAW_DECL_WCSNRTOMBS
    550 _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
    551                  "use gnulib module wcsnrtombs for portability");
    552 # endif
    553 #endif
    554 
    555 
    556 /* Return the number of screen columns needed for WC.  */
    557 #if @GNULIB_WCWIDTH@
    558 # if @REPLACE_WCWIDTH@
    559 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    560 #   undef wcwidth
    561 #   define wcwidth rpl_wcwidth
    562 #  endif
    563 _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
    564 _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
    565 # else
    566 #  if !@HAVE_DECL_WCWIDTH@
    567 /* wcwidth exists but is not declared.  */
    568 _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
    569 #  endif
    570 _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
    571 # endif
    572 # if __GLIBC__ >= 2
    573 _GL_CXXALIASWARN (wcwidth);
    574 # endif
    575 #elif defined GNULIB_POSIXCHECK
    576 # undef wcwidth
    577 # if HAVE_RAW_DECL_WCWIDTH
    578 _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
    579                  "use gnulib module wcwidth for portability");
    580 # endif
    581 #endif
    582 
    583 
    584 /* Search N wide characters of S for C.  */
    585 #if @GNULIB_WMEMCHR@
    586 # if !@HAVE_WMEMCHR@
    587 _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
    588                                       _GL_ATTRIBUTE_PURE);
    589 # endif
    590   /* On some systems, this function is defined as an overloaded function:
    591        extern "C++" {
    592          const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
    593          wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
    594        }  */
    595 _GL_CXXALIAS_SYS_CAST2 (wmemchr,
    596                         wchar_t *, (const wchar_t *, wchar_t, size_t),
    597                         const wchar_t *, (const wchar_t *, wchar_t, size_t));
    598 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
    599      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
    600 _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
    601 _GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
    602                    (const wchar_t *s, wchar_t c, size_t n));
    603 # elif __GLIBC__ >= 2
    604 _GL_CXXALIASWARN (wmemchr);
    605 # endif
    606 #elif defined GNULIB_POSIXCHECK
    607 # undef wmemchr
    608 # if HAVE_RAW_DECL_WMEMCHR
    609 _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
    610                  "use gnulib module wmemchr for portability");
    611 # endif
    612 #endif
    613 
    614 
    615 /* Compare N wide characters of S1 and S2.  */
    616 #if @GNULIB_WMEMCMP@
    617 # if !@HAVE_WMEMCMP@
    618 _GL_FUNCDECL_SYS (wmemcmp, int,
    619                   (const wchar_t *s1, const wchar_t *s2, size_t n)
    620                   _GL_ATTRIBUTE_PURE);
    621 # endif
    622 _GL_CXXALIAS_SYS (wmemcmp, int,
    623                   (const wchar_t *s1, const wchar_t *s2, size_t n));
    624 # if __GLIBC__ >= 2
    625 _GL_CXXALIASWARN (wmemcmp);
    626 # endif
    627 #elif defined GNULIB_POSIXCHECK
    628 # undef wmemcmp
    629 # if HAVE_RAW_DECL_WMEMCMP
    630 _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
    631                  "use gnulib module wmemcmp for portability");
    632 # endif
    633 #endif
    634 
    635 
    636 /* Copy N wide characters of SRC to DEST.  */
    637 #if @GNULIB_WMEMCPY@
    638 # if !@HAVE_WMEMCPY@
    639 _GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
    640                   (wchar_t *restrict dest,
    641                    const wchar_t *restrict src, size_t n));
    642 # endif
    643 _GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
    644                   (wchar_t *restrict dest,
    645                    const wchar_t *restrict src, size_t n));
    646 # if __GLIBC__ >= 2
    647 _GL_CXXALIASWARN (wmemcpy);
    648 # endif
    649 #elif defined GNULIB_POSIXCHECK
    650 # undef wmemcpy
    651 # if HAVE_RAW_DECL_WMEMCPY
    652 _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
    653                  "use gnulib module wmemcpy for portability");
    654 # endif
    655 #endif
    656 
    657 
    658 /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
    659    overlapping memory areas.  */
    660 #if @GNULIB_WMEMMOVE@
    661 # if !@HAVE_WMEMMOVE@
    662 _GL_FUNCDECL_SYS (wmemmove, wchar_t *,
    663                   (wchar_t *dest, const wchar_t *src, size_t n));
    664 # endif
    665 _GL_CXXALIAS_SYS (wmemmove, wchar_t *,
    666                   (wchar_t *dest, const wchar_t *src, size_t n));
    667 # if __GLIBC__ >= 2
    668 _GL_CXXALIASWARN (wmemmove);
    669 # endif
    670 #elif defined GNULIB_POSIXCHECK
    671 # undef wmemmove
    672 # if HAVE_RAW_DECL_WMEMMOVE
    673 _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
    674                  "use gnulib module wmemmove for portability");
    675 # endif
    676 #endif
    677 
    678 
    679 /* Copy N wide characters of SRC to DEST.
    680    Return pointer to wide characters after the last written wide character.  */
    681 #if @GNULIB_WMEMPCPY@
    682 # if !@HAVE_WMEMPCPY@
    683 _GL_FUNCDECL_SYS (wmempcpy, wchar_t *,
    684                   (wchar_t *restrict dest,
    685                    const wchar_t *restrict src, size_t n));
    686 # endif
    687 _GL_CXXALIAS_SYS (wmempcpy, wchar_t *,
    688                   (wchar_t *restrict dest,
    689                    const wchar_t *restrict src, size_t n));
    690 # if __GLIBC__ >= 2
    691 _GL_CXXALIASWARN (wmempcpy);
    692 # endif
    693 #elif defined GNULIB_POSIXCHECK
    694 # undef wmempcpy
    695 # if HAVE_RAW_DECL_WMEMPCPY
    696 _GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - "
    697                  "use gnulib module wmempcpy for portability");
    698 # endif
    699 #endif
    700 
    701 
    702 /* Set N wide characters of S to C.  */
    703 #if @GNULIB_WMEMSET@
    704 # if !@HAVE_WMEMSET@
    705 _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
    706 # endif
    707 _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
    708 # if __GLIBC__ >= 2
    709 _GL_CXXALIASWARN (wmemset);
    710 # endif
    711 #elif defined GNULIB_POSIXCHECK
    712 # undef wmemset
    713 # if HAVE_RAW_DECL_WMEMSET
    714 _GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
    715                  "use gnulib module wmemset for portability");
    716 # endif
    717 #endif
    718 
    719 
    720 /* Return the number of wide characters in S.  */
    721 #if @GNULIB_WCSLEN@
    722 # if !@HAVE_WCSLEN@
    723 _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
    724 # endif
    725 _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
    726 # if __GLIBC__ >= 2
    727 _GL_CXXALIASWARN (wcslen);
    728 # endif
    729 #elif defined GNULIB_POSIXCHECK
    730 # undef wcslen
    731 # if HAVE_RAW_DECL_WCSLEN
    732 _GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
    733                  "use gnulib module wcslen for portability");
    734 # endif
    735 #endif
    736 
    737 
    738 /* Return the number of wide characters in S, but at most MAXLEN.  */
    739 #if @GNULIB_WCSNLEN@
    740 # if !@HAVE_WCSNLEN@
    741 _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
    742                                    _GL_ATTRIBUTE_PURE);
    743 # endif
    744 _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
    745 _GL_CXXALIASWARN (wcsnlen);
    746 #elif defined GNULIB_POSIXCHECK
    747 # undef wcsnlen
    748 # if HAVE_RAW_DECL_WCSNLEN
    749 _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
    750                  "use gnulib module wcsnlen for portability");
    751 # endif
    752 #endif
    753 
    754 
    755 /* Copy SRC to DEST.  */
    756 #if @GNULIB_WCSCPY@
    757 # if !@HAVE_WCSCPY@
    758 _GL_FUNCDECL_SYS (wcscpy, wchar_t *,
    759                   (wchar_t *restrict dest, const wchar_t *restrict src));
    760 # endif
    761 _GL_CXXALIAS_SYS (wcscpy, wchar_t *,
    762                   (wchar_t *restrict dest, const wchar_t *restrict src));
    763 # if __GLIBC__ >= 2
    764 _GL_CXXALIASWARN (wcscpy);
    765 # endif
    766 #elif defined GNULIB_POSIXCHECK
    767 # undef wcscpy
    768 # if HAVE_RAW_DECL_WCSCPY
    769 _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
    770                  "use gnulib module wcscpy for portability");
    771 # endif
    772 #endif
    773 
    774 
    775 /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
    776 #if @GNULIB_WCPCPY@
    777 # if !@HAVE_WCPCPY@
    778 _GL_FUNCDECL_SYS (wcpcpy, wchar_t *,
    779                   (wchar_t *restrict dest, const wchar_t *restrict src));
    780 # endif
    781 _GL_CXXALIAS_SYS (wcpcpy, wchar_t *,
    782                   (wchar_t *restrict dest, const wchar_t *restrict src));
    783 _GL_CXXALIASWARN (wcpcpy);
    784 #elif defined GNULIB_POSIXCHECK
    785 # undef wcpcpy
    786 # if HAVE_RAW_DECL_WCPCPY
    787 _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
    788                  "use gnulib module wcpcpy for portability");
    789 # endif
    790 #endif
    791 
    792 
    793 /* Copy no more than N wide characters of SRC to DEST.  */
    794 #if @GNULIB_WCSNCPY@
    795 # if !@HAVE_WCSNCPY@
    796 _GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
    797                   (wchar_t *restrict dest,
    798                    const wchar_t *restrict src, size_t n));
    799 # endif
    800 _GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
    801                   (wchar_t *restrict dest,
    802                    const wchar_t *restrict src, size_t n));
    803 # if __GLIBC__ >= 2
    804 _GL_CXXALIASWARN (wcsncpy);
    805 # endif
    806 #elif defined GNULIB_POSIXCHECK
    807 # undef wcsncpy
    808 # if HAVE_RAW_DECL_WCSNCPY
    809 _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
    810                  "use gnulib module wcsncpy for portability");
    811 # endif
    812 #endif
    813 
    814 
    815 /* Copy no more than N characters of SRC to DEST, returning the address of
    816    the last character written into DEST.  */
    817 #if @GNULIB_WCPNCPY@
    818 # if !@HAVE_WCPNCPY@
    819 _GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
    820                   (wchar_t *restrict dest,
    821                    const wchar_t *restrict src, size_t n));
    822 # endif
    823 _GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
    824                   (wchar_t *restrict dest,
    825                    const wchar_t *restrict src, size_t n));
    826 _GL_CXXALIASWARN (wcpncpy);
    827 #elif defined GNULIB_POSIXCHECK
    828 # undef wcpncpy
    829 # if HAVE_RAW_DECL_WCPNCPY
    830 _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
    831                  "use gnulib module wcpncpy for portability");
    832 # endif
    833 #endif
    834 
    835 
    836 /* Append SRC onto DEST.  */
    837 #if @GNULIB_WCSCAT@
    838 # if !@HAVE_WCSCAT@
    839 _GL_FUNCDECL_SYS (wcscat, wchar_t *,
    840                   (wchar_t *restrict dest, const wchar_t *restrict src));
    841 # endif
    842 _GL_CXXALIAS_SYS (wcscat, wchar_t *,
    843                   (wchar_t *restrict dest, const wchar_t *restrict src));
    844 # if __GLIBC__ >= 2
    845 _GL_CXXALIASWARN (wcscat);
    846 # endif
    847 #elif defined GNULIB_POSIXCHECK
    848 # undef wcscat
    849 # if HAVE_RAW_DECL_WCSCAT
    850 _GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
    851                  "use gnulib module wcscat for portability");
    852 # endif
    853 #endif
    854 
    855 
    856 /* Append no more than N wide characters of SRC onto DEST.  */
    857 #if @GNULIB_WCSNCAT@
    858 # if !@HAVE_WCSNCAT@
    859 _GL_FUNCDECL_SYS (wcsncat, wchar_t *,
    860                   (wchar_t *restrict dest, const wchar_t *restrict src,
    861                    size_t n));
    862 # endif
    863 _GL_CXXALIAS_SYS (wcsncat, wchar_t *,
    864                   (wchar_t *restrict dest, const wchar_t *restrict src,
    865                    size_t n));
    866 # if __GLIBC__ >= 2
    867 _GL_CXXALIASWARN (wcsncat);
    868 # endif
    869 #elif defined GNULIB_POSIXCHECK
    870 # undef wcsncat
    871 # if HAVE_RAW_DECL_WCSNCAT
    872 _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
    873                  "use gnulib module wcsncat for portability");
    874 # endif
    875 #endif
    876 
    877 
    878 /* Compare S1 and S2.  */
    879 #if @GNULIB_WCSCMP@
    880 # if !@HAVE_WCSCMP@
    881 _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
    882                                _GL_ATTRIBUTE_PURE);
    883 # endif
    884 _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
    885 # if __GLIBC__ >= 2
    886 _GL_CXXALIASWARN (wcscmp);
    887 # endif
    888 #elif defined GNULIB_POSIXCHECK
    889 # undef wcscmp
    890 # if HAVE_RAW_DECL_WCSCMP
    891 _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
    892                  "use gnulib module wcscmp for portability");
    893 # endif
    894 #endif
    895 
    896 
    897 /* Compare no more than N wide characters of S1 and S2.  */
    898 #if @GNULIB_WCSNCMP@
    899 # if !@HAVE_WCSNCMP@
    900 _GL_FUNCDECL_SYS (wcsncmp, int,
    901                   (const wchar_t *s1, const wchar_t *s2, size_t n)
    902                   _GL_ATTRIBUTE_PURE);
    903 # endif
    904 _GL_CXXALIAS_SYS (wcsncmp, int,
    905                   (const wchar_t *s1, const wchar_t *s2, size_t n));
    906 # if __GLIBC__ >= 2
    907 _GL_CXXALIASWARN (wcsncmp);
    908 # endif
    909 #elif defined GNULIB_POSIXCHECK
    910 # undef wcsncmp
    911 # if HAVE_RAW_DECL_WCSNCMP
    912 _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
    913                  "use gnulib module wcsncmp for portability");
    914 # endif
    915 #endif
    916 
    917 
    918 /* Compare S1 and S2, ignoring case.  */
    919 #if @GNULIB_WCSCASECMP@
    920 # if !@HAVE_WCSCASECMP@
    921 _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
    922                                    _GL_ATTRIBUTE_PURE);
    923 # endif
    924 _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
    925 _GL_CXXALIASWARN (wcscasecmp);
    926 #elif defined GNULIB_POSIXCHECK
    927 # undef wcscasecmp
    928 # if HAVE_RAW_DECL_WCSCASECMP
    929 _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
    930                  "use gnulib module wcscasecmp for portability");
    931 # endif
    932 #endif
    933 
    934 
    935 /* Compare no more than N chars of S1 and S2, ignoring case.  */
    936 #if @GNULIB_WCSNCASECMP@
    937 # if !@HAVE_WCSNCASECMP@
    938 _GL_FUNCDECL_SYS (wcsncasecmp, int,
    939                   (const wchar_t *s1, const wchar_t *s2, size_t n)
    940                   _GL_ATTRIBUTE_PURE);
    941 # endif
    942 _GL_CXXALIAS_SYS (wcsncasecmp, int,
    943                   (const wchar_t *s1, const wchar_t *s2, size_t n));
    944 _GL_CXXALIASWARN (wcsncasecmp);
    945 #elif defined GNULIB_POSIXCHECK
    946 # undef wcsncasecmp
    947 # if HAVE_RAW_DECL_WCSNCASECMP
    948 _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
    949                  "use gnulib module wcsncasecmp for portability");
    950 # endif
    951 #endif
    952 
    953 
    954 /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
    955    category of the current locale.  */
    956 #if @GNULIB_WCSCOLL@
    957 # if !@HAVE_WCSCOLL@
    958 _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
    959 # endif
    960 _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
    961 # if __GLIBC__ >= 2
    962 _GL_CXXALIASWARN (wcscoll);
    963 # endif
    964 #elif defined GNULIB_POSIXCHECK
    965 # undef wcscoll
    966 # if HAVE_RAW_DECL_WCSCOLL
    967 _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
    968                  "use gnulib module wcscoll for portability");
    969 # endif
    970 #endif
    971 
    972 
    973 /* Transform S2 into array pointed to by S1 such that if wcscmp is applied
    974    to two transformed strings the result is the as applying 'wcscoll' to the
    975    original strings.  */
    976 #if @GNULIB_WCSXFRM@
    977 # if !@HAVE_WCSXFRM@
    978 _GL_FUNCDECL_SYS (wcsxfrm, size_t,
    979                   (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));
    980 # endif
    981 _GL_CXXALIAS_SYS (wcsxfrm, size_t,
    982                   (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));
    983 # if __GLIBC__ >= 2
    984 _GL_CXXALIASWARN (wcsxfrm);
    985 # endif
    986 #elif defined GNULIB_POSIXCHECK
    987 # undef wcsxfrm
    988 # if HAVE_RAW_DECL_WCSXFRM
    989 _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
    990                  "use gnulib module wcsxfrm for portability");
    991 # endif
    992 #endif
    993 
    994 
    995 /* Duplicate S, returning an identical malloc'd string.  */
    996 #if @GNULIB_WCSDUP@
    997 # if defined _WIN32 && !defined __CYGWIN__
    998 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    999 #   undef wcsdup
   1000 #   define wcsdup _wcsdup
   1001 #  endif
   1002 _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
   1003 # else
   1004 #  if !@HAVE_WCSDUP@ || __GNUC__ >= 11
   1005 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
   1006                   (const wchar_t *s)
   1007                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
   1008 #  endif
   1009 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
   1010 # endif
   1011 _GL_CXXALIASWARN (wcsdup);
   1012 #else
   1013 # if __GNUC__ >= 11 && !defined wcsdup
   1014 /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free.  */
   1015 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
   1016                   (const wchar_t *s)
   1017                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
   1018 # endif
   1019 # if defined GNULIB_POSIXCHECK
   1020 #  undef wcsdup
   1021 #  if HAVE_RAW_DECL_WCSDUP
   1022 _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
   1023                  "use gnulib module wcsdup for portability");
   1024 #  endif
   1025 # elif @GNULIB_MDA_WCSDUP@
   1026 /* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not
   1027    required.  In C++ with GNULIB_NAMESPACE, avoid differences between
   1028    platforms by defining GNULIB_NAMESPACE::wcsdup always.  */
   1029 #  if defined _WIN32 && !defined __CYGWIN__
   1030 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   1031 #    undef wcsdup
   1032 #    define wcsdup _wcsdup
   1033 #   endif
   1034 _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
   1035 #  else
   1036 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
   1037                   (const wchar_t *s)
   1038                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
   1039 #   if @HAVE_DECL_WCSDUP@
   1040 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
   1041 #   endif
   1042 #  endif
   1043 #  if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@
   1044 _GL_CXXALIASWARN (wcsdup);
   1045 #  endif
   1046 # endif
   1047 #endif
   1048 
   1049 
   1050 /* Find the first occurrence of WC in WCS.  */
   1051 #if @GNULIB_WCSCHR@
   1052 # if !@HAVE_WCSCHR@
   1053 _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
   1054                                      _GL_ATTRIBUTE_PURE);
   1055 # endif
   1056   /* On some systems, this function is defined as an overloaded function:
   1057        extern "C++" {
   1058          const wchar_t * std::wcschr (const wchar_t *, wchar_t);
   1059          wchar_t * std::wcschr (wchar_t *, wchar_t);
   1060        }  */
   1061 _GL_CXXALIAS_SYS_CAST2 (wcschr,
   1062                         wchar_t *, (const wchar_t *, wchar_t),
   1063                         const wchar_t *, (const wchar_t *, wchar_t));
   1064 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
   1065      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
   1066 _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
   1067 _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
   1068 # elif __GLIBC__ >= 2
   1069 _GL_CXXALIASWARN (wcschr);
   1070 # endif
   1071 #elif defined GNULIB_POSIXCHECK
   1072 # undef wcschr
   1073 # if HAVE_RAW_DECL_WCSCHR
   1074 _GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
   1075                  "use gnulib module wcschr for portability");
   1076 # endif
   1077 #endif
   1078 
   1079 
   1080 /* Find the last occurrence of WC in WCS.  */
   1081 #if @GNULIB_WCSRCHR@
   1082 # if !@HAVE_WCSRCHR@
   1083 _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
   1084                                       _GL_ATTRIBUTE_PURE);
   1085 # endif
   1086   /* On some systems, this function is defined as an overloaded function:
   1087        extern "C++" {
   1088          const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
   1089          wchar_t * std::wcsrchr (wchar_t *, wchar_t);
   1090        }  */
   1091 _GL_CXXALIAS_SYS_CAST2 (wcsrchr,
   1092                         wchar_t *, (const wchar_t *, wchar_t),
   1093                         const wchar_t *, (const wchar_t *, wchar_t));
   1094 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
   1095      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
   1096 _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
   1097 _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
   1098 # elif __GLIBC__ >= 2
   1099 _GL_CXXALIASWARN (wcsrchr);
   1100 # endif
   1101 #elif defined GNULIB_POSIXCHECK
   1102 # undef wcsrchr
   1103 # if HAVE_RAW_DECL_WCSRCHR
   1104 _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
   1105                  "use gnulib module wcsrchr for portability");
   1106 # endif
   1107 #endif
   1108 
   1109 
   1110 /* Return the length of the initial segmet of WCS which consists entirely
   1111    of wide characters not in REJECT.  */
   1112 #if @GNULIB_WCSCSPN@
   1113 # if !@HAVE_WCSCSPN@
   1114 _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
   1115                                    _GL_ATTRIBUTE_PURE);
   1116 # endif
   1117 _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
   1118 # if __GLIBC__ >= 2
   1119 _GL_CXXALIASWARN (wcscspn);
   1120 # endif
   1121 #elif defined GNULIB_POSIXCHECK
   1122 # undef wcscspn
   1123 # if HAVE_RAW_DECL_WCSCSPN
   1124 _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
   1125                  "use gnulib module wcscspn for portability");
   1126 # endif
   1127 #endif
   1128 
   1129 
   1130 /* Return the length of the initial segmet of WCS which consists entirely
   1131    of wide characters in ACCEPT.  */
   1132 #if @GNULIB_WCSSPN@
   1133 # if !@HAVE_WCSSPN@
   1134 _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
   1135                                   _GL_ATTRIBUTE_PURE);
   1136 # endif
   1137 _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
   1138 # if __GLIBC__ >= 2
   1139 _GL_CXXALIASWARN (wcsspn);
   1140 # endif
   1141 #elif defined GNULIB_POSIXCHECK
   1142 # undef wcsspn
   1143 # if HAVE_RAW_DECL_WCSSPN
   1144 _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
   1145                  "use gnulib module wcsspn for portability");
   1146 # endif
   1147 #endif
   1148 
   1149 
   1150 /* Find the first occurrence in WCS of any character in ACCEPT.  */
   1151 #if @GNULIB_WCSPBRK@
   1152 # if !@HAVE_WCSPBRK@
   1153 _GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
   1154                   (const wchar_t *wcs, const wchar_t *accept)
   1155                   _GL_ATTRIBUTE_PURE);
   1156 # endif
   1157   /* On some systems, this function is defined as an overloaded function:
   1158        extern "C++" {
   1159          const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
   1160          wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
   1161        }  */
   1162 _GL_CXXALIAS_SYS_CAST2 (wcspbrk,
   1163                         wchar_t *, (const wchar_t *, const wchar_t *),
   1164                         const wchar_t *, (const wchar_t *, const wchar_t *));
   1165 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
   1166      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
   1167 _GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
   1168                    (wchar_t *wcs, const wchar_t *accept));
   1169 _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
   1170                    (const wchar_t *wcs, const wchar_t *accept));
   1171 # elif __GLIBC__ >= 2
   1172 _GL_CXXALIASWARN (wcspbrk);
   1173 # endif
   1174 #elif defined GNULIB_POSIXCHECK
   1175 # undef wcspbrk
   1176 # if HAVE_RAW_DECL_WCSPBRK
   1177 _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
   1178                  "use gnulib module wcspbrk for portability");
   1179 # endif
   1180 #endif
   1181 
   1182 
   1183 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
   1184 #if @GNULIB_WCSSTR@
   1185 # if !@HAVE_WCSSTR@
   1186 _GL_FUNCDECL_SYS (wcsstr, wchar_t *,
   1187                   (const wchar_t *restrict haystack,
   1188                    const wchar_t *restrict needle)
   1189                   _GL_ATTRIBUTE_PURE);
   1190 # endif
   1191   /* On some systems, this function is defined as an overloaded function:
   1192        extern "C++" {
   1193          const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
   1194          wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
   1195        }  */
   1196 _GL_CXXALIAS_SYS_CAST2 (wcsstr,
   1197                         wchar_t *,
   1198                         (const wchar_t *restrict, const wchar_t *restrict),
   1199                         const wchar_t *,
   1200                         (const wchar_t *restrict, const wchar_t *restrict));
   1201 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
   1202      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
   1203 _GL_CXXALIASWARN1 (wcsstr, wchar_t *,
   1204                    (wchar_t *restrict haystack,
   1205                     const wchar_t *restrict needle));
   1206 _GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
   1207                    (const wchar_t *restrict haystack,
   1208                     const wchar_t *restrict needle));
   1209 # elif __GLIBC__ >= 2
   1210 _GL_CXXALIASWARN (wcsstr);
   1211 # endif
   1212 #elif defined GNULIB_POSIXCHECK
   1213 # undef wcsstr
   1214 # if HAVE_RAW_DECL_WCSSTR
   1215 _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
   1216                  "use gnulib module wcsstr for portability");
   1217 # endif
   1218 #endif
   1219 
   1220 
   1221 /* Divide WCS into tokens separated by characters in DELIM.  */
   1222 #if @GNULIB_WCSTOK@
   1223 # if @REPLACE_WCSTOK@
   1224 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   1225 #   undef wcstok
   1226 #   define wcstok rpl_wcstok
   1227 #  endif
   1228 _GL_FUNCDECL_RPL (wcstok, wchar_t *,
   1229                   (wchar_t *restrict wcs, const wchar_t *restrict delim,
   1230                    wchar_t **restrict ptr));
   1231 _GL_CXXALIAS_RPL (wcstok, wchar_t *,
   1232                   (wchar_t *restrict wcs, const wchar_t *restrict delim,
   1233                    wchar_t **restrict ptr));
   1234 # else
   1235 #  if !@HAVE_WCSTOK@
   1236 _GL_FUNCDECL_SYS (wcstok, wchar_t *,
   1237                   (wchar_t *restrict wcs, const wchar_t *restrict delim,
   1238                    wchar_t **restrict ptr));
   1239 #  endif
   1240 _GL_CXXALIAS_SYS (wcstok, wchar_t *,
   1241                   (wchar_t *restrict wcs, const wchar_t *restrict delim,
   1242                    wchar_t **restrict ptr));
   1243 # endif
   1244 # if __GLIBC__ >= 2
   1245 _GL_CXXALIASWARN (wcstok);
   1246 # endif
   1247 #elif defined GNULIB_POSIXCHECK
   1248 # undef wcstok
   1249 # if HAVE_RAW_DECL_WCSTOK
   1250 _GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
   1251                  "use gnulib module wcstok for portability");
   1252 # endif
   1253 #endif
   1254 
   1255 
   1256 /* Determine number of column positions required for first N wide
   1257    characters (or fewer if S ends before this) in S.  */
   1258 #if @GNULIB_WCSWIDTH@
   1259 # if @REPLACE_WCSWIDTH@
   1260 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   1261 #   undef wcswidth
   1262 #   define wcswidth rpl_wcswidth
   1263 #  endif
   1264 _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
   1265                                  _GL_ATTRIBUTE_PURE);
   1266 _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
   1267 # else
   1268 #  if !@HAVE_WCSWIDTH@
   1269 _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
   1270                                  _GL_ATTRIBUTE_PURE);
   1271 #  endif
   1272 _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
   1273 # endif
   1274 # if __GLIBC__ >= 2
   1275 _GL_CXXALIASWARN (wcswidth);
   1276 # endif
   1277 #elif defined GNULIB_POSIXCHECK
   1278 # undef wcswidth
   1279 # if HAVE_RAW_DECL_WCSWIDTH
   1280 _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
   1281                  "use gnulib module wcswidth for portability");
   1282 # endif
   1283 #endif
   1284 
   1285 
   1286 /* Convert *TP to a date and time wide string.  See
   1287    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>.  */
   1288 #if @GNULIB_WCSFTIME@
   1289 # if @REPLACE_WCSFTIME@
   1290 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   1291 #   undef wcsftime
   1292 #   define wcsftime rpl_wcsftime
   1293 #  endif
   1294 _GL_FUNCDECL_RPL (wcsftime, size_t,
   1295                   (wchar_t *restrict __buf, size_t __bufsize,
   1296                    const wchar_t *restrict __fmt,
   1297                    const struct tm *restrict __tp)
   1298                   _GL_ARG_NONNULL ((1, 3, 4)));
   1299 _GL_CXXALIAS_RPL (wcsftime, size_t,
   1300                   (wchar_t *restrict __buf, size_t __bufsize,
   1301                    const wchar_t *restrict __fmt,
   1302                    const struct tm *restrict __tp));
   1303 # else
   1304 #  if !@HAVE_WCSFTIME@
   1305 _GL_FUNCDECL_SYS (wcsftime, size_t,
   1306                   (wchar_t *restrict __buf, size_t __bufsize,
   1307                    const wchar_t *restrict __fmt,
   1308                    const struct tm *restrict __tp)
   1309                   _GL_ARG_NONNULL ((1, 3, 4)));
   1310 #  endif
   1311 _GL_CXXALIAS_SYS (wcsftime, size_t,
   1312                   (wchar_t *restrict __buf, size_t __bufsize,
   1313                    const wchar_t *restrict __fmt,
   1314                    const struct tm *restrict __tp));
   1315 # endif
   1316 # if __GLIBC__ >= 2
   1317 _GL_CXXALIASWARN (wcsftime);
   1318 # endif
   1319 #elif defined GNULIB_POSIXCHECK
   1320 # undef wcsftime
   1321 # if HAVE_RAW_DECL_WCSFTIME
   1322 _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - "
   1323                  "use gnulib module wcsftime for portability");
   1324 # endif
   1325 #endif
   1326 
   1327 
   1328 #endif /* _@GUARD_PREFIX@_WCHAR_H */
   1329 #endif /* _@GUARD_PREFIX@_WCHAR_H */
   1330 #endif
   1331