source: trunk/src/sed/lib/wchar.in.h@ 3613

Last change on this file since 3613 was 3613, checked in by bird, 10 months ago

src/sed: Merged in changes between 4.1.5 and 4.9 from the vendor branch. (svn merge /vendor/sed/4.1.5 /vendor/sed/current .)

File size: 44.1 KB
Line 
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
150typedef 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)
170typedef 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 && !defined free
189_GL_EXTERN_C
190# if defined _DLL
191 __declspec (dllimport)
192# endif
193 void __cdecl free (void *);
194# else
195# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
196_GL_EXTERN_C void free (void *) throw ();
197# else
198_GL_EXTERN_C void free (void *);
199# endif
200# endif
201# endif
202#else
203# if defined _MSC_VER && !defined free
204_GL_EXTERN_C
205# if defined _DLL
206 __declspec (dllimport)
207# endif
208 void __cdecl free (void *);
209# else
210# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
211_GL_EXTERN_C void free (void *) throw ();
212# else
213_GL_EXTERN_C void free (void *);
214# endif
215# endif
216#endif
217
218/* Convert a single-byte character to a wide character. */
219#if @GNULIB_BTOWC@
220# if @REPLACE_BTOWC@
221# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
222# undef btowc
223# define btowc rpl_btowc
224# endif
225_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
226_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
227# else
228# if !@HAVE_BTOWC@
229_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
230# endif
231/* Need to cast, because on mingw, the return type is 'unsigned short'. */
232_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c));
233# endif
234# if __GLIBC__ >= 2
235_GL_CXXALIASWARN (btowc);
236# endif
237#elif defined GNULIB_POSIXCHECK
238# undef btowc
239# if HAVE_RAW_DECL_BTOWC
240_GL_WARN_ON_USE (btowc, "btowc is unportable - "
241 "use gnulib module btowc for portability");
242# endif
243#endif
244
245
246/* Convert a wide character to a single-byte character. */
247#if @GNULIB_WCTOB@
248# if @REPLACE_WCTOB@
249# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
250# undef wctob
251# define wctob rpl_wctob
252# endif
253_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
254_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
255# else
256# if !defined wctob && !@HAVE_DECL_WCTOB@
257/* wctob is provided by gnulib, or wctob exists but is not declared. */
258_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
259# endif
260_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
261# endif
262# if __GLIBC__ >= 2
263_GL_CXXALIASWARN (wctob);
264# endif
265#elif defined GNULIB_POSIXCHECK
266# undef wctob
267# if HAVE_RAW_DECL_WCTOB
268_GL_WARN_ON_USE (wctob, "wctob is unportable - "
269 "use gnulib module wctob for portability");
270# endif
271#endif
272
273
274/* Test whether *PS is in the initial state. */
275#if @GNULIB_MBSINIT@
276# if @REPLACE_MBSINIT@
277# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
278# undef mbsinit
279# define mbsinit rpl_mbsinit
280# endif
281_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
282_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
283# else
284# if !@HAVE_MBSINIT@
285_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
286# endif
287_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
288# endif
289# if __GLIBC__ >= 2
290_GL_CXXALIASWARN (mbsinit);
291# endif
292#elif defined GNULIB_POSIXCHECK
293# undef mbsinit
294# if HAVE_RAW_DECL_MBSINIT
295_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
296 "use gnulib module mbsinit for portability");
297# endif
298#endif
299
300
301/* Convert a multibyte character to a wide character. */
302#if @GNULIB_MBRTOWC@
303# if @REPLACE_MBRTOWC@
304# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
305# undef mbrtowc
306# define mbrtowc rpl_mbrtowc
307# endif
308_GL_FUNCDECL_RPL (mbrtowc, size_t,
309 (wchar_t *restrict pwc, const char *restrict s, size_t n,
310 mbstate_t *restrict ps));
311_GL_CXXALIAS_RPL (mbrtowc, size_t,
312 (wchar_t *restrict pwc, const char *restrict s, size_t n,
313 mbstate_t *restrict ps));
314# else
315# if !@HAVE_MBRTOWC@
316_GL_FUNCDECL_SYS (mbrtowc, size_t,
317 (wchar_t *restrict pwc, const char *restrict s, size_t n,
318 mbstate_t *restrict ps));
319# endif
320_GL_CXXALIAS_SYS (mbrtowc, size_t,
321 (wchar_t *restrict pwc, const char *restrict s, size_t n,
322 mbstate_t *restrict ps));
323# endif
324# if __GLIBC__ >= 2
325_GL_CXXALIASWARN (mbrtowc);
326# endif
327#elif defined GNULIB_POSIXCHECK
328# undef mbrtowc
329# if HAVE_RAW_DECL_MBRTOWC
330_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
331 "use gnulib module mbrtowc for portability");
332# endif
333#endif
334
335
336/* Recognize a multibyte character. */
337#if @GNULIB_MBRLEN@
338# if @REPLACE_MBRLEN@
339# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
340# undef mbrlen
341# define mbrlen rpl_mbrlen
342# endif
343_GL_FUNCDECL_RPL (mbrlen, size_t,
344 (const char *restrict s, size_t n, mbstate_t *restrict ps));
345_GL_CXXALIAS_RPL (mbrlen, size_t,
346 (const char *restrict s, size_t n, mbstate_t *restrict ps));
347# else
348# if !@HAVE_MBRLEN@
349_GL_FUNCDECL_SYS (mbrlen, size_t,
350 (const char *restrict s, size_t n, mbstate_t *restrict ps));
351# endif
352_GL_CXXALIAS_SYS (mbrlen, size_t,
353 (const char *restrict s, size_t n, mbstate_t *restrict ps));
354# endif
355# if __GLIBC__ >= 2
356_GL_CXXALIASWARN (mbrlen);
357# endif
358#elif defined GNULIB_POSIXCHECK
359# undef mbrlen
360# if HAVE_RAW_DECL_MBRLEN
361_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
362 "use gnulib module mbrlen for portability");
363# endif
364#endif
365
366
367/* Convert a string to a wide string. */
368#if @GNULIB_MBSRTOWCS@
369# if @REPLACE_MBSRTOWCS@
370# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
371# undef mbsrtowcs
372# define mbsrtowcs rpl_mbsrtowcs
373# endif
374_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
375 (wchar_t *restrict dest,
376 const char **restrict srcp, size_t len,
377 mbstate_t *restrict ps)
378 _GL_ARG_NONNULL ((2)));
379_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
380 (wchar_t *restrict dest,
381 const char **restrict srcp, size_t len,
382 mbstate_t *restrict ps));
383# else
384# if !@HAVE_MBSRTOWCS@
385_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
386 (wchar_t *restrict dest,
387 const char **restrict srcp, size_t len,
388 mbstate_t *restrict ps)
389 _GL_ARG_NONNULL ((2)));
390# endif
391_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
392 (wchar_t *restrict dest,
393 const char **restrict srcp, size_t len,
394 mbstate_t *restrict ps));
395# endif
396# if __GLIBC__ >= 2
397_GL_CXXALIASWARN (mbsrtowcs);
398# endif
399#elif defined GNULIB_POSIXCHECK
400# undef mbsrtowcs
401# if HAVE_RAW_DECL_MBSRTOWCS
402_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
403 "use gnulib module mbsrtowcs for portability");
404# endif
405#endif
406
407
408/* Convert a string to a wide string. */
409#if @GNULIB_MBSNRTOWCS@
410# if @REPLACE_MBSNRTOWCS@
411# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
412# undef mbsnrtowcs
413# define mbsnrtowcs rpl_mbsnrtowcs
414# endif
415_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
416 (wchar_t *restrict dest,
417 const char **restrict srcp, size_t srclen, size_t len,
418 mbstate_t *restrict ps)
419 _GL_ARG_NONNULL ((2)));
420_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
421 (wchar_t *restrict dest,
422 const char **restrict srcp, size_t srclen, size_t len,
423 mbstate_t *restrict ps));
424# else
425# if !@HAVE_MBSNRTOWCS@
426_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
427 (wchar_t *restrict dest,
428 const char **restrict srcp, size_t srclen, size_t len,
429 mbstate_t *restrict ps)
430 _GL_ARG_NONNULL ((2)));
431# endif
432_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
433 (wchar_t *restrict dest,
434 const char **restrict srcp, size_t srclen, size_t len,
435 mbstate_t *restrict ps));
436# endif
437_GL_CXXALIASWARN (mbsnrtowcs);
438#elif defined GNULIB_POSIXCHECK
439# undef mbsnrtowcs
440# if HAVE_RAW_DECL_MBSNRTOWCS
441_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
442 "use gnulib module mbsnrtowcs for portability");
443# endif
444#endif
445
446
447/* Convert a wide character to a multibyte character. */
448#if @GNULIB_WCRTOMB@
449# if @REPLACE_WCRTOMB@
450# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
451# undef wcrtomb
452# define wcrtomb rpl_wcrtomb
453# endif
454_GL_FUNCDECL_RPL (wcrtomb, size_t,
455 (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
456_GL_CXXALIAS_RPL (wcrtomb, size_t,
457 (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
458# else
459# if !@HAVE_WCRTOMB@
460_GL_FUNCDECL_SYS (wcrtomb, size_t,
461 (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
462# endif
463_GL_CXXALIAS_SYS (wcrtomb, size_t,
464 (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
465# endif
466# if __GLIBC__ >= 2
467_GL_CXXALIASWARN (wcrtomb);
468# endif
469#elif defined GNULIB_POSIXCHECK
470# undef wcrtomb
471# if HAVE_RAW_DECL_WCRTOMB
472_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
473 "use gnulib module wcrtomb for portability");
474# endif
475#endif
476
477
478/* Convert a wide string to a string. */
479#if @GNULIB_WCSRTOMBS@
480# if @REPLACE_WCSRTOMBS@
481# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
482# undef wcsrtombs
483# define wcsrtombs rpl_wcsrtombs
484# endif
485_GL_FUNCDECL_RPL (wcsrtombs, size_t,
486 (char *restrict dest, const wchar_t **restrict srcp,
487 size_t len,
488 mbstate_t *restrict ps)
489 _GL_ARG_NONNULL ((2)));
490_GL_CXXALIAS_RPL (wcsrtombs, size_t,
491 (char *restrict dest, const wchar_t **restrict srcp,
492 size_t len,
493 mbstate_t *restrict ps));
494# else
495# if !@HAVE_WCSRTOMBS@
496_GL_FUNCDECL_SYS (wcsrtombs, size_t,
497 (char *restrict dest, const wchar_t **restrict srcp,
498 size_t len,
499 mbstate_t *restrict ps)
500 _GL_ARG_NONNULL ((2)));
501# endif
502_GL_CXXALIAS_SYS (wcsrtombs, size_t,
503 (char *restrict dest, const wchar_t **restrict srcp,
504 size_t len,
505 mbstate_t *restrict ps));
506# endif
507# if __GLIBC__ >= 2
508_GL_CXXALIASWARN (wcsrtombs);
509# endif
510#elif defined GNULIB_POSIXCHECK
511# undef wcsrtombs
512# if HAVE_RAW_DECL_WCSRTOMBS
513_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
514 "use gnulib module wcsrtombs for portability");
515# endif
516#endif
517
518
519/* Convert a wide string to a string. */
520#if @GNULIB_WCSNRTOMBS@
521# if @REPLACE_WCSNRTOMBS@
522# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
523# undef wcsnrtombs
524# define wcsnrtombs rpl_wcsnrtombs
525# endif
526_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
527 (char *restrict dest,
528 const wchar_t **restrict srcp, size_t srclen,
529 size_t len,
530 mbstate_t *restrict ps)
531 _GL_ARG_NONNULL ((2)));
532_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
533 (char *restrict dest,
534 const wchar_t **restrict srcp, size_t srclen,
535 size_t len,
536 mbstate_t *restrict ps));
537# else
538# if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun)
539_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
540 (char *restrict dest,
541 const wchar_t **restrict srcp, size_t srclen,
542 size_t len,
543 mbstate_t *restrict ps)
544 _GL_ARG_NONNULL ((2)));
545# endif
546_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
547 (char *restrict dest,
548 const wchar_t **restrict srcp, size_t srclen,
549 size_t len,
550 mbstate_t *restrict ps));
551# endif
552# if __GLIBC__ >= 2
553_GL_CXXALIASWARN (wcsnrtombs);
554# endif
555#elif defined GNULIB_POSIXCHECK
556# undef wcsnrtombs
557# if HAVE_RAW_DECL_WCSNRTOMBS
558_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
559 "use gnulib module wcsnrtombs for portability");
560# endif
561#endif
562
563
564/* Return the number of screen columns needed for WC. */
565#if @GNULIB_WCWIDTH@
566# if @REPLACE_WCWIDTH@
567# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
568# undef wcwidth
569# define wcwidth rpl_wcwidth
570# endif
571_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
572_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
573# else
574# if !@HAVE_DECL_WCWIDTH@
575/* wcwidth exists but is not declared. */
576_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
577# endif
578_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
579# endif
580# if __GLIBC__ >= 2
581_GL_CXXALIASWARN (wcwidth);
582# endif
583#elif defined GNULIB_POSIXCHECK
584# undef wcwidth
585# if HAVE_RAW_DECL_WCWIDTH
586_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
587 "use gnulib module wcwidth for portability");
588# endif
589#endif
590
591
592/* Search N wide characters of S for C. */
593#if @GNULIB_WMEMCHR@
594# if !@HAVE_WMEMCHR@
595_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
596 _GL_ATTRIBUTE_PURE);
597# endif
598 /* On some systems, this function is defined as an overloaded function:
599 extern "C++" {
600 const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
601 wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
602 } */
603_GL_CXXALIAS_SYS_CAST2 (wmemchr,
604 wchar_t *, (const wchar_t *, wchar_t, size_t),
605 const wchar_t *, (const wchar_t *, wchar_t, size_t));
606# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
607 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
608_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
609_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
610 (const wchar_t *s, wchar_t c, size_t n));
611# elif __GLIBC__ >= 2
612_GL_CXXALIASWARN (wmemchr);
613# endif
614#elif defined GNULIB_POSIXCHECK
615# undef wmemchr
616# if HAVE_RAW_DECL_WMEMCHR
617_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
618 "use gnulib module wmemchr for portability");
619# endif
620#endif
621
622
623/* Compare N wide characters of S1 and S2. */
624#if @GNULIB_WMEMCMP@
625# if !@HAVE_WMEMCMP@
626_GL_FUNCDECL_SYS (wmemcmp, int,
627 (const wchar_t *s1, const wchar_t *s2, size_t n)
628 _GL_ATTRIBUTE_PURE);
629# endif
630_GL_CXXALIAS_SYS (wmemcmp, int,
631 (const wchar_t *s1, const wchar_t *s2, size_t n));
632# if __GLIBC__ >= 2
633_GL_CXXALIASWARN (wmemcmp);
634# endif
635#elif defined GNULIB_POSIXCHECK
636# undef wmemcmp
637# if HAVE_RAW_DECL_WMEMCMP
638_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
639 "use gnulib module wmemcmp for portability");
640# endif
641#endif
642
643
644/* Copy N wide characters of SRC to DEST. */
645#if @GNULIB_WMEMCPY@
646# if !@HAVE_WMEMCPY@
647_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
648 (wchar_t *restrict dest,
649 const wchar_t *restrict src, size_t n));
650# endif
651_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
652 (wchar_t *restrict dest,
653 const wchar_t *restrict src, size_t n));
654# if __GLIBC__ >= 2
655_GL_CXXALIASWARN (wmemcpy);
656# endif
657#elif defined GNULIB_POSIXCHECK
658# undef wmemcpy
659# if HAVE_RAW_DECL_WMEMCPY
660_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
661 "use gnulib module wmemcpy for portability");
662# endif
663#endif
664
665
666/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
667 overlapping memory areas. */
668#if @GNULIB_WMEMMOVE@
669# if !@HAVE_WMEMMOVE@
670_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
671 (wchar_t *dest, const wchar_t *src, size_t n));
672# endif
673_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
674 (wchar_t *dest, const wchar_t *src, size_t n));
675# if __GLIBC__ >= 2
676_GL_CXXALIASWARN (wmemmove);
677# endif
678#elif defined GNULIB_POSIXCHECK
679# undef wmemmove
680# if HAVE_RAW_DECL_WMEMMOVE
681_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
682 "use gnulib module wmemmove for portability");
683# endif
684#endif
685
686
687/* Copy N wide characters of SRC to DEST.
688 Return pointer to wide characters after the last written wide character. */
689#if @GNULIB_WMEMPCPY@
690# if !@HAVE_WMEMPCPY@
691_GL_FUNCDECL_SYS (wmempcpy, wchar_t *,
692 (wchar_t *restrict dest,
693 const wchar_t *restrict src, size_t n));
694# endif
695_GL_CXXALIAS_SYS (wmempcpy, wchar_t *,
696 (wchar_t *restrict dest,
697 const wchar_t *restrict src, size_t n));
698# if __GLIBC__ >= 2
699_GL_CXXALIASWARN (wmempcpy);
700# endif
701#elif defined GNULIB_POSIXCHECK
702# undef wmempcpy
703# if HAVE_RAW_DECL_WMEMPCPY
704_GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - "
705 "use gnulib module wmempcpy for portability");
706# endif
707#endif
708
709
710/* Set N wide characters of S to C. */
711#if @GNULIB_WMEMSET@
712# if !@HAVE_WMEMSET@
713_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
714# endif
715_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
716# if __GLIBC__ >= 2
717_GL_CXXALIASWARN (wmemset);
718# endif
719#elif defined GNULIB_POSIXCHECK
720# undef wmemset
721# if HAVE_RAW_DECL_WMEMSET
722_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
723 "use gnulib module wmemset for portability");
724# endif
725#endif
726
727
728/* Return the number of wide characters in S. */
729#if @GNULIB_WCSLEN@
730# if !@HAVE_WCSLEN@
731_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
732# endif
733_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
734# if __GLIBC__ >= 2
735_GL_CXXALIASWARN (wcslen);
736# endif
737#elif defined GNULIB_POSIXCHECK
738# undef wcslen
739# if HAVE_RAW_DECL_WCSLEN
740_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
741 "use gnulib module wcslen for portability");
742# endif
743#endif
744
745
746/* Return the number of wide characters in S, but at most MAXLEN. */
747#if @GNULIB_WCSNLEN@
748/* On Solaris 11.3, the header files declare the function in the std::
749 namespace, not in the global namespace. So, force a declaration in
750 the global namespace. */
751# if !@HAVE_WCSNLEN@ || (defined __sun && defined __cplusplus)
752_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
753 _GL_ATTRIBUTE_PURE);
754# endif
755_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
756_GL_CXXALIASWARN (wcsnlen);
757#elif defined GNULIB_POSIXCHECK
758# undef wcsnlen
759# if HAVE_RAW_DECL_WCSNLEN
760_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
761 "use gnulib module wcsnlen for portability");
762# endif
763#endif
764
765
766/* Copy SRC to DEST. */
767#if @GNULIB_WCSCPY@
768# if !@HAVE_WCSCPY@
769_GL_FUNCDECL_SYS (wcscpy, wchar_t *,
770 (wchar_t *restrict dest, const wchar_t *restrict src));
771# endif
772_GL_CXXALIAS_SYS (wcscpy, wchar_t *,
773 (wchar_t *restrict dest, const wchar_t *restrict src));
774# if __GLIBC__ >= 2
775_GL_CXXALIASWARN (wcscpy);
776# endif
777#elif defined GNULIB_POSIXCHECK
778# undef wcscpy
779# if HAVE_RAW_DECL_WCSCPY
780_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
781 "use gnulib module wcscpy for portability");
782# endif
783#endif
784
785
786/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */
787#if @GNULIB_WCPCPY@
788/* On Solaris 11.3, the header files declare the function in the std::
789 namespace, not in the global namespace. So, force a declaration in
790 the global namespace. */
791# if !@HAVE_WCPCPY@ || (defined __sun && defined __cplusplus)
792_GL_FUNCDECL_SYS (wcpcpy, wchar_t *,
793 (wchar_t *restrict dest, const wchar_t *restrict src));
794# endif
795_GL_CXXALIAS_SYS (wcpcpy, wchar_t *,
796 (wchar_t *restrict dest, const wchar_t *restrict src));
797_GL_CXXALIASWARN (wcpcpy);
798#elif defined GNULIB_POSIXCHECK
799# undef wcpcpy
800# if HAVE_RAW_DECL_WCPCPY
801_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
802 "use gnulib module wcpcpy for portability");
803# endif
804#endif
805
806
807/* Copy no more than N wide characters of SRC to DEST. */
808#if @GNULIB_WCSNCPY@
809# if !@HAVE_WCSNCPY@
810_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
811 (wchar_t *restrict dest,
812 const wchar_t *restrict src, size_t n));
813# endif
814_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
815 (wchar_t *restrict dest,
816 const wchar_t *restrict src, size_t n));
817# if __GLIBC__ >= 2
818_GL_CXXALIASWARN (wcsncpy);
819# endif
820#elif defined GNULIB_POSIXCHECK
821# undef wcsncpy
822# if HAVE_RAW_DECL_WCSNCPY
823_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
824 "use gnulib module wcsncpy for portability");
825# endif
826#endif
827
828
829/* Copy no more than N characters of SRC to DEST, returning the address of
830 the last character written into DEST. */
831#if @GNULIB_WCPNCPY@
832/* On Solaris 11.3, the header files declare the function in the std::
833 namespace, not in the global namespace. So, force a declaration in
834 the global namespace. */
835# if !@HAVE_WCPNCPY@ || (defined __sun && defined __cplusplus)
836_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
837 (wchar_t *restrict dest,
838 const wchar_t *restrict src, size_t n));
839# endif
840_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
841 (wchar_t *restrict dest,
842 const wchar_t *restrict src, size_t n));
843_GL_CXXALIASWARN (wcpncpy);
844#elif defined GNULIB_POSIXCHECK
845# undef wcpncpy
846# if HAVE_RAW_DECL_WCPNCPY
847_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
848 "use gnulib module wcpncpy for portability");
849# endif
850#endif
851
852
853/* Append SRC onto DEST. */
854#if @GNULIB_WCSCAT@
855# if !@HAVE_WCSCAT@
856_GL_FUNCDECL_SYS (wcscat, wchar_t *,
857 (wchar_t *restrict dest, const wchar_t *restrict src));
858# endif
859_GL_CXXALIAS_SYS (wcscat, wchar_t *,
860 (wchar_t *restrict dest, const wchar_t *restrict src));
861# if __GLIBC__ >= 2
862_GL_CXXALIASWARN (wcscat);
863# endif
864#elif defined GNULIB_POSIXCHECK
865# undef wcscat
866# if HAVE_RAW_DECL_WCSCAT
867_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
868 "use gnulib module wcscat for portability");
869# endif
870#endif
871
872
873/* Append no more than N wide characters of SRC onto DEST. */
874#if @GNULIB_WCSNCAT@
875# if !@HAVE_WCSNCAT@
876_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
877 (wchar_t *restrict dest, const wchar_t *restrict src,
878 size_t n));
879# endif
880_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
881 (wchar_t *restrict dest, const wchar_t *restrict src,
882 size_t n));
883# if __GLIBC__ >= 2
884_GL_CXXALIASWARN (wcsncat);
885# endif
886#elif defined GNULIB_POSIXCHECK
887# undef wcsncat
888# if HAVE_RAW_DECL_WCSNCAT
889_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
890 "use gnulib module wcsncat for portability");
891# endif
892#endif
893
894
895/* Compare S1 and S2. */
896#if @GNULIB_WCSCMP@
897# if !@HAVE_WCSCMP@
898_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
899 _GL_ATTRIBUTE_PURE);
900# endif
901_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
902# if __GLIBC__ >= 2
903_GL_CXXALIASWARN (wcscmp);
904# endif
905#elif defined GNULIB_POSIXCHECK
906# undef wcscmp
907# if HAVE_RAW_DECL_WCSCMP
908_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
909 "use gnulib module wcscmp for portability");
910# endif
911#endif
912
913
914/* Compare no more than N wide characters of S1 and S2. */
915#if @GNULIB_WCSNCMP@
916# if !@HAVE_WCSNCMP@
917_GL_FUNCDECL_SYS (wcsncmp, int,
918 (const wchar_t *s1, const wchar_t *s2, size_t n)
919 _GL_ATTRIBUTE_PURE);
920# endif
921_GL_CXXALIAS_SYS (wcsncmp, int,
922 (const wchar_t *s1, const wchar_t *s2, size_t n));
923# if __GLIBC__ >= 2
924_GL_CXXALIASWARN (wcsncmp);
925# endif
926#elif defined GNULIB_POSIXCHECK
927# undef wcsncmp
928# if HAVE_RAW_DECL_WCSNCMP
929_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
930 "use gnulib module wcsncmp for portability");
931# endif
932#endif
933
934
935/* Compare S1 and S2, ignoring case. */
936#if @GNULIB_WCSCASECMP@
937/* On Solaris 11.3, the header files declare the function in the std::
938 namespace, not in the global namespace. So, force a declaration in
939 the global namespace. */
940# if !@HAVE_WCSCASECMP@ || (defined __sun && defined __cplusplus)
941_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
942 _GL_ATTRIBUTE_PURE);
943# endif
944_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
945_GL_CXXALIASWARN (wcscasecmp);
946#elif defined GNULIB_POSIXCHECK
947# undef wcscasecmp
948# if HAVE_RAW_DECL_WCSCASECMP
949_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
950 "use gnulib module wcscasecmp for portability");
951# endif
952#endif
953
954
955/* Compare no more than N chars of S1 and S2, ignoring case. */
956#if @GNULIB_WCSNCASECMP@
957/* On Solaris 11.3, the header files declare the function in the std::
958 namespace, not in the global namespace. So, force a declaration in
959 the global namespace. */
960# if !@HAVE_WCSNCASECMP@ || (defined __sun && defined __cplusplus)
961_GL_FUNCDECL_SYS (wcsncasecmp, int,
962 (const wchar_t *s1, const wchar_t *s2, size_t n)
963 _GL_ATTRIBUTE_PURE);
964# endif
965_GL_CXXALIAS_SYS (wcsncasecmp, int,
966 (const wchar_t *s1, const wchar_t *s2, size_t n));
967_GL_CXXALIASWARN (wcsncasecmp);
968#elif defined GNULIB_POSIXCHECK
969# undef wcsncasecmp
970# if HAVE_RAW_DECL_WCSNCASECMP
971_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
972 "use gnulib module wcsncasecmp for portability");
973# endif
974#endif
975
976
977/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
978 category of the current locale. */
979#if @GNULIB_WCSCOLL@
980# if !@HAVE_WCSCOLL@
981_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
982# endif
983_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
984# if __GLIBC__ >= 2
985_GL_CXXALIASWARN (wcscoll);
986# endif
987#elif defined GNULIB_POSIXCHECK
988# undef wcscoll
989# if HAVE_RAW_DECL_WCSCOLL
990_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
991 "use gnulib module wcscoll for portability");
992# endif
993#endif
994
995
996/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
997 to two transformed strings the result is the as applying 'wcscoll' to the
998 original strings. */
999#if @GNULIB_WCSXFRM@
1000# if !@HAVE_WCSXFRM@
1001_GL_FUNCDECL_SYS (wcsxfrm, size_t,
1002 (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));
1003# endif
1004_GL_CXXALIAS_SYS (wcsxfrm, size_t,
1005 (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));
1006# if __GLIBC__ >= 2
1007_GL_CXXALIASWARN (wcsxfrm);
1008# endif
1009#elif defined GNULIB_POSIXCHECK
1010# undef wcsxfrm
1011# if HAVE_RAW_DECL_WCSXFRM
1012_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
1013 "use gnulib module wcsxfrm for portability");
1014# endif
1015#endif
1016
1017
1018/* Duplicate S, returning an identical malloc'd string. */
1019#if @GNULIB_WCSDUP@
1020# if defined _WIN32 && !defined __CYGWIN__
1021# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1022# undef wcsdup
1023# define wcsdup _wcsdup
1024# endif
1025_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
1026# else
1027/* On Solaris 11.3, the header files declare the function in the std::
1028 namespace, not in the global namespace. So, force a declaration in
1029 the global namespace. */
1030# if !@HAVE_WCSDUP@ || (defined __sun && defined __cplusplus) || __GNUC__ >= 11
1031_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
1032 (const wchar_t *s)
1033 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
1034# endif
1035_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
1036# endif
1037_GL_CXXALIASWARN (wcsdup);
1038#else
1039# if __GNUC__ >= 11 && !defined wcsdup
1040/* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */
1041_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
1042 (const wchar_t *s)
1043 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
1044# endif
1045# if defined GNULIB_POSIXCHECK
1046# undef wcsdup
1047# if HAVE_RAW_DECL_WCSDUP
1048_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
1049 "use gnulib module wcsdup for portability");
1050# endif
1051# elif @GNULIB_MDA_WCSDUP@
1052/* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not
1053 required. In C++ with GNULIB_NAMESPACE, avoid differences between
1054 platforms by defining GNULIB_NAMESPACE::wcsdup always. */
1055# if defined _WIN32 && !defined __CYGWIN__
1056# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1057# undef wcsdup
1058# define wcsdup _wcsdup
1059# endif
1060_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
1061# else
1062_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
1063 (const wchar_t *s)
1064 _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
1065# if @HAVE_DECL_WCSDUP@
1066_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
1067# endif
1068# endif
1069# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@
1070_GL_CXXALIASWARN (wcsdup);
1071# endif
1072# endif
1073#endif
1074
1075
1076/* Find the first occurrence of WC in WCS. */
1077#if @GNULIB_WCSCHR@
1078# if !@HAVE_WCSCHR@
1079_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
1080 _GL_ATTRIBUTE_PURE);
1081# endif
1082 /* On some systems, this function is defined as an overloaded function:
1083 extern "C++" {
1084 const wchar_t * std::wcschr (const wchar_t *, wchar_t);
1085 wchar_t * std::wcschr (wchar_t *, wchar_t);
1086 } */
1087_GL_CXXALIAS_SYS_CAST2 (wcschr,
1088 wchar_t *, (const wchar_t *, wchar_t),
1089 const wchar_t *, (const wchar_t *, wchar_t));
1090# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
1091 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
1092_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
1093_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
1094# elif __GLIBC__ >= 2
1095_GL_CXXALIASWARN (wcschr);
1096# endif
1097#elif defined GNULIB_POSIXCHECK
1098# undef wcschr
1099# if HAVE_RAW_DECL_WCSCHR
1100_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
1101 "use gnulib module wcschr for portability");
1102# endif
1103#endif
1104
1105
1106/* Find the last occurrence of WC in WCS. */
1107#if @GNULIB_WCSRCHR@
1108# if !@HAVE_WCSRCHR@
1109_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
1110 _GL_ATTRIBUTE_PURE);
1111# endif
1112 /* On some systems, this function is defined as an overloaded function:
1113 extern "C++" {
1114 const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
1115 wchar_t * std::wcsrchr (wchar_t *, wchar_t);
1116 } */
1117_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
1118 wchar_t *, (const wchar_t *, wchar_t),
1119 const wchar_t *, (const wchar_t *, wchar_t));
1120# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
1121 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
1122_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
1123_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
1124# elif __GLIBC__ >= 2
1125_GL_CXXALIASWARN (wcsrchr);
1126# endif
1127#elif defined GNULIB_POSIXCHECK
1128# undef wcsrchr
1129# if HAVE_RAW_DECL_WCSRCHR
1130_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
1131 "use gnulib module wcsrchr for portability");
1132# endif
1133#endif
1134
1135
1136/* Return the length of the initial segmet of WCS which consists entirely
1137 of wide characters not in REJECT. */
1138#if @GNULIB_WCSCSPN@
1139# if !@HAVE_WCSCSPN@
1140_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
1141 _GL_ATTRIBUTE_PURE);
1142# endif
1143_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
1144# if __GLIBC__ >= 2
1145_GL_CXXALIASWARN (wcscspn);
1146# endif
1147#elif defined GNULIB_POSIXCHECK
1148# undef wcscspn
1149# if HAVE_RAW_DECL_WCSCSPN
1150_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
1151 "use gnulib module wcscspn for portability");
1152# endif
1153#endif
1154
1155
1156/* Return the length of the initial segmet of WCS which consists entirely
1157 of wide characters in ACCEPT. */
1158#if @GNULIB_WCSSPN@
1159# if !@HAVE_WCSSPN@
1160_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
1161 _GL_ATTRIBUTE_PURE);
1162# endif
1163_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
1164# if __GLIBC__ >= 2
1165_GL_CXXALIASWARN (wcsspn);
1166# endif
1167#elif defined GNULIB_POSIXCHECK
1168# undef wcsspn
1169# if HAVE_RAW_DECL_WCSSPN
1170_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
1171 "use gnulib module wcsspn for portability");
1172# endif
1173#endif
1174
1175
1176/* Find the first occurrence in WCS of any character in ACCEPT. */
1177#if @GNULIB_WCSPBRK@
1178# if !@HAVE_WCSPBRK@
1179_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
1180 (const wchar_t *wcs, const wchar_t *accept)
1181 _GL_ATTRIBUTE_PURE);
1182# endif
1183 /* On some systems, this function is defined as an overloaded function:
1184 extern "C++" {
1185 const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
1186 wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
1187 } */
1188_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
1189 wchar_t *, (const wchar_t *, const wchar_t *),
1190 const wchar_t *, (const wchar_t *, const wchar_t *));
1191# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
1192 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
1193_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
1194 (wchar_t *wcs, const wchar_t *accept));
1195_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
1196 (const wchar_t *wcs, const wchar_t *accept));
1197# elif __GLIBC__ >= 2
1198_GL_CXXALIASWARN (wcspbrk);
1199# endif
1200#elif defined GNULIB_POSIXCHECK
1201# undef wcspbrk
1202# if HAVE_RAW_DECL_WCSPBRK
1203_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
1204 "use gnulib module wcspbrk for portability");
1205# endif
1206#endif
1207
1208
1209/* Find the first occurrence of NEEDLE in HAYSTACK. */
1210#if @GNULIB_WCSSTR@
1211# if !@HAVE_WCSSTR@
1212_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
1213 (const wchar_t *restrict haystack,
1214 const wchar_t *restrict needle)
1215 _GL_ATTRIBUTE_PURE);
1216# endif
1217 /* On some systems, this function is defined as an overloaded function:
1218 extern "C++" {
1219 const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
1220 wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
1221 } */
1222_GL_CXXALIAS_SYS_CAST2 (wcsstr,
1223 wchar_t *,
1224 (const wchar_t *restrict, const wchar_t *restrict),
1225 const wchar_t *,
1226 (const wchar_t *restrict, const wchar_t *restrict));
1227# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
1228 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
1229_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
1230 (wchar_t *restrict haystack,
1231 const wchar_t *restrict needle));
1232_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
1233 (const wchar_t *restrict haystack,
1234 const wchar_t *restrict needle));
1235# elif __GLIBC__ >= 2
1236_GL_CXXALIASWARN (wcsstr);
1237# endif
1238#elif defined GNULIB_POSIXCHECK
1239# undef wcsstr
1240# if HAVE_RAW_DECL_WCSSTR
1241_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
1242 "use gnulib module wcsstr for portability");
1243# endif
1244#endif
1245
1246
1247/* Divide WCS into tokens separated by characters in DELIM. */
1248#if @GNULIB_WCSTOK@
1249# if @REPLACE_WCSTOK@
1250# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1251# undef wcstok
1252# define wcstok rpl_wcstok
1253# endif
1254_GL_FUNCDECL_RPL (wcstok, wchar_t *,
1255 (wchar_t *restrict wcs, const wchar_t *restrict delim,
1256 wchar_t **restrict ptr));
1257_GL_CXXALIAS_RPL (wcstok, wchar_t *,
1258 (wchar_t *restrict wcs, const wchar_t *restrict delim,
1259 wchar_t **restrict ptr));
1260# else
1261# if !@HAVE_WCSTOK@
1262_GL_FUNCDECL_SYS (wcstok, wchar_t *,
1263 (wchar_t *restrict wcs, const wchar_t *restrict delim,
1264 wchar_t **restrict ptr));
1265# endif
1266_GL_CXXALIAS_SYS (wcstok, wchar_t *,
1267 (wchar_t *restrict wcs, const wchar_t *restrict delim,
1268 wchar_t **restrict ptr));
1269# endif
1270# if __GLIBC__ >= 2
1271_GL_CXXALIASWARN (wcstok);
1272# endif
1273#elif defined GNULIB_POSIXCHECK
1274# undef wcstok
1275# if HAVE_RAW_DECL_WCSTOK
1276_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
1277 "use gnulib module wcstok for portability");
1278# endif
1279#endif
1280
1281
1282/* Determine number of column positions required for first N wide
1283 characters (or fewer if S ends before this) in S. */
1284#if @GNULIB_WCSWIDTH@
1285# if @REPLACE_WCSWIDTH@
1286# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1287# undef wcswidth
1288# define wcswidth rpl_wcswidth
1289# endif
1290_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
1291 _GL_ATTRIBUTE_PURE);
1292_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
1293# else
1294# if !@HAVE_WCSWIDTH@
1295_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
1296 _GL_ATTRIBUTE_PURE);
1297# endif
1298_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
1299# endif
1300# if __GLIBC__ >= 2
1301_GL_CXXALIASWARN (wcswidth);
1302# endif
1303#elif defined GNULIB_POSIXCHECK
1304# undef wcswidth
1305# if HAVE_RAW_DECL_WCSWIDTH
1306_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
1307 "use gnulib module wcswidth for portability");
1308# endif
1309#endif
1310
1311
1312/* Convert *TP to a date and time wide string. See
1313 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */
1314#if @GNULIB_WCSFTIME@
1315# if @REPLACE_WCSFTIME@
1316# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1317# undef wcsftime
1318# define wcsftime rpl_wcsftime
1319# endif
1320_GL_FUNCDECL_RPL (wcsftime, size_t,
1321 (wchar_t *restrict __buf, size_t __bufsize,
1322 const wchar_t *restrict __fmt,
1323 const struct tm *restrict __tp)
1324 _GL_ARG_NONNULL ((1, 3, 4)));
1325_GL_CXXALIAS_RPL (wcsftime, size_t,
1326 (wchar_t *restrict __buf, size_t __bufsize,
1327 const wchar_t *restrict __fmt,
1328 const struct tm *restrict __tp));
1329# else
1330# if !@HAVE_WCSFTIME@
1331_GL_FUNCDECL_SYS (wcsftime, size_t,
1332 (wchar_t *restrict __buf, size_t __bufsize,
1333 const wchar_t *restrict __fmt,
1334 const struct tm *restrict __tp)
1335 _GL_ARG_NONNULL ((1, 3, 4)));
1336# endif
1337_GL_CXXALIAS_SYS (wcsftime, size_t,
1338 (wchar_t *restrict __buf, size_t __bufsize,
1339 const wchar_t *restrict __fmt,
1340 const struct tm *restrict __tp));
1341# endif
1342# if __GLIBC__ >= 2
1343_GL_CXXALIASWARN (wcsftime);
1344# endif
1345#elif defined GNULIB_POSIXCHECK
1346# undef wcsftime
1347# if HAVE_RAW_DECL_WCSFTIME
1348_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - "
1349 "use gnulib module wcsftime for portability");
1350# endif
1351#endif
1352
1353
1354#endif /* _@GUARD_PREFIX@_WCHAR_H */
1355#endif /* _@GUARD_PREFIX@_WCHAR_H */
1356#endif
Note: See TracBrowser for help on using the repository browser.