New module 'wcsnlen'.
[gnulib.git] / lib / wchar.in.h
1 /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
2
3    Copyright (C) 2007-2011 Free Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2, or (at your option)
8    any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software Foundation,
17    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
18
19 /* Written by Eric Blake.  */
20
21 /*
22  * ISO C 99 <wchar.h> for platforms that have issues.
23  * <http://www.opengroup.org/susv3xbd/wchar.h.html>
24  *
25  * For now, this just ensures proper prerequisite inclusion order and
26  * the declaration of wcwidth().
27  */
28
29 #if __GNUC__ >= 3
30 @PRAGMA_SYSTEM_HEADER@
31 #endif
32 @PRAGMA_COLUMNS@
33
34 #if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
35 /* Special invocation convention:
36    - Inside glibc and uClibc header files.
37    - On HP-UX 11.00 we have a sequence of nested includes
38      <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
39      once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
40      and once directly.  In both situations 'wint_t' is not yet defined,
41      therefore we cannot provide the function overrides; instead include only
42      the system's <wchar.h>.
43    - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
44      the latter includes <wchar.h>.  But here, we have no way to detect whether
45      <wctype.h> is completely included or is still being included.  */
46
47 #@INCLUDE_NEXT@ @NEXT_WCHAR_H@
48
49 #else
50 /* Normal invocation convention.  */
51
52 #ifndef _GL_WCHAR_H
53
54 #define _GL_ALREADY_INCLUDING_WCHAR_H
55
56 #if @HAVE_FEATURES_H@
57 # include <features.h> /* for __GLIBC__ */
58 #endif
59
60 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
61    <wchar.h>.
62    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
63    included before <wchar.h>.
64    But avoid namespace pollution on glibc systems.  */
65 #ifndef __GLIBC__
66 # include <stddef.h>
67 # include <stdio.h>
68 # include <time.h>
69 #endif
70
71 /* Include the original <wchar.h> if it exists.
72    Some builds of uClibc lack it.  */
73 /* The include_next requires a split double-inclusion guard.  */
74 #if @HAVE_WCHAR_H@
75 # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
76 #endif
77
78 #undef _GL_ALREADY_INCLUDING_WCHAR_H
79
80 #ifndef _GL_WCHAR_H
81 #define _GL_WCHAR_H
82
83 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
84
85 /* The definition of _GL_ARG_NONNULL is copied here.  */
86
87 /* The definition of _GL_WARN_ON_USE is copied here.  */
88
89
90 /* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
91 #if !@HAVE_WINT_T@ && !defined wint_t
92 # define wint_t int
93 # ifndef WEOF
94 #  define WEOF -1
95 # endif
96 #else
97 # ifndef WEOF
98 #  define WEOF ((wint_t) -1)
99 # endif
100 #endif
101
102
103 /* Override mbstate_t if it is too small.
104    On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
105    implementing mbrtowc for encodings like UTF-8.  */
106 #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
107 # if !GNULIB_defined_mbstate_t
108 typedef int rpl_mbstate_t;
109 #  undef mbstate_t
110 #  define mbstate_t rpl_mbstate_t
111 #  define GNULIB_defined_mbstate_t 1
112 # endif
113 #endif
114
115
116 /* Convert a single-byte character to a wide character.  */
117 #if @GNULIB_BTOWC@
118 # if @REPLACE_BTOWC@
119 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
120 #   undef btowc
121 #   define btowc rpl_btowc
122 #  endif
123 _GL_FUNCDECL_RPL (btowc, wint_t, (int c));
124 _GL_CXXALIAS_RPL (btowc, wint_t, (int c));
125 # else
126 #  if !@HAVE_BTOWC@
127 _GL_FUNCDECL_SYS (btowc, wint_t, (int c));
128 #  endif
129 _GL_CXXALIAS_SYS (btowc, wint_t, (int c));
130 # endif
131 _GL_CXXALIASWARN (btowc);
132 #elif defined GNULIB_POSIXCHECK
133 # undef btowc
134 # if HAVE_RAW_DECL_BTOWC
135 _GL_WARN_ON_USE (btowc, "btowc is unportable - "
136                  "use gnulib module btowc for portability");
137 # endif
138 #endif
139
140
141 /* Convert a wide character to a single-byte character.  */
142 #if @GNULIB_WCTOB@
143 # if @REPLACE_WCTOB@
144 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
145 #   undef wctob
146 #   define wctob rpl_wctob
147 #  endif
148 _GL_FUNCDECL_RPL (wctob, int, (wint_t wc));
149 _GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
150 # else
151 #  if !defined wctob && !@HAVE_DECL_WCTOB@
152 /* wctob is provided by gnulib, or wctob exists but is not declared.  */
153 _GL_FUNCDECL_SYS (wctob, int, (wint_t wc));
154 #  endif
155 _GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
156 # endif
157 _GL_CXXALIASWARN (wctob);
158 #elif defined GNULIB_POSIXCHECK
159 # undef wctob
160 # if HAVE_RAW_DECL_WCTOB
161 _GL_WARN_ON_USE (wctob, "wctob is unportable - "
162                  "use gnulib module wctob for portability");
163 # endif
164 #endif
165
166
167 /* Test whether *PS is in the initial state.  */
168 #if @GNULIB_MBSINIT@
169 # if @REPLACE_MBSINIT@
170 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
171 #   undef mbsinit
172 #   define mbsinit rpl_mbsinit
173 #  endif
174 _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
175 _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
176 # else
177 #  if !@HAVE_MBSINIT@
178 _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
179 #  endif
180 _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
181 # endif
182 _GL_CXXALIASWARN (mbsinit);
183 #elif defined GNULIB_POSIXCHECK
184 # undef mbsinit
185 # if HAVE_RAW_DECL_MBSINIT
186 _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
187                  "use gnulib module mbsinit for portability");
188 # endif
189 #endif
190
191
192 /* Convert a multibyte character to a wide character.  */
193 #if @GNULIB_MBRTOWC@
194 # if @REPLACE_MBRTOWC@
195 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
196 #   undef mbrtowc
197 #   define mbrtowc rpl_mbrtowc
198 #  endif
199 _GL_FUNCDECL_RPL (mbrtowc, size_t,
200                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
201 _GL_CXXALIAS_RPL (mbrtowc, size_t,
202                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
203 # else
204 #  if !@HAVE_MBRTOWC@
205 _GL_FUNCDECL_SYS (mbrtowc, size_t,
206                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
207 #  endif
208 _GL_CXXALIAS_SYS (mbrtowc, size_t,
209                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
210 # endif
211 _GL_CXXALIASWARN (mbrtowc);
212 #elif defined GNULIB_POSIXCHECK
213 # undef mbrtowc
214 # if HAVE_RAW_DECL_MBRTOWC
215 _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
216                  "use gnulib module mbrtowc for portability");
217 # endif
218 #endif
219
220
221 /* Recognize a multibyte character.  */
222 #if @GNULIB_MBRLEN@
223 # if @REPLACE_MBRLEN@
224 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
225 #   undef mbrlen
226 #   define mbrlen rpl_mbrlen
227 #  endif
228 _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
229 _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
230 # else
231 #  if !@HAVE_MBRLEN@
232 _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
233 #  endif
234 _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
235 # endif
236 _GL_CXXALIASWARN (mbrlen);
237 #elif defined GNULIB_POSIXCHECK
238 # undef mbrlen
239 # if HAVE_RAW_DECL_MBRLEN
240 _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
241                  "use gnulib module mbrlen for portability");
242 # endif
243 #endif
244
245
246 /* Convert a string to a wide string.  */
247 #if @GNULIB_MBSRTOWCS@
248 # if @REPLACE_MBSRTOWCS@
249 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
250 #   undef mbsrtowcs
251 #   define mbsrtowcs rpl_mbsrtowcs
252 #  endif
253 _GL_FUNCDECL_RPL (mbsrtowcs, size_t,
254                   (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
255                   _GL_ARG_NONNULL ((2)));
256 _GL_CXXALIAS_RPL (mbsrtowcs, size_t,
257                   (wchar_t *dest, const char **srcp, size_t len,
258                    mbstate_t *ps));
259 # else
260 #  if !@HAVE_MBSRTOWCS@
261 _GL_FUNCDECL_SYS (mbsrtowcs, size_t,
262                   (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
263                   _GL_ARG_NONNULL ((2)));
264 #  endif
265 _GL_CXXALIAS_SYS (mbsrtowcs, size_t,
266                   (wchar_t *dest, const char **srcp, size_t len,
267                    mbstate_t *ps));
268 # endif
269 _GL_CXXALIASWARN (mbsrtowcs);
270 #elif defined GNULIB_POSIXCHECK
271 # undef mbsrtowcs
272 # if HAVE_RAW_DECL_MBSRTOWCS
273 _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
274                  "use gnulib module mbsrtowcs for portability");
275 # endif
276 #endif
277
278
279 /* Convert a string to a wide string.  */
280 #if @GNULIB_MBSNRTOWCS@
281 # if @REPLACE_MBSNRTOWCS@
282 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
283 #   undef mbsnrtowcs
284 #   define mbsnrtowcs rpl_mbsnrtowcs
285 #  endif
286 _GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
287                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
288                    mbstate_t *ps)
289                   _GL_ARG_NONNULL ((2)));
290 _GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
291                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
292                    mbstate_t *ps));
293 # else
294 #  if !@HAVE_MBSNRTOWCS@
295 _GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
296                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
297                    mbstate_t *ps)
298                   _GL_ARG_NONNULL ((2)));
299 #  endif
300 _GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
301                   (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
302                    mbstate_t *ps));
303 # endif
304 _GL_CXXALIASWARN (mbsnrtowcs);
305 #elif defined GNULIB_POSIXCHECK
306 # undef mbsnrtowcs
307 # if HAVE_RAW_DECL_MBSNRTOWCS
308 _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
309                  "use gnulib module mbsnrtowcs for portability");
310 # endif
311 #endif
312
313
314 /* Convert a wide character to a multibyte character.  */
315 #if @GNULIB_WCRTOMB@
316 # if @REPLACE_WCRTOMB@
317 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
318 #   undef wcrtomb
319 #   define wcrtomb rpl_wcrtomb
320 #  endif
321 _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
322 _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
323 # else
324 #  if !@HAVE_WCRTOMB@
325 _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
326 #  endif
327 _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
328 # endif
329 _GL_CXXALIASWARN (wcrtomb);
330 #elif defined GNULIB_POSIXCHECK
331 # undef wcrtomb
332 # if HAVE_RAW_DECL_WCRTOMB
333 _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
334                  "use gnulib module wcrtomb for portability");
335 # endif
336 #endif
337
338
339 /* Convert a wide string to a string.  */
340 #if @GNULIB_WCSRTOMBS@
341 # if @REPLACE_WCSRTOMBS@
342 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
343 #   undef wcsrtombs
344 #   define wcsrtombs rpl_wcsrtombs
345 #  endif
346 _GL_FUNCDECL_RPL (wcsrtombs, size_t,
347                   (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
348                   _GL_ARG_NONNULL ((2)));
349 _GL_CXXALIAS_RPL (wcsrtombs, size_t,
350                   (char *dest, const wchar_t **srcp, size_t len,
351                    mbstate_t *ps));
352 # else
353 #  if !@HAVE_WCSRTOMBS@
354 _GL_FUNCDECL_SYS (wcsrtombs, size_t,
355                   (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
356                   _GL_ARG_NONNULL ((2)));
357 #  endif
358 _GL_CXXALIAS_SYS (wcsrtombs, size_t,
359                   (char *dest, const wchar_t **srcp, size_t len,
360                    mbstate_t *ps));
361 # endif
362 _GL_CXXALIASWARN (wcsrtombs);
363 #elif defined GNULIB_POSIXCHECK
364 # undef wcsrtombs
365 # if HAVE_RAW_DECL_WCSRTOMBS
366 _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
367                  "use gnulib module wcsrtombs for portability");
368 # endif
369 #endif
370
371
372 /* Convert a wide string to a string.  */
373 #if @GNULIB_WCSNRTOMBS@
374 # if @REPLACE_WCSNRTOMBS@
375 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
376 #   undef wcsnrtombs
377 #   define wcsnrtombs rpl_wcsnrtombs
378 #  endif
379 _GL_FUNCDECL_RPL (wcsnrtombs, size_t,
380                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
381                    mbstate_t *ps)
382                   _GL_ARG_NONNULL ((2)));
383 _GL_CXXALIAS_RPL (wcsnrtombs, size_t,
384                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
385                    mbstate_t *ps));
386 # else
387 #  if !@HAVE_WCSNRTOMBS@
388 _GL_FUNCDECL_SYS (wcsnrtombs, size_t,
389                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
390                    mbstate_t *ps)
391                   _GL_ARG_NONNULL ((2)));
392 #  endif
393 _GL_CXXALIAS_SYS (wcsnrtombs, size_t,
394                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
395                    mbstate_t *ps));
396 # endif
397 _GL_CXXALIASWARN (wcsnrtombs);
398 #elif defined GNULIB_POSIXCHECK
399 # undef wcsnrtombs
400 # if HAVE_RAW_DECL_WCSNRTOMBS
401 _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
402                  "use gnulib module wcsnrtombs for portability");
403 # endif
404 #endif
405
406
407 /* Return the number of screen columns needed for WC.  */
408 #if @GNULIB_WCWIDTH@
409 # if @REPLACE_WCWIDTH@
410 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
411 #   undef wcwidth
412 #   define wcwidth rpl_wcwidth
413 #  endif
414 _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t));
415 _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
416 # else
417 #  if !@HAVE_DECL_WCWIDTH@
418 /* wcwidth exists but is not declared.  */
419 _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t));
420 #  endif
421 _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
422 # endif
423 _GL_CXXALIASWARN (wcwidth);
424 #elif defined GNULIB_POSIXCHECK
425 # undef wcwidth
426 # if HAVE_RAW_DECL_WCWIDTH
427 _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
428                  "use gnulib module wcwidth for portability");
429 # endif
430 #endif
431
432
433 /* Search N wide characters of S for C.  */
434 #if @GNULIB_WMEMCHR@
435 # if !@HAVE_WMEMCHR@
436 _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n));
437 # endif
438 _GL_CXXALIAS_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n));
439 _GL_CXXALIASWARN (wmemchr);
440 #elif defined GNULIB_POSIXCHECK
441 # undef wmemchr
442 # if HAVE_RAW_DECL_WMEMCHR
443 _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
444                  "use gnulib module wmemchr for portability");
445 # endif
446 #endif
447
448
449 /* Compare N wide characters of S1 and S2.  */
450 #if @GNULIB_WMEMCMP@
451 # if !@HAVE_WMEMCMP@
452 _GL_FUNCDECL_SYS (wmemcmp, int,
453                   (const wchar_t *s1, const wchar_t *s2, size_t n));
454 # endif
455 _GL_CXXALIAS_SYS (wmemcmp, int,
456                   (const wchar_t *s1, const wchar_t *s2, size_t n));
457 _GL_CXXALIASWARN (wmemcmp);
458 #elif defined GNULIB_POSIXCHECK
459 # undef wmemcmp
460 # if HAVE_RAW_DECL_WMEMCMP
461 _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
462                  "use gnulib module wmemcmp for portability");
463 # endif
464 #endif
465
466
467 /* Copy N wide characters of SRC to DEST.  */
468 #if @GNULIB_WMEMCPY@
469 # if !@HAVE_WMEMCPY@
470 _GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
471                   (wchar_t *dest, const wchar_t *src, size_t n));
472 # endif
473 _GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
474                   (wchar_t *dest, const wchar_t *src, size_t n));
475 _GL_CXXALIASWARN (wmemcpy);
476 #elif defined GNULIB_POSIXCHECK
477 # undef wmemcpy
478 # if HAVE_RAW_DECL_WMEMCPY
479 _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
480                  "use gnulib module wmemcpy for portability");
481 # endif
482 #endif
483
484
485 /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
486    overlapping memory areas.  */
487 #if @GNULIB_WMEMMOVE@
488 # if !@HAVE_WMEMMOVE@
489 _GL_FUNCDECL_SYS (wmemmove, wchar_t *,
490                   (wchar_t *dest, const wchar_t *src, size_t n));
491 # endif
492 _GL_CXXALIAS_SYS (wmemmove, wchar_t *,
493                   (wchar_t *dest, const wchar_t *src, size_t n));
494 _GL_CXXALIASWARN (wmemmove);
495 #elif defined GNULIB_POSIXCHECK
496 # undef wmemmove
497 # if HAVE_RAW_DECL_WMEMMOVE
498 _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
499                  "use gnulib module wmemmove for portability");
500 # endif
501 #endif
502
503
504 /* Set N wide characters of S to C.  */
505 #if @GNULIB_WMEMSET@
506 # if !@HAVE_WMEMSET@
507 _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
508 # endif
509 _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
510 _GL_CXXALIASWARN (wmemset);
511 #elif defined GNULIB_POSIXCHECK
512 # undef wmemset
513 # if HAVE_RAW_DECL_WMEMSET
514 _GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
515                  "use gnulib module wmemset for portability");
516 # endif
517 #endif
518
519
520 /* Return the number of wide characters in S.  */
521 #if @GNULIB_WCSLEN@
522 # if !@HAVE_WCSLEN@
523 _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s));
524 # endif
525 _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
526 _GL_CXXALIASWARN (wcslen);
527 #elif defined GNULIB_POSIXCHECK
528 # undef wcslen
529 # if HAVE_RAW_DECL_WCSLEN
530 _GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
531                  "use gnulib module wcslen for portability");
532 # endif
533 #endif
534
535
536 /* Return the number of wide characters in S, but at most MAXLEN.  */
537 #if @GNULIB_WCSNLEN@
538 # if !@HAVE_WCSNLEN@
539 _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
540 # endif
541 _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
542 _GL_CXXALIASWARN (wcsnlen);
543 #elif defined GNULIB_POSIXCHECK
544 # undef wcsnlen
545 # if HAVE_RAW_DECL_WCSNLEN
546 _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
547                  "use gnulib module wcsnlen for portability");
548 # endif
549 #endif
550
551
552 #endif /* _GL_WCHAR_H */
553 #endif /* _GL_WCHAR_H */
554 #endif