Home | History | Annotate | Download | only in linux-lib
      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) \
    326 extern __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) \
    330 extern __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) \
    346 extern 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) \
    351 extern 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>
    394 typedef 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
    460 rpl_iswalnum
    461 #  else
    462 iswalnum
    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
    472 rpl_iswalpha
    473 #  else
    474 iswalpha
    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
    483 rpl_iswblank
    484 #  else
    485 iswblank
    486 #  endif
    487          (wint_t wc)
    488 {
    489   return wc == ' ' || wc == '\t';
    490 }
    491 
    492 _GL_WCTYPE_INLINE int
    493 #  if 0
    494 rpl_iswcntrl
    495 #  else
    496 iswcntrl
    497 #  endif
    498         (wint_t wc)
    499 {
    500   return (wc & ~0x1f) == 0 || wc == 0x7f;
    501 }
    502 
    503 _GL_WCTYPE_INLINE int
    504 #  if 0
    505 rpl_iswdigit
    506 #  else
    507 iswdigit
    508 #  endif
    509          (wint_t wc)
    510 {
    511   return wc >= '0' && wc <= '9';
    512 }
    513 
    514 _GL_WCTYPE_INLINE int
    515 #  if 0
    516 rpl_iswgraph
    517 #  else
    518 iswgraph
    519 #  endif
    520          (wint_t wc)
    521 {
    522   return wc >= '!' && wc <= '~';
    523 }
    524 
    525 _GL_WCTYPE_INLINE int
    526 #  if 0
    527 rpl_iswlower
    528 #  else
    529 iswlower
    530 #  endif
    531          (wint_t wc)
    532 {
    533   return wc >= 'a' && wc <= 'z';
    534 }
    535 
    536 _GL_WCTYPE_INLINE int
    537 #  if 0
    538 rpl_iswprint
    539 #  else
    540 iswprint
    541 #  endif
    542          (wint_t wc)
    543 {
    544   return wc >= ' ' && wc <= '~';
    545 }
    546 
    547 _GL_WCTYPE_INLINE int
    548 #  if 0
    549 rpl_iswpunct
    550 #  else
    551 iswpunct
    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
    562 rpl_iswspace
    563 #  else
    564 iswspace
    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
    574 rpl_iswupper
    575 #  else
    576 iswupper
    577 #  endif
    578          (wint_t wc)
    579 {
    580   return wc >= 'A' && wc <= 'Z';
    581 }
    582 
    583 _GL_WCTYPE_INLINE int
    584 #  if 0
    585 rpl_iswxdigit
    586 #  else
    587 iswxdigit
    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
    597 rpl_towlower
    598 #  else
    599 towlower
    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
    608 rpl_towupper
    609 #  else
    610 towupper
    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
    647 rpl_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
    656 rpl_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
    717 typedef 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
    766 typedef 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