wctype.h revision 05436638acc7c010349a69c3395f1a57c642dc62
1/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
2/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
3
4   Copyright (C) 2006-2012 Free Software Foundation, Inc.
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 3, or (at your option)
9   any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
18
19/* Written by Bruno Haible and Paul Eggert.  */
20
21/*
22 * ISO C 99 <wctype.h> for platforms that lack it.
23 * <http://www.opengroup.org/susv3xbd/wctype.h.html>
24 *
25 * iswctype, towctrans, towlower, towupper, wctrans, wctype,
26 * wctrans_t, and wctype_t are not yet implemented.
27 */
28
29#ifndef _GL_WCTYPE_H
30
31#if __GNUC__ >= 3
32#pragma GCC system_header
33#endif
34
35
36#if 1
37/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
38   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
39   <wchar.h>.
40   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
41   included before <wchar.h>.  */
42# include <stddef.h>
43# include <stdio.h>
44# include <time.h>
45# include <wchar.h>
46#endif
47
48/* Include the original <wctype.h> if it exists.
49   BeOS 5 has the functions but no <wctype.h>.  */
50/* The include_next requires a split double-inclusion guard.  */
51#if 1
52# include_next <wctype.h>
53#endif
54
55#ifndef _GL_WCTYPE_H
56#define _GL_WCTYPE_H
57
58_GL_INLINE_HEADER_BEGIN
59#ifndef _GL_WCTYPE_INLINE
60# define _GL_WCTYPE_INLINE _GL_INLINE
61#endif
62
63/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
64#ifndef _GL_CXXDEFS_H
65#define _GL_CXXDEFS_H
66
67/* The three most frequent use cases of these macros are:
68
69   * For providing a substitute for a function that is missing on some
70     platforms, but is declared and works fine on the platforms on which
71     it exists:
72
73       #if @GNULIB_FOO@
74       # if !@HAVE_FOO@
75       _GL_FUNCDECL_SYS (foo, ...);
76       # endif
77       _GL_CXXALIAS_SYS (foo, ...);
78       _GL_CXXALIASWARN (foo);
79       #elif defined GNULIB_POSIXCHECK
80       ...
81       #endif
82
83   * For providing a replacement for a function that exists on all platforms,
84     but is broken/insufficient and needs to be replaced on some platforms:
85
86       #if @GNULIB_FOO@
87       # if @REPLACE_FOO@
88       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
89       #   undef foo
90       #   define foo rpl_foo
91       #  endif
92       _GL_FUNCDECL_RPL (foo, ...);
93       _GL_CXXALIAS_RPL (foo, ...);
94       # else
95       _GL_CXXALIAS_SYS (foo, ...);
96       # endif
97       _GL_CXXALIASWARN (foo);
98       #elif defined GNULIB_POSIXCHECK
99       ...
100       #endif
101
102   * For providing a replacement for a function that exists on some platforms
103     but is broken/insufficient and needs to be replaced on some of them and
104     is additionally either missing or undeclared on some other platforms:
105
106       #if @GNULIB_FOO@
107       # if @REPLACE_FOO@
108       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
109       #   undef foo
110       #   define foo rpl_foo
111       #  endif
112       _GL_FUNCDECL_RPL (foo, ...);
113       _GL_CXXALIAS_RPL (foo, ...);
114       # else
115       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
116       _GL_FUNCDECL_SYS (foo, ...);
117       #  endif
118       _GL_CXXALIAS_SYS (foo, ...);
119       # endif
120       _GL_CXXALIASWARN (foo);
121       #elif defined GNULIB_POSIXCHECK
122       ...
123       #endif
124*/
125
126/* _GL_EXTERN_C declaration;
127   performs the declaration with C linkage.  */
128#if defined __cplusplus
129# define _GL_EXTERN_C extern "C"
130#else
131# define _GL_EXTERN_C extern
132#endif
133
134/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
135   declares a replacement function, named rpl_func, with the given prototype,
136   consisting of return type, parameters, and attributes.
137   Example:
138     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
139                                  _GL_ARG_NONNULL ((1)));
140 */
141#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
142  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
143#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
144  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
145
146/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
147   declares the system function, named func, with the given prototype,
148   consisting of return type, parameters, and attributes.
149   Example:
150     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
151                                  _GL_ARG_NONNULL ((1)));
152 */
153#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
154  _GL_EXTERN_C rettype func parameters_and_attributes
155
156/* _GL_CXXALIAS_RPL (func, rettype, parameters);
157   declares a C++ alias called GNULIB_NAMESPACE::func
158   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
159   Example:
160     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
161 */
162#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
163  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
164#if defined __cplusplus && defined GNULIB_NAMESPACE
165# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
166    namespace GNULIB_NAMESPACE                                \
167    {                                                         \
168      rettype (*const func) parameters = ::rpl_func;          \
169    }                                                         \
170    _GL_EXTERN_C int _gl_cxxalias_dummy
171#else
172# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
173    _GL_EXTERN_C int _gl_cxxalias_dummy
174#endif
175
176/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
177   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
178   except that the C function rpl_func may have a slightly different
179   declaration.  A cast is used to silence the "invalid conversion" error
180   that would otherwise occur.  */
181#if defined __cplusplus && defined GNULIB_NAMESPACE
182# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
183    namespace GNULIB_NAMESPACE                                     \
184    {                                                              \
185      rettype (*const func) parameters =                           \
186        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
187    }                                                              \
188    _GL_EXTERN_C int _gl_cxxalias_dummy
189#else
190# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
191    _GL_EXTERN_C int _gl_cxxalias_dummy
192#endif
193
194/* _GL_CXXALIAS_SYS (func, rettype, parameters);
195   declares a C++ alias called GNULIB_NAMESPACE::func
196   that redirects to the system provided function func, if GNULIB_NAMESPACE
197   is defined.
198   Example:
199     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
200 */
201#if defined __cplusplus && defined GNULIB_NAMESPACE
202  /* If we were to write
203       rettype (*const func) parameters = ::func;
204     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
205     better (remove an indirection through a 'static' pointer variable),
206     but then the _GL_CXXALIASWARN macro below would cause a warning not only
207     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
208# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
209    namespace GNULIB_NAMESPACE                     \
210    {                                              \
211      static rettype (*func) parameters = ::func;  \
212    }                                              \
213    _GL_EXTERN_C int _gl_cxxalias_dummy
214#else
215# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
216    _GL_EXTERN_C int _gl_cxxalias_dummy
217#endif
218
219/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
220   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
221   except that the C function func may have a slightly different declaration.
222   A cast is used to silence the "invalid conversion" error that would
223   otherwise occur.  */
224#if defined __cplusplus && defined GNULIB_NAMESPACE
225# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
226    namespace GNULIB_NAMESPACE                          \
227    {                                                   \
228      static rettype (*func) parameters =               \
229        reinterpret_cast<rettype(*)parameters>(::func); \
230    }                                                   \
231    _GL_EXTERN_C int _gl_cxxalias_dummy
232#else
233# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
234    _GL_EXTERN_C int _gl_cxxalias_dummy
235#endif
236
237/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
238   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
239   except that the C function is picked among a set of overloaded functions,
240   namely the one with rettype2 and parameters2.  Two consecutive casts
241   are used to silence the "cannot find a match" and "invalid conversion"
242   errors that would otherwise occur.  */
243#if defined __cplusplus && defined GNULIB_NAMESPACE
244  /* The outer cast must be a reinterpret_cast.
245     The inner cast: When the function is defined as a set of overloaded
246     functions, it works as a static_cast<>, choosing the designated variant.
247     When the function is defined as a single variant, it works as a
248     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
249# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
250    namespace GNULIB_NAMESPACE                                                \
251    {                                                                         \
252      static rettype (*func) parameters =                                     \
253        reinterpret_cast<rettype(*)parameters>(                               \
254          (rettype2(*)parameters2)(::func));                                  \
255    }                                                                         \
256    _GL_EXTERN_C int _gl_cxxalias_dummy
257#else
258# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
259    _GL_EXTERN_C int _gl_cxxalias_dummy
260#endif
261
262/* _GL_CXXALIASWARN (func);
263   causes a warning to be emitted when ::func is used but not when
264   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
265   variants.  */
266#if defined __cplusplus && defined GNULIB_NAMESPACE
267# define _GL_CXXALIASWARN(func) \
268   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
269# define _GL_CXXALIASWARN_1(func,namespace) \
270   _GL_CXXALIASWARN_2 (func, namespace)
271/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
272   we enable the warning only when not optimizing.  */
273# if !__OPTIMIZE__
274#  define _GL_CXXALIASWARN_2(func,namespace) \
275    _GL_WARN_ON_USE (func, \
276                     "The symbol ::" #func " refers to the system function. " \
277                     "Use " #namespace "::" #func " instead.")
278# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
279#  define _GL_CXXALIASWARN_2(func,namespace) \
280     extern __typeof__ (func) func
281# else
282#  define _GL_CXXALIASWARN_2(func,namespace) \
283     _GL_EXTERN_C int _gl_cxxalias_dummy
284# endif
285#else
286# define _GL_CXXALIASWARN(func) \
287    _GL_EXTERN_C int _gl_cxxalias_dummy
288#endif
289
290/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
291   causes a warning to be emitted when the given overloaded variant of ::func
292   is used but not when GNULIB_NAMESPACE::func is used.  */
293#if defined __cplusplus && defined GNULIB_NAMESPACE
294# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
295   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
296                        GNULIB_NAMESPACE)
297# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
298   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
299/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
300   we enable the warning only when not optimizing.  */
301# if !__OPTIMIZE__
302#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
303    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
304                         "The symbol ::" #func " refers to the system function. " \
305                         "Use " #namespace "::" #func " instead.")
306# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
307#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
308     extern __typeof__ (func) func
309# else
310#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
311     _GL_EXTERN_C int _gl_cxxalias_dummy
312# endif
313#else
314# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
315    _GL_EXTERN_C int _gl_cxxalias_dummy
316#endif
317
318#endif /* _GL_CXXDEFS_H */
319
320/* The definition of _GL_WARN_ON_USE is copied here.  */
321#ifndef _GL_WARN_ON_USE
322
323# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
324/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
325#  define _GL_WARN_ON_USE(function, message) \
326extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
327# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
328/* Verify the existence of the function.  */
329#  define _GL_WARN_ON_USE(function, message) \
330extern __typeof__ (function) function
331# else /* Unsupported.  */
332#  define _GL_WARN_ON_USE(function, message) \
333_GL_WARN_EXTERN_C int _gl_warn_on_use
334# endif
335#endif
336
337/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
338   is like _GL_WARN_ON_USE (function, "string"), except that the function is
339   declared with the given prototype, consisting of return type, parameters,
340   and attributes.
341   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
342   not work in this case.  */
343#ifndef _GL_WARN_ON_USE_CXX
344# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
345#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
346extern rettype function parameters_and_attributes \
347     __attribute__ ((__warning__ (msg)))
348# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
349/* Verify the existence of the function.  */
350#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
351extern rettype function parameters_and_attributes
352# else /* Unsupported.  */
353#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
354_GL_WARN_EXTERN_C int _gl_warn_on_use
355# endif
356#endif
357
358/* _GL_WARN_EXTERN_C declaration;
359   performs the declaration with C linkage.  */
360#ifndef _GL_WARN_EXTERN_C
361# if defined __cplusplus
362#  define _GL_WARN_EXTERN_C extern "C"
363# else
364#  define _GL_WARN_EXTERN_C extern
365# endif
366#endif
367
368/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
369   #defines a number of identifiers in the application namespace.  Revert
370   these #defines.  */
371#ifdef __sun
372# undef multibyte
373# undef eucw1
374# undef eucw2
375# undef eucw3
376# undef scrw1
377# undef scrw2
378# undef scrw3
379#endif
380
381/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
382#if !1 && !defined wint_t
383# define wint_t int
384# ifndef WEOF
385#  define WEOF -1
386# endif
387#else
388/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
389   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
390   "unchanged by default argument promotions".  Override it.  */
391# if defined _MSC_VER
392#  if !GNULIB_defined_wint_t
393#   include <crtdefs.h>
394typedef unsigned int rpl_wint_t;
395#   undef wint_t
396#   define wint_t rpl_wint_t
397#   define GNULIB_defined_wint_t 1
398#  endif
399# endif
400# ifndef WEOF
401#  define WEOF ((wint_t) -1)
402# endif
403#endif
404
405
406#if !GNULIB_defined_wctype_functions
407
408/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
409   Linux libc5 has <wctype.h> and the functions but they are broken.
410   Assume all 11 functions (all isw* except iswblank) are implemented the
411   same way, or not at all.  */
412# if ! 1 || 0
413
414/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
415   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
416   refer to system functions like _iswctype that are not in the
417   standard C library.  Rather than try to get ancient buggy
418   implementations like this to work, just disable them.  */
419#  undef iswalnum
420#  undef iswalpha
421#  undef iswblank
422#  undef iswcntrl
423#  undef iswdigit
424#  undef iswgraph
425#  undef iswlower
426#  undef iswprint
427#  undef iswpunct
428#  undef iswspace
429#  undef iswupper
430#  undef iswxdigit
431#  undef towlower
432#  undef towupper
433
434/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
435#  if 0
436#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
437#    define iswalnum rpl_iswalnum
438#    define iswalpha rpl_iswalpha
439#    define iswblank rpl_iswblank
440#    define iswcntrl rpl_iswcntrl
441#    define iswdigit rpl_iswdigit
442#    define iswgraph rpl_iswgraph
443#    define iswlower rpl_iswlower
444#    define iswprint rpl_iswprint
445#    define iswpunct rpl_iswpunct
446#    define iswspace rpl_iswspace
447#    define iswupper rpl_iswupper
448#    define iswxdigit rpl_iswxdigit
449#   endif
450#  endif
451#  if 0
452#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
453#    define towlower rpl_towlower
454#    define towupper rpl_towupper
455#   endif
456#  endif
457
458_GL_WCTYPE_INLINE int
459#  if 0
460rpl_iswalnum
461#  else
462iswalnum
463#  endif
464         (wint_t wc)
465{
466  return ((wc >= '0' && wc <= '9')
467          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
468}
469
470_GL_WCTYPE_INLINE int
471#  if 0
472rpl_iswalpha
473#  else
474iswalpha
475#  endif
476         (wint_t wc)
477{
478  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
479}
480
481_GL_WCTYPE_INLINE int
482#  if 0
483rpl_iswblank
484#  else
485iswblank
486#  endif
487         (wint_t wc)
488{
489  return wc == ' ' || wc == '\t';
490}
491
492_GL_WCTYPE_INLINE int
493#  if 0
494rpl_iswcntrl
495#  else
496iswcntrl
497#  endif
498        (wint_t wc)
499{
500  return (wc & ~0x1f) == 0 || wc == 0x7f;
501}
502
503_GL_WCTYPE_INLINE int
504#  if 0
505rpl_iswdigit
506#  else
507iswdigit
508#  endif
509         (wint_t wc)
510{
511  return wc >= '0' && wc <= '9';
512}
513
514_GL_WCTYPE_INLINE int
515#  if 0
516rpl_iswgraph
517#  else
518iswgraph
519#  endif
520         (wint_t wc)
521{
522  return wc >= '!' && wc <= '~';
523}
524
525_GL_WCTYPE_INLINE int
526#  if 0
527rpl_iswlower
528#  else
529iswlower
530#  endif
531         (wint_t wc)
532{
533  return wc >= 'a' && wc <= 'z';
534}
535
536_GL_WCTYPE_INLINE int
537#  if 0
538rpl_iswprint
539#  else
540iswprint
541#  endif
542         (wint_t wc)
543{
544  return wc >= ' ' && wc <= '~';
545}
546
547_GL_WCTYPE_INLINE int
548#  if 0
549rpl_iswpunct
550#  else
551iswpunct
552#  endif
553         (wint_t wc)
554{
555  return (wc >= '!' && wc <= '~'
556          && !((wc >= '0' && wc <= '9')
557               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
558}
559
560_GL_WCTYPE_INLINE int
561#  if 0
562rpl_iswspace
563#  else
564iswspace
565#  endif
566         (wint_t wc)
567{
568  return (wc == ' ' || wc == '\t'
569          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
570}
571
572_GL_WCTYPE_INLINE int
573#  if 0
574rpl_iswupper
575#  else
576iswupper
577#  endif
578         (wint_t wc)
579{
580  return wc >= 'A' && wc <= 'Z';
581}
582
583_GL_WCTYPE_INLINE int
584#  if 0
585rpl_iswxdigit
586#  else
587iswxdigit
588#  endif
589          (wint_t wc)
590{
591  return ((wc >= '0' && wc <= '9')
592          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
593}
594
595_GL_WCTYPE_INLINE wint_t
596#  if 0
597rpl_towlower
598#  else
599towlower
600#  endif
601         (wint_t wc)
602{
603  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
604}
605
606_GL_WCTYPE_INLINE wint_t
607#  if 0
608rpl_towupper
609#  else
610towupper
611#  endif
612         (wint_t wc)
613{
614  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
615}
616
617# elif 1 && (! 1 || 0)
618/* Only the iswblank function is missing.  */
619
620#  if 0
621#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
622#    define iswblank rpl_iswblank
623#   endif
624_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
625#  else
626_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
627#  endif
628
629# endif
630
631# if defined __MINGW32__
632
633/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
634   The functions towlower and towupper are implemented in the MSVCRT library
635   to take a wchar_t argument and return a wchar_t result.  mingw declares
636   these functions to take a wint_t argument and return a wint_t result.
637   This means that:
638   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
639      function will look only at the lower 16 bits.  This is allowed according
640      to POSIX.
641   2. The return value is returned in the lower 16 bits of the result register.
642      The upper 16 bits are random: whatever happened to be in that part of the
643      result register.  We need to fix this by adding a zero-extend from
644      wchar_t to wint_t after the call.  */
645
646_GL_WCTYPE_INLINE wint_t
647rpl_towlower (wint_t wc)
648{
649  return (wint_t) (wchar_t) towlower (wc);
650}
651#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
652#   define towlower rpl_towlower
653#  endif
654
655_GL_WCTYPE_INLINE wint_t
656rpl_towupper (wint_t wc)
657{
658  return (wint_t) (wchar_t) towupper (wc);
659}
660#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
661#   define towupper rpl_towupper
662#  endif
663
664# endif /* __MINGW32__ */
665
666# define GNULIB_defined_wctype_functions 1
667#endif
668
669#if 0
670_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
671_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
672_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
673_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
674_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
675_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
676_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
677_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
678_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
679_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
680_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
681#else
682_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
683_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
684_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
685_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
686_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
687_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
688_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
689_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
690_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
691_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
692_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
693#endif
694_GL_CXXALIASWARN (iswalnum);
695_GL_CXXALIASWARN (iswalpha);
696_GL_CXXALIASWARN (iswcntrl);
697_GL_CXXALIASWARN (iswdigit);
698_GL_CXXALIASWARN (iswgraph);
699_GL_CXXALIASWARN (iswlower);
700_GL_CXXALIASWARN (iswprint);
701_GL_CXXALIASWARN (iswpunct);
702_GL_CXXALIASWARN (iswspace);
703_GL_CXXALIASWARN (iswupper);
704_GL_CXXALIASWARN (iswxdigit);
705
706#if 1
707# if 0 || 0
708_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
709# else
710_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
711# endif
712_GL_CXXALIASWARN (iswblank);
713#endif
714
715#if !1
716# if !GNULIB_defined_wctype_t
717typedef void * wctype_t;
718#  define GNULIB_defined_wctype_t 1
719# endif
720#endif
721
722/* Get a descriptor for a wide character property.  */
723#if 0
724# if !1
725_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
726# endif
727_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
728_GL_CXXALIASWARN (wctype);
729#elif defined GNULIB_POSIXCHECK
730# undef wctype
731# if HAVE_RAW_DECL_WCTYPE
732_GL_WARN_ON_USE (wctype, "wctype is unportable - "
733                 "use gnulib module wctype for portability");
734# endif
735#endif
736
737/* Test whether a wide character has a given property.
738   The argument WC must be either a wchar_t value or WEOF.
739   The argument DESC must have been returned by the wctype() function.  */
740#if 0
741# if !1
742_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
743# endif
744_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
745_GL_CXXALIASWARN (iswctype);
746#elif defined GNULIB_POSIXCHECK
747# undef iswctype
748# if HAVE_RAW_DECL_ISWCTYPE
749_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
750                 "use gnulib module iswctype for portability");
751# endif
752#endif
753
754#if 0 || defined __MINGW32__
755_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
756_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
757#else
758_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
759_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
760#endif
761_GL_CXXALIASWARN (towlower);
762_GL_CXXALIASWARN (towupper);
763
764#if !1
765# if !GNULIB_defined_wctrans_t
766typedef void * wctrans_t;
767#  define GNULIB_defined_wctrans_t 1
768# endif
769#endif
770
771/* Get a descriptor for a wide character case conversion.  */
772#if 0
773# if !1
774_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
775# endif
776_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
777_GL_CXXALIASWARN (wctrans);
778#elif defined GNULIB_POSIXCHECK
779# undef wctrans
780# if HAVE_RAW_DECL_WCTRANS
781_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
782                 "use gnulib module wctrans for portability");
783# endif
784#endif
785
786/* Perform a given case conversion on a wide character.
787   The argument WC must be either a wchar_t value or WEOF.
788   The argument DESC must have been returned by the wctrans() function.  */
789#if 0
790# if !1
791_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
792# endif
793_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
794_GL_CXXALIASWARN (towctrans);
795#elif defined GNULIB_POSIXCHECK
796# undef towctrans
797# if HAVE_RAW_DECL_TOWCTRANS
798_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
799                 "use gnulib module towctrans for portability");
800# endif
801#endif
802
803_GL_INLINE_HEADER_END
804
805#endif /* _GL_WCTYPE_H */
806#endif /* _GL_WCTYPE_H */
807