diff options
Diffstat (limited to 'lib/wchar.in.h')
| -rw-r--r-- | lib/wchar.in.h | 495 | 
1 files changed, 368 insertions, 127 deletions
diff --git a/lib/wchar.in.h b/lib/wchar.in.h index 823102fb..d7792e5f 100644 --- a/lib/wchar.in.h +++ b/lib/wchar.in.h @@ -1,34 +1,25 @@  /* A substitute for ISO C99 <wchar.h>, for platforms that have issues. -   Copyright (C) 2007-2018 Free Software Foundation, Inc. +   Copyright (C) 2007-2022 Free Software Foundation, Inc. -   This program is free software: you can redistribute it and/or -   modify it under the terms of either: +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. -     * the GNU Lesser General Public License as published by the Free -       Software Foundation; either version 3 of the License, or (at your -       option) any later version. - -   or - -     * the GNU General Public License as published by the Free -       Software Foundation; either version 2 of the License, or (at your -       option) any later version. - -   or both in parallel, as here. -   This program is distributed in the hope that it will be useful, +   This file is distributed in the hope that it will be useful,     but WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU General Public License for more details. +   GNU Lesser General Public License for more details. -   You should have received a copy of the GNU General Public License -   along with this program; if not, see <https://www.gnu.org/licenses/>.  */ +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */  /* Written by Eric Blake.  */  /*   * ISO C 99 <wchar.h> for platforms that have issues. - * <http://www.opengroup.org/susv3xbd/wchar.h.html> + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html>   *   * For now, this just ensures proper prerequisite inclusion order and   * the declaration of wcwidth(). @@ -42,7 +33,8 @@  #if (((defined __need_mbstate_t || defined __need_wint_t)               \        && !defined __MINGW32__)                                          \       || (defined __hpux                                                 \ -         && ((defined _INTTYPES_INCLUDED && !defined strtoimax)         \ +         && ((defined _INTTYPES_INCLUDED                                \ +              && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H)     \               || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H))               \       || (defined __MINGW32__ && defined __STRING_H_SOURCED__)           \       || defined _GL_ALREADY_INCLUDING_WCHAR_H) @@ -73,20 +65,12 @@  # include <features.h> /* for __GLIBC__ */  #endif -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before -   <wchar.h>. -   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be -   included before <wchar.h>. -   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined +/* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined     by <stddef.h>.     But avoid namespace pollution on glibc systems.  */  #if !(defined __GLIBC__ && !defined __UCLIBC__)  # include <stddef.h>  #endif -#ifndef __GLIBC__ -# include <stdio.h> -# include <time.h> -#endif  /* Include the original <wchar.h> if it exists.     Some builds of uClibc lack it.  */ @@ -100,12 +84,43 @@  #ifndef _@GUARD_PREFIX@_WCHAR_H  #define _@GUARD_PREFIX@_WCHAR_H +/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers +   that can be freed by passing them as the Ith argument to the +   function F.  */ +#ifndef _GL_ATTRIBUTE_DEALLOC +# if __GNUC__ >= 11 +#  define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) +# else +#  define _GL_ATTRIBUTE_DEALLOC(f, i) +# endif +#endif + +/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that +   can be freed via 'free'; it can be used only after declaring 'free'.  */ +/* Applies to: functions.  Cannot be used on inline functions.  */ +#ifndef _GL_ATTRIBUTE_DEALLOC_FREE +# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) +#endif + +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly +   allocated memory.  */ +/* Applies to: functions.  */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +#  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +#  define _GL_ATTRIBUTE_MALLOC +# endif +#endif +  /* The __attribute__ feature is available in gcc versions 2.5 and later.     The attribute __pure__ was added in gcc 2.96.  */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ +#  define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +#  define _GL_ATTRIBUTE_PURE /* empty */ +# endif  #endif  /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */ @@ -125,7 +140,7 @@  /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or     <stddef.h>.  This is too small: ISO C 99 section 7.24.1.(2) says that     wint_t must be "unchanged by default argument promotions".  Override it.  */ -# if @GNULIB_OVERRIDES_WINT_T@ +# if @GNULIBHEADERS_OVERRIDE_WINT_T@  #  if !GNULIB_defined_wint_t  #   if @HAVE_CRTDEFS_H@  #    include <crtdefs.h> @@ -146,16 +161,43 @@ typedef unsigned int rpl_wint_t;  /* Override mbstate_t if it is too small.     On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for -   implementing mbrtowc for encodings like UTF-8.  */ -#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ +   implementing mbrtowc for encodings like UTF-8. +   On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is +   large enough and overriding it would cause problems in C++ mode.  */ +#if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@  # if !GNULIB_defined_mbstate_t +#  if !(defined _AIX || defined _MSC_VER)  typedef int rpl_mbstate_t; -#  undef mbstate_t -#  define mbstate_t rpl_mbstate_t +#   undef mbstate_t +#   define mbstate_t rpl_mbstate_t +#  endif  #  define GNULIB_defined_mbstate_t 1  # endif  #endif +/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have +   been included yet.  */ +#if @GNULIB_FREE_POSIX@ +# if (@REPLACE_FREE@ && !defined free \ +      && !(defined __cplusplus && defined GNULIB_NAMESPACE)) +/* We can't do '#define free rpl_free' here.  */ +_GL_EXTERN_C void rpl_free (void *); +#  undef _GL_ATTRIBUTE_DEALLOC_FREE +#  define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) +# else +#  if defined _MSC_VER +_GL_EXTERN_C void __cdecl free (void *); +#  else +_GL_EXTERN_C void free (void *); +#  endif +# endif +#else +# if defined _MSC_VER +_GL_EXTERN_C void __cdecl free (void *); +# else +_GL_EXTERN_C void free (void *); +# endif +#endif  /* Convert a single-byte character to a wide character.  */  #if @GNULIB_BTOWC@ @@ -170,9 +212,12 @@ _GL_CXXALIAS_RPL (btowc, wint_t, (int c));  #  if !@HAVE_BTOWC@  _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);  #  endif -_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); +/* Need to cast, because on mingw, the return type is 'unsigned short'.  */ +_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (btowc); +# endif  #elif defined GNULIB_POSIXCHECK  # undef btowc  # if HAVE_RAW_DECL_BTOWC @@ -198,7 +243,9 @@ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);  #  endif  _GL_CXXALIAS_SYS (wctob, int, (wint_t wc));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wctob); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wctob  # if HAVE_RAW_DECL_WCTOB @@ -223,7 +270,9 @@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));  #  endif  _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mbsinit); +# endif  #elif defined GNULIB_POSIXCHECK  # undef mbsinit  # if HAVE_RAW_DECL_MBSINIT @@ -241,18 +290,24 @@ _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "  #   define mbrtowc rpl_mbrtowc  #  endif  _GL_FUNCDECL_RPL (mbrtowc, size_t, -                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +                  (wchar_t *restrict pwc, const char *restrict s, size_t n, +                   mbstate_t *restrict ps));  _GL_CXXALIAS_RPL (mbrtowc, size_t, -                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +                  (wchar_t *restrict pwc, const char *restrict s, size_t n, +                   mbstate_t *restrict ps));  # else  #  if !@HAVE_MBRTOWC@  _GL_FUNCDECL_SYS (mbrtowc, size_t, -                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +                  (wchar_t *restrict pwc, const char *restrict s, size_t n, +                   mbstate_t *restrict ps));  #  endif  _GL_CXXALIAS_SYS (mbrtowc, size_t, -                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +                  (wchar_t *restrict pwc, const char *restrict s, size_t n, +                   mbstate_t *restrict ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mbrtowc); +# endif  #elif defined GNULIB_POSIXCHECK  # undef mbrtowc  # if HAVE_RAW_DECL_MBRTOWC @@ -269,15 +324,21 @@ _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "  #   undef mbrlen  #   define mbrlen rpl_mbrlen  #  endif -_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_FUNCDECL_RPL (mbrlen, size_t, +                  (const char *restrict s, size_t n, mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, +                  (const char *restrict s, size_t n, mbstate_t *restrict ps));  # else  #  if !@HAVE_MBRLEN@ -_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_FUNCDECL_SYS (mbrlen, size_t, +                  (const char *restrict s, size_t n, mbstate_t *restrict ps));  #  endif -_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_SYS (mbrlen, size_t, +                  (const char *restrict s, size_t n, mbstate_t *restrict ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mbrlen); +# endif  #elif defined GNULIB_POSIXCHECK  # undef mbrlen  # if HAVE_RAW_DECL_MBRLEN @@ -295,22 +356,30 @@ _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "  #   define mbsrtowcs rpl_mbsrtowcs  #  endif  _GL_FUNCDECL_RPL (mbsrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  _GL_CXXALIAS_RPL (mbsrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t len, -                   mbstate_t *ps)); +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t len, +                   mbstate_t *restrict ps));  # else  #  if !@HAVE_MBSRTOWCS@  _GL_FUNCDECL_SYS (mbsrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  #  endif  _GL_CXXALIAS_SYS (mbsrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t len, -                   mbstate_t *ps)); +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t len, +                   mbstate_t *restrict ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mbsrtowcs); +# endif  #elif defined GNULIB_POSIXCHECK  # undef mbsrtowcs  # if HAVE_RAW_DECL_MBSRTOWCS @@ -328,22 +397,26 @@ _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "  #   define mbsnrtowcs rpl_mbsnrtowcs  #  endif  _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len, -                   mbstate_t *ps) +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t srclen, size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len, -                   mbstate_t *ps)); +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t srclen, size_t len, +                   mbstate_t *restrict ps));  # else  #  if !@HAVE_MBSNRTOWCS@  _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len, -                   mbstate_t *ps) +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t srclen, size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  #  endif  _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, -                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len, -                   mbstate_t *ps)); +                  (wchar_t *restrict dest, +                   const char **restrict srcp, size_t srclen, size_t len, +                   mbstate_t *restrict ps));  # endif  _GL_CXXALIASWARN (mbsnrtowcs);  #elif defined GNULIB_POSIXCHECK @@ -362,15 +435,21 @@ _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "  #   undef wcrtomb  #   define wcrtomb rpl_wcrtomb  #  endif -_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_FUNCDECL_RPL (wcrtomb, size_t, +                  (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, +                  (char *restrict s, wchar_t wc, mbstate_t *restrict ps));  # else  #  if !@HAVE_WCRTOMB@ -_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_FUNCDECL_SYS (wcrtomb, size_t, +                  (char *restrict s, wchar_t wc, mbstate_t *restrict ps));  #  endif -_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_CXXALIAS_SYS (wcrtomb, size_t, +                  (char *restrict s, wchar_t wc, mbstate_t *restrict ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcrtomb); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcrtomb  # if HAVE_RAW_DECL_WCRTOMB @@ -388,22 +467,30 @@ _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "  #   define wcsrtombs rpl_wcsrtombs  #  endif  _GL_FUNCDECL_RPL (wcsrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) +                  (char *restrict dest, const wchar_t **restrict srcp, +                   size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  _GL_CXXALIAS_RPL (wcsrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t len, -                   mbstate_t *ps)); +                  (char *restrict dest, const wchar_t **restrict srcp, +                   size_t len, +                   mbstate_t *restrict ps));  # else  #  if !@HAVE_WCSRTOMBS@  _GL_FUNCDECL_SYS (wcsrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) +                  (char *restrict dest, const wchar_t **restrict srcp, +                   size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  #  endif  _GL_CXXALIAS_SYS (wcsrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t len, -                   mbstate_t *ps)); +                  (char *restrict dest, const wchar_t **restrict srcp, +                   size_t len, +                   mbstate_t *restrict ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsrtombs); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsrtombs  # if HAVE_RAW_DECL_WCSRTOMBS @@ -421,24 +508,34 @@ _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "  #   define wcsnrtombs rpl_wcsnrtombs  #  endif  _GL_FUNCDECL_RPL (wcsnrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len, -                   mbstate_t *ps) +                  (char *restrict dest, +                   const wchar_t **restrict srcp, size_t srclen, +                   size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  _GL_CXXALIAS_RPL (wcsnrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len, -                   mbstate_t *ps)); +                  (char *restrict dest, +                   const wchar_t **restrict srcp, size_t srclen, +                   size_t len, +                   mbstate_t *restrict ps));  # else -#  if !@HAVE_WCSNRTOMBS@ +#  if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun)  _GL_FUNCDECL_SYS (wcsnrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len, -                   mbstate_t *ps) +                  (char *restrict dest, +                   const wchar_t **restrict srcp, size_t srclen, +                   size_t len, +                   mbstate_t *restrict ps)                    _GL_ARG_NONNULL ((2)));  #  endif  _GL_CXXALIAS_SYS (wcsnrtombs, size_t, -                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len, -                   mbstate_t *ps)); +                  (char *restrict dest, +                   const wchar_t **restrict srcp, size_t srclen, +                   size_t len, +                   mbstate_t *restrict ps));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsnrtombs); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsnrtombs  # if HAVE_RAW_DECL_WCSNRTOMBS @@ -464,7 +561,9 @@ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);  #  endif  _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcwidth); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcwidth  # if HAVE_RAW_DECL_WCWIDTH @@ -493,7 +592,7 @@ _GL_CXXALIAS_SYS_CAST2 (wmemchr,  _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));  _GL_CXXALIASWARN1 (wmemchr, const wchar_t *,                     (const wchar_t *s, wchar_t c, size_t n)); -# else +# elif __GLIBC__ >= 2  _GL_CXXALIASWARN (wmemchr);  # endif  #elif defined GNULIB_POSIXCHECK @@ -514,7 +613,9 @@ _GL_FUNCDECL_SYS (wmemcmp, int,  # endif  _GL_CXXALIAS_SYS (wmemcmp, int,                    (const wchar_t *s1, const wchar_t *s2, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wmemcmp); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wmemcmp  # if HAVE_RAW_DECL_WMEMCMP @@ -528,11 +629,15 @@ _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "  #if @GNULIB_WMEMCPY@  # if !@HAVE_WMEMCPY@  _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n));  # endif  _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wmemcpy); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wmemcpy  # if HAVE_RAW_DECL_WMEMCPY @@ -551,7 +656,9 @@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *,  # endif  _GL_CXXALIAS_SYS (wmemmove, wchar_t *,                    (wchar_t *dest, const wchar_t *src, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wmemmove); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wmemmove  # if HAVE_RAW_DECL_WMEMMOVE @@ -561,13 +668,38 @@ _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "  #endif +/* Copy N wide characters of SRC to DEST. +   Return pointer to wide characters after the last written wide character.  */ +#if @GNULIB_WMEMPCPY@ +# if !@HAVE_WMEMPCPY@ +_GL_FUNCDECL_SYS (wmempcpy, wchar_t *, +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmempcpy, wchar_t *, +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmempcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmempcpy +# if HAVE_RAW_DECL_WMEMPCPY +_GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " +                 "use gnulib module wmempcpy for portability"); +# endif +#endif + +  /* Set N wide characters of S to C.  */  #if @GNULIB_WMEMSET@  # if !@HAVE_WMEMSET@  _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));  # endif  _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wmemset); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wmemset  # if HAVE_RAW_DECL_WMEMSET @@ -583,7 +715,9 @@ _GL_WARN_ON_USE (wmemset, "wmemset is unportable - "  _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);  # endif  _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcslen); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcslen  # if HAVE_RAW_DECL_WCSLEN @@ -613,10 +747,14 @@ _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "  /* Copy SRC to DEST.  */  #if @GNULIB_WCSCPY@  # if !@HAVE_WCSCPY@ -_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, +                  (wchar_t *restrict dest, const wchar_t *restrict src));  # endif -_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, +                  (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcscpy); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcscpy  # if HAVE_RAW_DECL_WCSCPY @@ -629,9 +767,11 @@ _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "  /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */  #if @GNULIB_WCPCPY@  # if !@HAVE_WCPCPY@ -_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, +                  (wchar_t *restrict dest, const wchar_t *restrict src));  # endif -_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, +                  (wchar_t *restrict dest, const wchar_t *restrict src));  _GL_CXXALIASWARN (wcpcpy);  #elif defined GNULIB_POSIXCHECK  # undef wcpcpy @@ -646,11 +786,15 @@ _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "  #if @GNULIB_WCSNCPY@  # if !@HAVE_WCSNCPY@  _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n));  # endif  _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsncpy); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsncpy  # if HAVE_RAW_DECL_WCSNCPY @@ -665,10 +809,12 @@ _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "  #if @GNULIB_WCPNCPY@  # if !@HAVE_WCPNCPY@  _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n));  # endif  _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, +                   const wchar_t *restrict src, size_t n));  _GL_CXXALIASWARN (wcpncpy);  #elif defined GNULIB_POSIXCHECK  # undef wcpncpy @@ -682,10 +828,14 @@ _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "  /* Append SRC onto DEST.  */  #if @GNULIB_WCSCAT@  # if !@HAVE_WCSCAT@ -_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_FUNCDECL_SYS (wcscat, wchar_t *, +                  (wchar_t *restrict dest, const wchar_t *restrict src));  # endif -_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIAS_SYS (wcscat, wchar_t *, +                  (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcscat); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcscat  # if HAVE_RAW_DECL_WCSCAT @@ -699,11 +849,15 @@ _GL_WARN_ON_USE (wcscat, "wcscat is unportable - "  #if @GNULIB_WCSNCAT@  # if !@HAVE_WCSNCAT@  _GL_FUNCDECL_SYS (wcsncat, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, const wchar_t *restrict src, +                   size_t n));  # endif  _GL_CXXALIAS_SYS (wcsncat, wchar_t *, -                  (wchar_t *dest, const wchar_t *src, size_t n)); +                  (wchar_t *restrict dest, const wchar_t *restrict src, +                   size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsncat); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsncat  # if HAVE_RAW_DECL_WCSNCAT @@ -720,7 +874,9 @@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)                                 _GL_ATTRIBUTE_PURE);  # endif  _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcscmp); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcscmp  # if HAVE_RAW_DECL_WCSCMP @@ -739,7 +895,9 @@ _GL_FUNCDECL_SYS (wcsncmp, int,  # endif  _GL_CXXALIAS_SYS (wcsncmp, int,                    (const wchar_t *s1, const wchar_t *s2, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsncmp); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsncmp  # if HAVE_RAW_DECL_WCSNCMP @@ -792,7 +950,9 @@ _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "  _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));  # endif  _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcscoll); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcscoll  # if HAVE_RAW_DECL_WCSCOLL @@ -807,10 +967,14 @@ _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "     original strings.  */  #if @GNULIB_WCSXFRM@  # if !@HAVE_WCSXFRM@ -_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_FUNCDECL_SYS (wcsxfrm, size_t, +                  (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));  # endif -_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIAS_SYS (wcsxfrm, size_t, +                  (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsxfrm); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsxfrm  # if HAVE_RAW_DECL_WCSXFRM @@ -822,16 +986,55 @@ _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "  /* Duplicate S, returning an identical malloc'd string.  */  #if @GNULIB_WCSDUP@ -# if !@HAVE_WCSDUP@ -_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); -# endif +# if defined _WIN32 && !defined __CYGWIN__ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef wcsdup +#   define wcsdup _wcsdup +#  endif +_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); +# else +#  if !@HAVE_WCSDUP@ || __GNUC__ >= 11 +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, +                  (const wchar_t *s) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +#  endif  _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif  _GL_CXXALIASWARN (wcsdup); -#elif defined GNULIB_POSIXCHECK -# undef wcsdup -# if HAVE_RAW_DECL_WCSDUP +#else +# if __GNUC__ >= 11 && !defined wcsdup +/* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free.  */ +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, +                  (const wchar_t *s) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +# endif +# if defined GNULIB_POSIXCHECK +#  undef wcsdup +#  if HAVE_RAW_DECL_WCSDUP  _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "                   "use gnulib module wcsdup for portability"); +#  endif +# elif @GNULIB_MDA_WCSDUP@ +/* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not +   required.  In C++ with GNULIB_NAMESPACE, avoid differences between +   platforms by defining GNULIB_NAMESPACE::wcsdup always.  */ +#  if defined _WIN32 && !defined __CYGWIN__ +#   if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#    undef wcsdup +#    define wcsdup _wcsdup +#   endif +_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); +#  else +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, +                  (const wchar_t *s) +                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); +#   if @HAVE_DECL_WCSDUP@ +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +#   endif +#  endif +#  if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@ +_GL_CXXALIASWARN (wcsdup); +#  endif  # endif  #endif @@ -854,7 +1057,7 @@ _GL_CXXALIAS_SYS_CAST2 (wcschr,       && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))  _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));  _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else +# elif __GLIBC__ >= 2  _GL_CXXALIASWARN (wcschr);  # endif  #elif defined GNULIB_POSIXCHECK @@ -884,7 +1087,7 @@ _GL_CXXALIAS_SYS_CAST2 (wcsrchr,       && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))  _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));  _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else +# elif __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsrchr);  # endif  #elif defined GNULIB_POSIXCHECK @@ -904,7 +1107,9 @@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)                                     _GL_ATTRIBUTE_PURE);  # endif  _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcscspn); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcscspn  # if HAVE_RAW_DECL_WCSCSPN @@ -922,7 +1127,9 @@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)                                    _GL_ATTRIBUTE_PURE);  # endif  _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsspn); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsspn  # if HAVE_RAW_DECL_WCSSPN @@ -953,7 +1160,7 @@ _GL_CXXALIASWARN1 (wcspbrk, wchar_t *,                     (wchar_t *wcs, const wchar_t *accept));  _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,                     (const wchar_t *wcs, const wchar_t *accept)); -# else +# elif __GLIBC__ >= 2  _GL_CXXALIASWARN (wcspbrk);  # endif  #elif defined GNULIB_POSIXCHECK @@ -969,7 +1176,8 @@ _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "  #if @GNULIB_WCSSTR@  # if !@HAVE_WCSSTR@  _GL_FUNCDECL_SYS (wcsstr, wchar_t *, -                  (const wchar_t *haystack, const wchar_t *needle) +                  (const wchar_t *restrict haystack, +                   const wchar_t *restrict needle)                    _GL_ATTRIBUTE_PURE);  # endif    /* On some systems, this function is defined as an overloaded function: @@ -978,15 +1186,19 @@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *,           wchar_t * std::wcsstr (wchar_t *, const wchar_t *);         }  */  _GL_CXXALIAS_SYS_CAST2 (wcsstr, -                        wchar_t *, (const wchar_t *, const wchar_t *), -                        const wchar_t *, (const wchar_t *, const wchar_t *)); +                        wchar_t *, +                        (const wchar_t *restrict, const wchar_t *restrict), +                        const wchar_t *, +                        (const wchar_t *restrict, const wchar_t *restrict));  # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \       && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))  _GL_CXXALIASWARN1 (wcsstr, wchar_t *, -                   (wchar_t *haystack, const wchar_t *needle)); +                   (wchar_t *restrict haystack, +                    const wchar_t *restrict needle));  _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, -                   (const wchar_t *haystack, const wchar_t *needle)); -# else +                   (const wchar_t *restrict haystack, +                    const wchar_t *restrict needle)); +# elif __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsstr);  # endif  #elif defined GNULIB_POSIXCHECK @@ -1000,13 +1212,30 @@ _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "  /* Divide WCS into tokens separated by characters in DELIM.  */  #if @GNULIB_WCSTOK@ -# if !@HAVE_WCSTOK@ +# if @REPLACE_WCSTOK@ +#  if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#   undef wcstok +#   define wcstok rpl_wcstok +#  endif +_GL_FUNCDECL_RPL (wcstok, wchar_t *, +                  (wchar_t *restrict wcs, const wchar_t *restrict delim, +                   wchar_t **restrict ptr)); +_GL_CXXALIAS_RPL (wcstok, wchar_t *, +                  (wchar_t *restrict wcs, const wchar_t *restrict delim, +                   wchar_t **restrict ptr)); +# else +#  if !@HAVE_WCSTOK@  _GL_FUNCDECL_SYS (wcstok, wchar_t *, -                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); -# endif +                  (wchar_t *restrict wcs, const wchar_t *restrict delim, +                   wchar_t **restrict ptr)); +#  endif  _GL_CXXALIAS_SYS (wcstok, wchar_t *, -                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +                  (wchar_t *restrict wcs, const wchar_t *restrict delim, +                   wchar_t **restrict ptr)); +# endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcstok); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcstok  # if HAVE_RAW_DECL_WCSTOK @@ -1034,7 +1263,9 @@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)  #  endif  _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcswidth); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcswidth  # if HAVE_RAW_DECL_WCSWIDTH @@ -1045,28 +1276,38 @@ _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "  /* Convert *TP to a date and time wide string.  See -   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>.  */ +   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>.  */  #if @GNULIB_WCSFTIME@  # if @REPLACE_WCSFTIME@  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #   undef wcsftime  #   define wcsftime rpl_wcsftime  #  endif -_GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, -                                     const wchar_t *__fmt, const struct tm *__tp) -                                    _GL_ARG_NONNULL ((1, 3, 4))); -_GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, -                                     const wchar_t *__fmt, const struct tm *__tp)); +_GL_FUNCDECL_RPL (wcsftime, size_t, +                  (wchar_t *restrict __buf, size_t __bufsize, +                   const wchar_t *restrict __fmt, +                   const struct tm *restrict __tp) +                  _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (wcsftime, size_t, +                  (wchar_t *restrict __buf, size_t __bufsize, +                   const wchar_t *restrict __fmt, +                   const struct tm *restrict __tp));  # else  #  if !@HAVE_WCSFTIME@ -_GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, -                                     const wchar_t *__fmt, const struct tm *__tp) -                                    _GL_ARG_NONNULL ((1, 3, 4))); +_GL_FUNCDECL_SYS (wcsftime, size_t, +                  (wchar_t *restrict __buf, size_t __bufsize, +                   const wchar_t *restrict __fmt, +                   const struct tm *restrict __tp) +                  _GL_ARG_NONNULL ((1, 3, 4)));  #  endif -_GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, -                                     const wchar_t *__fmt, const struct tm *__tp)); +_GL_CXXALIAS_SYS (wcsftime, size_t, +                  (wchar_t *restrict __buf, size_t __bufsize, +                   const wchar_t *restrict __fmt, +                   const struct tm *restrict __tp));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (wcsftime); +# endif  #elif defined GNULIB_POSIXCHECK  # undef wcsftime  # if HAVE_RAW_DECL_WCSFTIME  | 
