Home | History | Annotate | Download | only in lib
      1 /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
      2 
      3    Copyright (C) 2007-2012 Free Software Foundation, Inc.
      4 
      5    This program is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by
      7    the Free Software Foundation; either version 3, or (at your option)
      8    any later version.
      9 
     10    This program 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 General Public License for more details.
     14 
     15    You should have received a copy of the GNU General Public License
     16    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
     17 
     18 /* Written by Eric Blake.  */
     19 
     20 /*
     21  * ISO C 99 <wchar.h> for platforms that have issues.
     22  * <http://www.opengroup.org/susv3xbd/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 || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
     34 /* Special invocation convention:
     35    - Inside glibc and uClibc header files.
     36    - On HP-UX 11.00 we have a sequence of nested includes
     37      <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
     38      once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
     39      and once directly.  In both situations 'wint_t' is not yet defined,
     40      therefore we cannot provide the function overrides; instead include only
     41      the system's <wchar.h>.
     42    - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
     43      the latter includes <wchar.h>.  But here, we have no way to detect whether
     44      <wctype.h> is completely included or is still being included.  */
     45 
     46 #@INCLUDE_NEXT@ @NEXT_WCHAR_H@
     47 
     48 #else
     49 /* Normal invocation convention.  */
     50 
     51 #ifndef _@GUARD_PREFIX@_WCHAR_H
     52 
     53 #define _GL_ALREADY_INCLUDING_WCHAR_H
     54 
     55 #if @HAVE_FEATURES_H@
     56 # include <features.h> /* for __GLIBC__ */
     57 #endif
     58 
     59 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
     60    <wchar.h>.
     61    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
     62    included before <wchar.h>.
     63    In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
     64    by <stddef.h>.
     65    But avoid namespace pollution on glibc systems.  */
     66 #if !(defined __GLIBC__ && !defined __UCLIBC__)
     67 # include <stddef.h>
     68 #endif
     69 #ifndef __GLIBC__
     70 # include <stdio.h>
     71 # include <time.h>
     72 #endif
     73 
     74 /* Include the original <wchar.h> if it exists.
     75    Some builds of uClibc lack it.  */
     76 /* The include_next requires a split double-inclusion guard.  */
     77 #if @HAVE_WCHAR_H@
     78 # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
     79 #endif
     80 
     81 #undef _GL_ALREADY_INCLUDING_WCHAR_H
     82 
     83 #ifndef _@GUARD_PREFIX@_WCHAR_H
     84 #define _@GUARD_PREFIX@_WCHAR_H
     85 
     86 /* The __attribute__ feature is available in gcc versions 2.5 and later.
     87    The attribute __pure__ was added in gcc 2.96.  */
     88 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
     89 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
     90 #else
     91 # define _GL_ATTRIBUTE_PURE /* empty */
     92 #endif
     93 
     94 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
     95 
     96 /* The definition of _GL_ARG_NONNULL is copied here.  */
     97 
     98 /* The definition of _GL_WARN_ON_USE is copied here.  */
     99 
    100 
    101 /* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
    102 #if !@HAVE_WINT_T@ && !defined wint_t
    103 # define wint_t int
    104 # ifndef WEOF
    105 #  define WEOF -1
    106 # endif
    107 #else
    108 /* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
    109    This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
    110    "unchanged by default argument promotions".  Override it.  */
    111 # if defined _MSC_VER
    112 #  if !GNULIB_defined_wint_t
    113 #   include <crtdefs.h>
    114 typedef unsigned int rpl_wint_t;
    115 #   undef wint_t
    116 #   define wint_t rpl_wint_t
    117 #   define GNULIB_defined_wint_t 1
    118 #  endif
    119 # endif
    120 # ifndef WEOF
    121 #  define WEOF ((wint_t) -1)
    122 # endif
    123 #endif
    124 
    125 
    126 /* Override mbstate_t if it is too small.
    127    On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
    128    implementing mbrtowc for encodings like UTF-8.  */
    129 #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
    130 # if !GNULIB_defined_mbstate_t
    131 typedef int rpl_mbstate_t;
    132 #  undef mbstate_t
    133 #  define mbstate_t rpl_mbstate_t
    134 #  define GNULIB_defined_mbstate_t 1
    135 # endif
    136 #endif
    137 
    138 
    139 /* Convert a single-byte character to a wide character.  */
    140 #if @GNULIB_BTOWC@
    141 # if @REPLACE_BTOWC@
    142 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    143 #   undef btowc
    144 #   define btowc rpl_btowc
    145 #  endif
    146 _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
    147 _GL_CXXALIAS_RPL (btowc, wint_t, (int c));
    148 # else
    149 #  if !@HAVE_BTOWC@
    150 _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
    151 #  endif
    152 _GL_CXXALIAS_SYS (btowc, wint_t, (int c));
    153 # endif
    154 _GL_CXXALIASWARN (btowc);
    155 #elif defined GNULIB_POSIXCHECK
    156 # undef btowc
    157 # if HAVE_RAW_DECL_BTOWC
    158 _GL_WARN_ON_USE (btowc, "btowc is unportable - "
    159                  "use gnulib module btowc for portability");
    160 # endif
    161 #endif
    162 
    163 
    164 /* Convert a wide character to a single-byte character.  */
    165 #if @GNULIB_WCTOB@
    166 # if @REPLACE_WCTOB@
    167 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    168 #   undef wctob
    169 #   define wctob rpl_wctob
    170 #  endif
    171 _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
    172 _GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
    173 # else
    174 #  if !defined wctob && !@HAVE_DECL_WCTOB@
    175 /* wctob is provided by gnulib, or wctob exists but is not declared.  */
    176 _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
    177 #  endif
    178 _GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
    179 # endif
    180 _GL_CXXALIASWARN (wctob);
    181 #elif defined GNULIB_POSIXCHECK
    182 # undef wctob
    183 # if HAVE_RAW_DECL_WCTOB
    184 _GL_WARN_ON_USE (wctob, "wctob is unportable - "
    185                  "use gnulib module wctob for portability");
    186 # endif
    187 #endif
    188 
    189 
    190 /* Test whether *PS is in the initial state.  */
    191 #if @GNULIB_MBSINIT@
    192 # if @REPLACE_MBSINIT@
    193 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    194 #   undef mbsinit
    195 #   define mbsinit rpl_mbsinit
    196 #  endif
    197 _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
    198 _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
    199 # else
    200 #  if !@HAVE_MBSINIT@
    201 _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
    202 #  endif
    203 _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
    204 # endif
    205 _GL_CXXALIASWARN (mbsinit);
    206 #elif defined GNULIB_POSIXCHECK
    207 # undef mbsinit
    208 # if HAVE_RAW_DECL_MBSINIT
    209 _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
    210                  "use gnulib module mbsinit for portability");
    211 # endif
    212 #endif
    213 
    214 
    215 /* Convert a multibyte character to a wide character.  */
    216 #if @GNULIB_MBRTOWC@
    217 # if @REPLACE_MBRTOWC@
    218 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    219 #   undef mbrtowc
    220 #   define mbrtowc rpl_mbrtowc
    221 #  endif
    222 _GL_FUNCDECL_RPL (mbrtowc, size_t,
    223                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
    224 _GL_CXXALIAS_RPL (mbrtowc, size_t,
    225                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
    226 # else
    227 #  if !@HAVE_MBRTOWC@
    228 _GL_FUNCDECL_SYS (mbrtowc, size_t,
    229                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
    230 #  endif
    231 _GL_CXXALIAS_SYS (mbrtowc, size_t,
    232                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
    233 # endif
    234 _GL_CXXALIASWARN (mbrtowc);
    235 #elif defined GNULIB_POSIXCHECK
    236 # undef mbrtowc
    237 # if HAVE_RAW_DECL_MBRTOWC
    238 _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
    239                  "use gnulib module mbrtowc for portability");
    240 # endif
    241 #endif
    242 
    243 
    244 /* Recognize a multibyte character.  */
    245 #if @GNULIB_MBRLEN@
    246 # if @REPLACE_MBRLEN@
    247 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    248 #   undef mbrlen
    249 #   define mbrlen rpl_mbrlen
    250 #  endif
    251 _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
    252 _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
    253 # else
    254 #  if !@HAVE_MBRLEN@
    255 _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
    256 #  endif
    257 _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
    258 # endif
    259 _GL_CXXALIASWARN (mbrlen);
    260 #elif defined GNULIB_POSIXCHECK
    261 # undef mbrlen
    262 # if HAVE_RAW_DECL_MBRLEN
    263 _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
    264                  "use gnulib module mbrlen for portability");
    265 # endif
    266 #endif
    267 
    268 
    269 /* Convert a string to a wide string.  */
    270 #if @GNULIB_MBSRTOWCS@
    271 # if @REPLACE_MBSRTOWCS@
    272 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    273 #   undef mbsrtowcs
    274 #   define mbsrtowcs rpl_mbsrtowcs
    275 #  endif
    276 _GL_FUNCDECL_RPL (mbsrtowcs, size_t,
    277                   (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
    278                   _GL_ARG_NONNULL ((2)));
    279 _GL_CXXALIAS_RPL (mbsrtowcs, size_t,
    280                   (wchar_t *dest, const char **srcp, size_t len,
    281                    mbstate_t *ps));
    282 # else
    283 #  if !@HAVE_MBSRTOWCS@
    284 _GL_FUNCDECL_SYS (mbsrtowcs, size_t,
    285                   (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
    286                   _GL_ARG_NONNULL ((2)));
    287 #  endif
    288 _GL_CXXALIAS_SYS (mbsrtowcs, size_t,
    289                   (wchar_t *dest, const char **srcp, size_t len,
    290                    mbstate_t *ps));
    291 # endif
    292 _GL_CXXALIASWARN (mbsrtowcs);
    293 #elif defined GNULIB_POSIXCHECK
    294 # undef mbsrtowcs
    295 # if HAVE_RAW_DECL_MBSRTOWCS
    296 _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
    297                  "use gnulib module mbsrtowcs for portability");
    298 # endif
    299 #endif
    300 
    301 
    302 /* Convert a string to a wide string.  */
    303 #if @GNULIB_MBSNRTOWCS@
    304 # if @REPLACE_MBSNRTOWCS@
    305 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    306 #   undef mbsnrtowcs
    307 #   define mbsnrtowcs rpl_mbsnrtowcs
    308 #  endif
    309 _GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
    310                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
    311                    mbstate_t *ps)
    312                   _GL_ARG_NONNULL ((2)));
    313 _GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
    314                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
    315                    mbstate_t *ps));
    316 # else
    317 #  if !@HAVE_MBSNRTOWCS@
    318 _GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
    319                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
    320                    mbstate_t *ps)
    321                   _GL_ARG_NONNULL ((2)));
    322 #  endif
    323 _GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
    324                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
    325                    mbstate_t *ps));
    326 # endif
    327 _GL_CXXALIASWARN (mbsnrtowcs);
    328 #elif defined GNULIB_POSIXCHECK
    329 # undef mbsnrtowcs
    330 # if HAVE_RAW_DECL_MBSNRTOWCS
    331 _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
    332                  "use gnulib module mbsnrtowcs for portability");
    333 # endif
    334 #endif
    335 
    336 
    337 /* Convert a wide character to a multibyte character.  */
    338 #if @GNULIB_WCRTOMB@
    339 # if @REPLACE_WCRTOMB@
    340 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    341 #   undef wcrtomb
    342 #   define wcrtomb rpl_wcrtomb
    343 #  endif
    344 _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
    345 _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
    346 # else
    347 #  if !@HAVE_WCRTOMB@
    348 _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
    349 #  endif
    350 _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
    351 # endif
    352 _GL_CXXALIASWARN (wcrtomb);
    353 #elif defined GNULIB_POSIXCHECK
    354 # undef wcrtomb
    355 # if HAVE_RAW_DECL_WCRTOMB
    356 _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
    357                  "use gnulib module wcrtomb for portability");
    358 # endif
    359 #endif
    360 
    361 
    362 /* Convert a wide string to a string.  */
    363 #if @GNULIB_WCSRTOMBS@
    364 # if @REPLACE_WCSRTOMBS@
    365 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    366 #   undef wcsrtombs
    367 #   define wcsrtombs rpl_wcsrtombs
    368 #  endif
    369 _GL_FUNCDECL_RPL (wcsrtombs, size_t,
    370                   (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
    371                   _GL_ARG_NONNULL ((2)));
    372 _GL_CXXALIAS_RPL (wcsrtombs, size_t,
    373                   (char *dest, const wchar_t **srcp, size_t len,
    374                    mbstate_t *ps));
    375 # else
    376 #  if !@HAVE_WCSRTOMBS@
    377 _GL_FUNCDECL_SYS (wcsrtombs, size_t,
    378                   (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
    379                   _GL_ARG_NONNULL ((2)));
    380 #  endif
    381 _GL_CXXALIAS_SYS (wcsrtombs, size_t,
    382                   (char *dest, const wchar_t **srcp, size_t len,
    383                    mbstate_t *ps));
    384 # endif
    385 _GL_CXXALIASWARN (wcsrtombs);
    386 #elif defined GNULIB_POSIXCHECK
    387 # undef wcsrtombs
    388 # if HAVE_RAW_DECL_WCSRTOMBS
    389 _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
    390                  "use gnulib module wcsrtombs for portability");
    391 # endif
    392 #endif
    393 
    394 
    395 /* Convert a wide string to a string.  */
    396 #if @GNULIB_WCSNRTOMBS@
    397 # if @REPLACE_WCSNRTOMBS@
    398 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    399 #   undef wcsnrtombs
    400 #   define wcsnrtombs rpl_wcsnrtombs
    401 #  endif
    402 _GL_FUNCDECL_RPL (wcsnrtombs, size_t,
    403                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
    404                    mbstate_t *ps)
    405                   _GL_ARG_NONNULL ((2)));
    406 _GL_CXXALIAS_RPL (wcsnrtombs, size_t,
    407                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
    408                    mbstate_t *ps));
    409 # else
    410 #  if !@HAVE_WCSNRTOMBS@
    411 _GL_FUNCDECL_SYS (wcsnrtombs, size_t,
    412                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
    413                    mbstate_t *ps)
    414                   _GL_ARG_NONNULL ((2)));
    415 #  endif
    416 _GL_CXXALIAS_SYS (wcsnrtombs, size_t,
    417                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
    418                    mbstate_t *ps));
    419 # endif
    420 _GL_CXXALIASWARN (wcsnrtombs);
    421 #elif defined GNULIB_POSIXCHECK
    422 # undef wcsnrtombs
    423 # if HAVE_RAW_DECL_WCSNRTOMBS
    424 _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
    425                  "use gnulib module wcsnrtombs for portability");
    426 # endif
    427 #endif
    428 
    429 
    430 /* Return the number of screen columns needed for WC.  */
    431 #if @GNULIB_WCWIDTH@
    432 # if @REPLACE_WCWIDTH@
    433 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
    434 #   undef wcwidth
    435 #   define wcwidth rpl_wcwidth
    436 #  endif
    437 _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
    438 _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
    439 # else
    440 #  if !@HAVE_DECL_WCWIDTH@
    441 /* wcwidth exists but is not declared.  */
    442 _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
    443 #  endif
    444 _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
    445 # endif
    446 _GL_CXXALIASWARN (wcwidth);
    447 #elif defined GNULIB_POSIXCHECK
    448 # undef wcwidth
    449 # if HAVE_RAW_DECL_WCWIDTH
    450 _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
    451                  "use gnulib module wcwidth for portability");
    452 # endif
    453 #endif
    454 
    455 
    456 /* Search N wide characters of S for C.  */
    457 #if @GNULIB_WMEMCHR@
    458 # if !@HAVE_WMEMCHR@
    459 _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
    460                                       _GL_ATTRIBUTE_PURE);
    461 # endif
    462   /* On some systems, this function is defined as an overloaded function:
    463        extern "C++" {
    464          const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
    465          wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
    466        }  */
    467 _GL_CXXALIAS_SYS_CAST2 (wmemchr,
    468                         wchar_t *, (const wchar_t *, wchar_t, size_t),
    469                         const wchar_t *, (const wchar_t *, wchar_t, size_t));
    470 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
    471      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
    472 _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
    473 _GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
    474                    (const wchar_t *s, wchar_t c, size_t n));
    475 # else
    476 _GL_CXXALIASWARN (wmemchr);
    477 # endif
    478 #elif defined GNULIB_POSIXCHECK
    479 # undef wmemchr
    480 # if HAVE_RAW_DECL_WMEMCHR
    481 _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
    482                  "use gnulib module wmemchr for portability");
    483 # endif
    484 #endif
    485 
    486 
    487 /* Compare N wide characters of S1 and S2.  */
    488 #if @GNULIB_WMEMCMP@
    489 # if !@HAVE_WMEMCMP@
    490 _GL_FUNCDECL_SYS (wmemcmp, int,
    491                   (const wchar_t *s1, const wchar_t *s2, size_t n)
    492                   _GL_ATTRIBUTE_PURE);
    493 # endif
    494 _GL_CXXALIAS_SYS (wmemcmp, int,
    495                   (const wchar_t *s1, const wchar_t *s2, size_t n));
    496 _GL_CXXALIASWARN (wmemcmp);
    497 #elif defined GNULIB_POSIXCHECK
    498 # undef wmemcmp
    499 # if HAVE_RAW_DECL_WMEMCMP
    500 _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
    501                  "use gnulib module wmemcmp for portability");
    502 # endif
    503 #endif
    504 
    505 
    506 /* Copy N wide characters of SRC to DEST.  */
    507 #if @GNULIB_WMEMCPY@
    508 # if !@HAVE_WMEMCPY@
    509 _GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
    510                   (wchar_t *dest, const wchar_t *src, size_t n));
    511 # endif
    512 _GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
    513                   (wchar_t *dest, const wchar_t *src, size_t n));
    514 _GL_CXXALIASWARN (wmemcpy);
    515 #elif defined GNULIB_POSIXCHECK
    516 # undef wmemcpy
    517 # if HAVE_RAW_DECL_WMEMCPY
    518 _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
    519                  "use gnulib module wmemcpy for portability");
    520 # endif
    521 #endif
    522 
    523 
    524 /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
    525    overlapping memory areas.  */
    526 #if @GNULIB_WMEMMOVE@
    527 # if !@HAVE_WMEMMOVE@
    528 _GL_FUNCDECL_SYS (wmemmove, wchar_t *,
    529                   (wchar_t *dest, const wchar_t *src, size_t n));
    530 # endif
    531 _GL_CXXALIAS_SYS (wmemmove, wchar_t *,
    532                   (wchar_t *dest, const wchar_t *src, size_t n));
    533 _GL_CXXALIASWARN (wmemmove);
    534 #elif defined GNULIB_POSIXCHECK
    535 # undef wmemmove
    536 # if HAVE_RAW_DECL_WMEMMOVE
    537 _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
    538                  "use gnulib module wmemmove for portability");
    539 # endif
    540 #endif
    541 
    542 
    543 /* Set N wide characters of S to C.  */
    544 #if @GNULIB_WMEMSET@
    545 # if !@HAVE_WMEMSET@
    546 _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
    547 # endif
    548 _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
    549 _GL_CXXALIASWARN (wmemset);
    550 #elif defined GNULIB_POSIXCHECK
    551 # undef wmemset
    552 # if HAVE_RAW_DECL_WMEMSET
    553 _GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
    554                  "use gnulib module wmemset for portability");
    555 # endif
    556 #endif
    557 
    558 
    559 /* Return the number of wide characters in S.  */
    560 #if @GNULIB_WCSLEN@
    561 # if !@HAVE_WCSLEN@
    562 _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
    563 # endif
    564 _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
    565 _GL_CXXALIASWARN (wcslen);
    566 #elif defined GNULIB_POSIXCHECK
    567 # undef wcslen
    568 # if HAVE_RAW_DECL_WCSLEN
    569 _GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
    570                  "use gnulib module wcslen for portability");
    571 # endif
    572 #endif
    573 
    574 
    575 /* Return the number of wide characters in S, but at most MAXLEN.  */
    576 #if @GNULIB_WCSNLEN@
    577 # if !@HAVE_WCSNLEN@
    578 _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
    579                                    _GL_ATTRIBUTE_PURE);
    580 # endif
    581 _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
    582 _GL_CXXALIASWARN (wcsnlen);
    583 #elif defined GNULIB_POSIXCHECK
    584 # undef wcsnlen
    585 # if HAVE_RAW_DECL_WCSNLEN
    586 _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
    587                  "use gnulib module wcsnlen for portability");
    588 # endif
    589 #endif
    590 
    591 
    592 /* Copy SRC to DEST.  */
    593 #if @GNULIB_WCSCPY@
    594 # if !@HAVE_WCSCPY@
    595 _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
    596 # endif
    597 _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
    598 _GL_CXXALIASWARN (wcscpy);
    599 #elif defined GNULIB_POSIXCHECK
    600 # undef wcscpy
    601 # if HAVE_RAW_DECL_WCSCPY
    602 _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
    603                  "use gnulib module wcscpy for portability");
    604 # endif
    605 #endif
    606 
    607 
    608 /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
    609 #if @GNULIB_WCPCPY@
    610 # if !@HAVE_WCPCPY@
    611 _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
    612 # endif
    613 _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
    614 _GL_CXXALIASWARN (wcpcpy);
    615 #elif defined GNULIB_POSIXCHECK
    616 # undef wcpcpy
    617 # if HAVE_RAW_DECL_WCPCPY
    618 _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
    619                  "use gnulib module wcpcpy for portability");
    620 # endif
    621 #endif
    622 
    623 
    624 /* Copy no more than N wide characters of SRC to DEST.  */
    625 #if @GNULIB_WCSNCPY@
    626 # if !@HAVE_WCSNCPY@
    627 _GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
    628                   (wchar_t *dest, const wchar_t *src, size_t n));
    629 # endif
    630 _GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
    631                   (wchar_t *dest, const wchar_t *src, size_t n));
    632 _GL_CXXALIASWARN (wcsncpy);
    633 #elif defined GNULIB_POSIXCHECK
    634 # undef wcsncpy
    635 # if HAVE_RAW_DECL_WCSNCPY
    636 _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
    637                  "use gnulib module wcsncpy for portability");
    638 # endif
    639 #endif
    640 
    641 
    642 /* Copy no more than N characters of SRC to DEST, returning the address of
    643    the last character written into DEST.  */
    644 #if @GNULIB_WCPNCPY@
    645 # if !@HAVE_WCPNCPY@
    646 _GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
    647                   (wchar_t *dest, const wchar_t *src, size_t n));
    648 # endif
    649 _GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
    650                   (wchar_t *dest, const wchar_t *src, size_t n));
    651 _GL_CXXALIASWARN (wcpncpy);
    652 #elif defined GNULIB_POSIXCHECK
    653 # undef wcpncpy
    654 # if HAVE_RAW_DECL_WCPNCPY
    655 _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
    656                  "use gnulib module wcpncpy for portability");
    657 # endif
    658 #endif
    659 
    660 
    661 /* Append SRC onto DEST.  */
    662 #if @GNULIB_WCSCAT@
    663 # if !@HAVE_WCSCAT@
    664 _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
    665 # endif
    666 _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
    667 _GL_CXXALIASWARN (wcscat);
    668 #elif defined GNULIB_POSIXCHECK
    669 # undef wcscat
    670 # if HAVE_RAW_DECL_WCSCAT
    671 _GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
    672                  "use gnulib module wcscat for portability");
    673 # endif
    674 #endif
    675 
    676 
    677 /* Append no more than N wide characters of SRC onto DEST.  */
    678 #if @GNULIB_WCSNCAT@
    679 # if !@HAVE_WCSNCAT@
    680 _GL_FUNCDECL_SYS (wcsncat, wchar_t *,
    681                   (wchar_t *dest, const wchar_t *src, size_t n));
    682 # endif
    683 _GL_CXXALIAS_SYS (wcsncat, wchar_t *,
    684                   (wchar_t *dest, const wchar_t *src, size_t n));
    685 _GL_CXXALIASWARN (wcsncat);
    686 #elif defined GNULIB_POSIXCHECK
    687 # undef wcsncat
    688 # if HAVE_RAW_DECL_WCSNCAT
    689 _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
    690                  "use gnulib module wcsncat for portability");
    691 # endif
    692 #endif
    693 
    694 
    695 /* Compare S1 and S2.  */
    696 #if @GNULIB_WCSCMP@
    697 # if !@HAVE_WCSCMP@
    698 _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
    699                                _GL_ATTRIBUTE_PURE);
    700 # endif
    701 _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
    702 _GL_CXXALIASWARN (wcscmp);
    703 #elif defined GNULIB_POSIXCHECK
    704 # undef wcscmp
    705 # if HAVE_RAW_DECL_WCSCMP
    706 _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
    707                  "use gnulib module wcscmp for portability");
    708 # endif
    709 #endif
    710 
    711 
    712 /* Compare no more than N wide characters of S1 and S2.  */
    713 #if @GNULIB_WCSNCMP@
    714 # if !@HAVE_WCSNCMP@
    715 _GL_FUNCDECL_SYS (wcsncmp, int,
    716                   (const wchar_t *s1, const wchar_t *s2, size_t n)
    717                   _GL_ATTRIBUTE_PURE);
    718 # endif
    719 _GL_CXXALIAS_SYS (wcsncmp, int,
    720                   (const wchar_t *s1, const wchar_t *s2, size_t n));
    721 _GL_CXXALIASWARN (wcsncmp);
    722 #elif defined GNULIB_POSIXCHECK
    723 # undef wcsncmp
    724 # if HAVE_RAW_DECL_WCSNCMP
    725 _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
    726                  "use gnulib module wcsncmp for portability");
    727 # endif
    728 #endif
    729 
    730 
    731 /* Compare S1 and S2, ignoring case.  */
    732 #if @GNULIB_WCSCASECMP@
    733 # if !@HAVE_WCSCASECMP@
    734 _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
    735                                    _GL_ATTRIBUTE_PURE);
    736 # endif
    737 _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
    738 _GL_CXXALIASWARN (wcscasecmp);
    739 #elif defined GNULIB_POSIXCHECK
    740 # undef wcscasecmp
    741 # if HAVE_RAW_DECL_WCSCASECMP
    742 _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
    743                  "use gnulib module wcscasecmp for portability");
    744 # endif
    745 #endif
    746 
    747 
    748 /* Compare no more than N chars of S1 and S2, ignoring case.  */
    749 #if @GNULIB_WCSNCASECMP@
    750 # if !@HAVE_WCSNCASECMP@
    751 _GL_FUNCDECL_SYS (wcsncasecmp, int,
    752                   (const wchar_t *s1, const wchar_t *s2, size_t n)
    753                   _GL_ATTRIBUTE_PURE);
    754 # endif
    755 _GL_CXXALIAS_SYS (wcsncasecmp, int,
    756                   (const wchar_t *s1, const wchar_t *s2, size_t n));
    757 _GL_CXXALIASWARN (wcsncasecmp);
    758 #elif defined GNULIB_POSIXCHECK
    759 # undef wcsncasecmp
    760 # if HAVE_RAW_DECL_WCSNCASECMP
    761 _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
    762                  "use gnulib module wcsncasecmp for portability");
    763 # endif
    764 #endif
    765 
    766 
    767 /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
    768    category of the current locale.  */
    769 #if @GNULIB_WCSCOLL@
    770 # if !@HAVE_WCSCOLL@
    771 _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
    772 # endif
    773 _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
    774 _GL_CXXALIASWARN (wcscoll);
    775 #elif defined GNULIB_POSIXCHECK
    776 # undef wcscoll
    777 # if HAVE_RAW_DECL_WCSCOLL
    778 _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
    779                  "use gnulib module wcscoll for portability");
    780 # endif
    781 #endif
    782 
    783 
    784 /* Transform S2 into array pointed to by S1 such that if wcscmp is applied
    785    to two transformed strings the result is the as applying 'wcscoll' to the
    786    original strings.  */
    787 #if @GNULIB_WCSXFRM@
    788 # if !@HAVE_WCSXFRM@
    789 _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
    790 # endif
    791 _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
    792 _GL_CXXALIASWARN (wcsxfrm);
    793 #elif defined GNULIB_POSIXCHECK
    794 # undef wcsxfrm
    795 # if HAVE_RAW_DECL_WCSXFRM
    796 _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
    797                  "use gnulib module wcsxfrm for portability");
    798 # endif
    799 #endif
    800 
    801 
    802 /* Duplicate S, returning an identical malloc'd string.  */
    803 #if @GNULIB_WCSDUP@
    804 # if !@HAVE_WCSDUP@
    805 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
    806 # endif
    807 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
    808 _GL_CXXALIASWARN (wcsdup);
    809 #elif defined GNULIB_POSIXCHECK
    810 # undef wcsdup
    811 # if HAVE_RAW_DECL_WCSDUP
    812 _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
    813                  "use gnulib module wcsdup for portability");
    814 # endif
    815 #endif
    816 
    817 
    818 /* Find the first occurrence of WC in WCS.  */
    819 #if @GNULIB_WCSCHR@
    820 # if !@HAVE_WCSCHR@
    821 _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
    822                                      _GL_ATTRIBUTE_PURE);
    823 # endif
    824   /* On some systems, this function is defined as an overloaded function:
    825        extern "C++" {
    826          const wchar_t * std::wcschr (const wchar_t *, wchar_t);
    827          wchar_t * std::wcschr (wchar_t *, wchar_t);
    828        }  */
    829 _GL_CXXALIAS_SYS_CAST2 (wcschr,
    830                         wchar_t *, (const wchar_t *, wchar_t),
    831                         const wchar_t *, (const wchar_t *, wchar_t));
    832 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
    833      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
    834 _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
    835 _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
    836 # else
    837 _GL_CXXALIASWARN (wcschr);
    838 # endif
    839 #elif defined GNULIB_POSIXCHECK
    840 # undef wcschr
    841 # if HAVE_RAW_DECL_WCSCHR
    842 _GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
    843                  "use gnulib module wcschr for portability");
    844 # endif
    845 #endif
    846 
    847 
    848 /* Find the last occurrence of WC in WCS.  */
    849 #if @GNULIB_WCSRCHR@
    850 # if !@HAVE_WCSRCHR@
    851 _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
    852                                       _GL_ATTRIBUTE_PURE);
    853 # endif
    854   /* On some systems, this function is defined as an overloaded function:
    855        extern "C++" {
    856          const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
    857          wchar_t * std::wcsrchr (wchar_t *, wchar_t);
    858        }  */
    859 _GL_CXXALIAS_SYS_CAST2 (wcsrchr,
    860                         wchar_t *, (const wchar_t *, wchar_t),
    861                         const wchar_t *, (const wchar_t *, wchar_t));
    862 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
    863      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
    864 _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
    865 _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
    866 # else
    867 _GL_CXXALIASWARN (wcsrchr);
    868 # endif
    869 #elif defined GNULIB_POSIXCHECK
    870 # undef wcsrchr
    871 # if HAVE_RAW_DECL_WCSRCHR
    872 _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
    873                  "use gnulib module wcsrchr for portability");
    874 # endif
    875 #endif
    876 
    877 
    878 /* Return the length of the initial segmet of WCS which consists entirely
    879    of wide characters not in REJECT.  */
    880 #if @GNULIB_WCSCSPN@
    881 # if !@HAVE_WCSCSPN@
    882 _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
    883                                    _GL_ATTRIBUTE_PURE);
    884 # endif
    885 _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
    886 _GL_CXXALIASWARN (wcscspn);
    887 #elif defined GNULIB_POSIXCHECK
    888 # undef wcscspn
    889 # if HAVE_RAW_DECL_WCSCSPN
    890 _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
    891                  "use gnulib module wcscspn for portability");
    892 # endif
    893 #endif
    894 
    895 
    896 /* Return the length of the initial segmet of WCS which consists entirely
    897    of wide characters in ACCEPT.  */
    898 #if @GNULIB_WCSSPN@
    899 # if !@HAVE_WCSSPN@
    900 _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
    901                                   _GL_ATTRIBUTE_PURE);
    902 # endif
    903 _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
    904 _GL_CXXALIASWARN (wcsspn);
    905 #elif defined GNULIB_POSIXCHECK
    906 # undef wcsspn
    907 # if HAVE_RAW_DECL_WCSSPN
    908 _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
    909                  "use gnulib module wcsspn for portability");
    910 # endif
    911 #endif
    912 
    913 
    914 /* Find the first occurrence in WCS of any character in ACCEPT.  */
    915 #if @GNULIB_WCSPBRK@
    916 # if !@HAVE_WCSPBRK@
    917 _GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
    918                   (const wchar_t *wcs, const wchar_t *accept)
    919                   _GL_ATTRIBUTE_PURE);
    920 # endif
    921   /* On some systems, this function is defined as an overloaded function:
    922        extern "C++" {
    923          const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
    924          wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
    925        }  */
    926 _GL_CXXALIAS_SYS_CAST2 (wcspbrk,
    927                         wchar_t *, (const wchar_t *, const wchar_t *),
    928                         const wchar_t *, (const wchar_t *, const wchar_t *));
    929 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
    930      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
    931 _GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
    932                    (wchar_t *wcs, const wchar_t *accept));
    933 _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
    934                    (const wchar_t *wcs, const wchar_t *accept));
    935 # else
    936 _GL_CXXALIASWARN (wcspbrk);
    937 # endif
    938 #elif defined GNULIB_POSIXCHECK
    939 # undef wcspbrk
    940 # if HAVE_RAW_DECL_WCSPBRK
    941 _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
    942                  "use gnulib module wcspbrk for portability");
    943 # endif
    944 #endif
    945 
    946 
    947 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
    948 #if @GNULIB_WCSSTR@
    949 # if !@HAVE_WCSSTR@
    950 _GL_FUNCDECL_SYS (wcsstr, wchar_t *,
    951                   (const wchar_t *haystack, const wchar_t *needle)
    952                   _GL_ATTRIBUTE_PURE);
    953 # endif
    954   /* On some systems, this function is defined as an overloaded function:
    955        extern "C++" {
    956          const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
    957          wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
    958        }  */
    959 _GL_CXXALIAS_SYS_CAST2 (wcsstr,
    960                         wchar_t *, (const wchar_t *, const wchar_t *),
    961                         const wchar_t *, (const wchar_t *, const wchar_t *));
    962 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
    963      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
    964 _GL_CXXALIASWARN1 (wcsstr, wchar_t *,
    965                    (wchar_t *haystack, const wchar_t *needle));
    966 _GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
    967                    (const wchar_t *haystack, const wchar_t *needle));
    968 # else
    969 _GL_CXXALIASWARN (wcsstr);
    970 # endif
    971 #elif defined GNULIB_POSIXCHECK
    972 # undef wcsstr
    973 # if HAVE_RAW_DECL_WCSSTR
    974 _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
    975                  "use gnulib module wcsstr for portability");
    976 # endif
    977 #endif
    978 
    979 
    980 /* Divide WCS into tokens separated by characters in DELIM.  */
    981 #if @GNULIB_WCSTOK@
    982 # if !@HAVE_WCSTOK@
    983 _GL_FUNCDECL_SYS (wcstok, wchar_t *,
    984                   (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
    985 # endif
    986 _GL_CXXALIAS_SYS (wcstok, wchar_t *,
    987                   (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
    988 _GL_CXXALIASWARN (wcstok);
    989 #elif defined GNULIB_POSIXCHECK
    990 # undef wcstok
    991 # if HAVE_RAW_DECL_WCSTOK
    992 _GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
    993                  "use gnulib module wcstok for portability");
    994 # endif
    995 #endif
    996 
    997 
    998 /* Determine number of column positions required for first N wide
    999    characters (or fewer if S ends before this) in S.  */
   1000 #if @GNULIB_WCSWIDTH@
   1001 # if @REPLACE_WCSWIDTH@
   1002 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   1003 #   undef wcswidth
   1004 #   define wcswidth rpl_wcswidth
   1005 #  endif
   1006 _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
   1007                                  _GL_ATTRIBUTE_PURE);
   1008 _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
   1009 # else
   1010 #  if !@HAVE_WCSWIDTH@
   1011 _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
   1012                                  _GL_ATTRIBUTE_PURE);
   1013 #  endif
   1014 _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
   1015 # endif
   1016 _GL_CXXALIASWARN (wcswidth);
   1017 #elif defined GNULIB_POSIXCHECK
   1018 # undef wcswidth
   1019 # if HAVE_RAW_DECL_WCSWIDTH
   1020 _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
   1021                  "use gnulib module wcswidth for portability");
   1022 # endif
   1023 #endif
   1024 
   1025 
   1026 #endif /* _@GUARD_PREFIX@_WCHAR_H */
   1027 #endif /* _@GUARD_PREFIX@_WCHAR_H */
   1028 #endif
   1029