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