1 /* A substitute for ISO C99 <wctype.h>, for platforms that lack it. 2 3 Copyright (C) 2006-2020 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 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 16 along with this program; if not, see <https://www.gnu.org/licenses/>. */ 17 18 /* Written by Bruno Haible and Paul Eggert. */ 19 20 /* 21 * ISO C 99 <wctype.h> for platforms that lack it. 22 * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html> 23 * 24 * iswctype, towctrans, towlower, towupper, wctrans, wctype, 25 * wctrans_t, and wctype_t are not yet implemented. 26 */ 27 28 #if __GNUC__ >= 3 29 @PRAGMA_SYSTEM_HEADER@ 30 #endif 31 @PRAGMA_COLUMNS@ 32 33 #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) 34 35 /* Special invocation convention: 36 - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of 37 <wctype.h> is being processed, which doesn't include the idempotency 38 guard. */ 39 40 #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ 41 42 #else 43 /* Normal invocation convention. */ 44 45 #ifndef _@GUARD_PREFIX@_WCTYPE_H 46 47 #if @HAVE_WINT_T@ 48 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. 49 Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 50 <wchar.h>. 51 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 52 included before <wchar.h>. */ 53 # include <stddef.h> 54 # include <stdio.h> 55 # include <time.h> 56 # include <wchar.h> 57 #endif 58 59 /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and 60 isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include 61 <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the 62 declarations. */ 63 #if defined _WIN32 && ! defined __CYGWIN__ 64 # include <ctype.h> 65 # include <wchar.h> 66 #endif 67 68 /* Include the original <wctype.h> if it exists. 69 BeOS 5 has the functions but no <wctype.h>. */ 70 /* The include_next requires a split double-inclusion guard. */ 71 #if @HAVE_WCTYPE_H@ 72 # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ 73 #endif 74 75 #ifndef _@GUARD_PREFIX@_WCTYPE_H 76 #define _@GUARD_PREFIX@_WCTYPE_H 77 78 #ifndef _GL_INLINE_HEADER_BEGIN 79 #error "Please include config.h first." 80 #endif 81 _GL_INLINE_HEADER_BEGIN 82 #ifndef _GL_WCTYPE_INLINE 83 # define _GL_WCTYPE_INLINE _GL_INLINE 84 #endif 85 86 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 87 88 /* The definition of _GL_WARN_ON_USE is copied here. */ 89 90 /* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which 91 #defines a number of identifiers in the application namespace. Revert 92 these #defines. */ 93 #ifdef __sun 94 # undef multibyte 95 # undef eucw1 96 # undef eucw2 97 # undef eucw3 98 # undef scrw1 99 # undef scrw2 100 # undef scrw3 101 #endif 102 103 /* Define wint_t and WEOF. (Also done in wchar.in.h.) */ 104 #if !@HAVE_WINT_T@ && !defined wint_t 105 # define wint_t int 106 # ifndef WEOF 107 # define WEOF -1 108 # endif 109 #else 110 /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or 111 <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that 112 wint_t must be "unchanged by default argument promotions". Override it. */ 113 # if @GNULIB_OVERRIDES_WINT_T@ 114 # if !GNULIB_defined_wint_t 115 # if @HAVE_CRTDEFS_H@ 116 # include <crtdefs.h> 117 # else 118 # include <stddef.h> 119 # endif 120 typedef unsigned int rpl_wint_t; 121 # undef wint_t 122 # define wint_t rpl_wint_t 123 # define GNULIB_defined_wint_t 1 124 # endif 125 # endif 126 # ifndef WEOF 127 # define WEOF ((wint_t) -1) 128 # endif 129 #endif 130 131 132 #if !GNULIB_defined_wctype_functions 133 134 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. 135 Linux libc5 has <wctype.h> and the functions but they are broken. 136 mingw and MSVC have <wctype.h> and the functions but they take a wchar_t 137 as argument, not an rpl_wint_t. 138 Assume all 11 functions (all isw* except iswblank) are implemented the 139 same way, or not at all. */ 140 # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ 141 142 # if @GNULIB_OVERRIDES_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */ 143 144 _GL_WCTYPE_INLINE int 145 rpl_iswalnum (wint_t wc) 146 { 147 return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); 148 } 149 150 _GL_WCTYPE_INLINE int 151 rpl_iswalpha (wint_t wc) 152 { 153 return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); 154 } 155 156 _GL_WCTYPE_INLINE int 157 rpl_iswblank (wint_t wc) 158 { 159 return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); 160 } 161 162 _GL_WCTYPE_INLINE int 163 rpl_iswcntrl (wint_t wc) 164 { 165 return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); 166 } 167 168 _GL_WCTYPE_INLINE int 169 rpl_iswdigit (wint_t wc) 170 { 171 return ((wchar_t) wc == wc ? iswdigit ((wchar_t) wc) : 0); 172 } 173 174 _GL_WCTYPE_INLINE int 175 rpl_iswgraph (wint_t wc) 176 { 177 return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); 178 } 179 180 _GL_WCTYPE_INLINE int 181 rpl_iswlower (wint_t wc) 182 { 183 return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); 184 } 185 186 _GL_WCTYPE_INLINE int 187 rpl_iswprint (wint_t wc) 188 { 189 return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); 190 } 191 192 _GL_WCTYPE_INLINE int 193 rpl_iswpunct (wint_t wc) 194 { 195 return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); 196 } 197 198 _GL_WCTYPE_INLINE int 199 rpl_iswspace (wint_t wc) 200 { 201 return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); 202 } 203 204 _GL_WCTYPE_INLINE int 205 rpl_iswupper (wint_t wc) 206 { 207 return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); 208 } 209 210 _GL_WCTYPE_INLINE int 211 rpl_iswxdigit (wint_t wc) 212 { 213 return ((wchar_t) wc == wc ? iswxdigit ((wchar_t) wc) : 0); 214 } 215 216 _GL_WCTYPE_INLINE wint_t 217 rpl_towlower (wint_t wc) 218 { 219 return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); 220 } 221 222 _GL_WCTYPE_INLINE wint_t 223 rpl_towupper (wint_t wc) 224 { 225 return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); 226 } 227 228 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 229 # undef iswalnum 230 # undef iswalpha 231 # undef iswblank 232 # undef iswcntrl 233 # undef iswdigit 234 # undef iswgraph 235 # undef iswlower 236 # undef iswprint 237 # undef iswpunct 238 # undef iswspace 239 # undef iswupper 240 # undef iswxdigit 241 # undef towlower 242 # undef towupper 243 # define iswalnum rpl_iswalnum 244 # define iswalpha rpl_iswalpha 245 # define iswblank rpl_iswblank 246 # define iswcntrl rpl_iswcntrl 247 # define iswdigit rpl_iswdigit 248 # define iswgraph rpl_iswgraph 249 # define iswlower rpl_iswlower 250 # define iswprint rpl_iswprint 251 # define iswpunct rpl_iswpunct 252 # define iswspace rpl_iswspace 253 # define iswupper rpl_iswupper 254 # define iswxdigit rpl_iswxdigit 255 # define towlower rpl_towlower 256 # define towupper rpl_towupper 257 # endif 258 259 # else 260 261 /* IRIX 5.3 has macros but no functions, its isw* macros refer to an 262 undefined variable _ctmp_ and to <ctype.h> macros like _P, and they 263 refer to system functions like _iswctype that are not in the 264 standard C library. Rather than try to get ancient buggy 265 implementations like this to work, just disable them. */ 266 # undef iswalnum 267 # undef iswalpha 268 # undef iswblank 269 # undef iswcntrl 270 # undef iswdigit 271 # undef iswgraph 272 # undef iswlower 273 # undef iswprint 274 # undef iswpunct 275 # undef iswspace 276 # undef iswupper 277 # undef iswxdigit 278 # undef towlower 279 # undef towupper 280 281 /* Linux libc5 has <wctype.h> and the functions but they are broken. */ 282 # if @REPLACE_ISWCNTRL@ 283 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 284 # define iswalnum rpl_iswalnum 285 # define iswalpha rpl_iswalpha 286 # define iswblank rpl_iswblank 287 # define iswcntrl rpl_iswcntrl 288 # define iswdigit rpl_iswdigit 289 # define iswgraph rpl_iswgraph 290 # define iswlower rpl_iswlower 291 # define iswprint rpl_iswprint 292 # define iswpunct rpl_iswpunct 293 # define iswspace rpl_iswspace 294 # define iswupper rpl_iswupper 295 # define iswxdigit rpl_iswxdigit 296 # endif 297 # endif 298 # if @REPLACE_TOWLOWER@ 299 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 300 # define towlower rpl_towlower 301 # define towupper rpl_towupper 302 # endif 303 # endif 304 305 _GL_WCTYPE_INLINE int 306 # if @REPLACE_ISWCNTRL@ 307 rpl_iswalnum 308 # else 309 iswalnum 310 # endif 311 (wint_t wc) 312 { 313 return ((wc >= '0' && wc <= '9') 314 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); 315 } 316 317 _GL_WCTYPE_INLINE int 318 # if @REPLACE_ISWCNTRL@ 319 rpl_iswalpha 320 # else 321 iswalpha 322 # endif 323 (wint_t wc) 324 { 325 return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; 326 } 327 328 _GL_WCTYPE_INLINE int 329 # if @REPLACE_ISWCNTRL@ 330 rpl_iswblank 331 # else 332 iswblank 333 # endif 334 (wint_t wc) 335 { 336 return wc == ' ' || wc == '\t'; 337 } 338 339 _GL_WCTYPE_INLINE int 340 # if @REPLACE_ISWCNTRL@ 341 rpl_iswcntrl 342 # else 343 iswcntrl 344 # endif 345 (wint_t wc) 346 { 347 return (wc & ~0x1f) == 0 || wc == 0x7f; 348 } 349 350 _GL_WCTYPE_INLINE int 351 # if @REPLACE_ISWCNTRL@ 352 rpl_iswdigit 353 # else 354 iswdigit 355 # endif 356 (wint_t wc) 357 { 358 return wc >= '0' && wc <= '9'; 359 } 360 361 _GL_WCTYPE_INLINE int 362 # if @REPLACE_ISWCNTRL@ 363 rpl_iswgraph 364 # else 365 iswgraph 366 # endif 367 (wint_t wc) 368 { 369 return wc >= '!' && wc <= '~'; 370 } 371 372 _GL_WCTYPE_INLINE int 373 # if @REPLACE_ISWCNTRL@ 374 rpl_iswlower 375 # else 376 iswlower 377 # endif 378 (wint_t wc) 379 { 380 return wc >= 'a' && wc <= 'z'; 381 } 382 383 _GL_WCTYPE_INLINE int 384 # if @REPLACE_ISWCNTRL@ 385 rpl_iswprint 386 # else 387 iswprint 388 # endif 389 (wint_t wc) 390 { 391 return wc >= ' ' && wc <= '~'; 392 } 393 394 _GL_WCTYPE_INLINE int 395 # if @REPLACE_ISWCNTRL@ 396 rpl_iswpunct 397 # else 398 iswpunct 399 # endif 400 (wint_t wc) 401 { 402 return (wc >= '!' && wc <= '~' 403 && !((wc >= '0' && wc <= '9') 404 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); 405 } 406 407 _GL_WCTYPE_INLINE int 408 # if @REPLACE_ISWCNTRL@ 409 rpl_iswspace 410 # else 411 iswspace 412 # endif 413 (wint_t wc) 414 { 415 return (wc == ' ' || wc == '\t' 416 || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); 417 } 418 419 _GL_WCTYPE_INLINE int 420 # if @REPLACE_ISWCNTRL@ 421 rpl_iswupper 422 # else 423 iswupper 424 # endif 425 (wint_t wc) 426 { 427 return wc >= 'A' && wc <= 'Z'; 428 } 429 430 _GL_WCTYPE_INLINE int 431 # if @REPLACE_ISWCNTRL@ 432 rpl_iswxdigit 433 # else 434 iswxdigit 435 # endif 436 (wint_t wc) 437 { 438 return ((wc >= '0' && wc <= '9') 439 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); 440 } 441 442 _GL_WCTYPE_INLINE wint_t 443 # if @REPLACE_TOWLOWER@ 444 rpl_towlower 445 # else 446 towlower 447 # endif 448 (wint_t wc) 449 { 450 return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); 451 } 452 453 _GL_WCTYPE_INLINE wint_t 454 # if @REPLACE_TOWLOWER@ 455 rpl_towupper 456 # else 457 towupper 458 # endif 459 (wint_t wc) 460 { 461 return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); 462 } 463 464 # endif 465 466 # elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) 467 /* Only the iswblank function is missing. */ 468 469 # if @REPLACE_ISWBLANK@ 470 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 471 # define iswblank rpl_iswblank 472 # endif 473 _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); 474 # else 475 _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); 476 # endif 477 478 # endif 479 480 # if defined __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@ 481 482 /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. 483 The functions towlower and towupper are implemented in the MSVCRT library 484 to take a wchar_t argument and return a wchar_t result. mingw declares 485 these functions to take a wint_t argument and return a wint_t result. 486 This means that: 487 1. When the user passes an argument outside the range 0x0000..0xFFFF, the 488 function will look only at the lower 16 bits. This is allowed according 489 to POSIX. 490 2. The return value is returned in the lower 16 bits of the result register. 491 The upper 16 bits are random: whatever happened to be in that part of the 492 result register. We need to fix this by adding a zero-extend from 493 wchar_t to wint_t after the call. */ 494 495 _GL_WCTYPE_INLINE wint_t 496 rpl_towlower (wint_t wc) 497 { 498 return (wint_t) (wchar_t) towlower (wc); 499 } 500 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 501 # define towlower rpl_towlower 502 # endif 503 504 _GL_WCTYPE_INLINE wint_t 505 rpl_towupper (wint_t wc) 506 { 507 return (wint_t) (wchar_t) towupper (wc); 508 } 509 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 510 # define towupper rpl_towupper 511 # endif 512 513 # endif /* __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@ */ 514 515 # define GNULIB_defined_wctype_functions 1 516 #endif 517 518 #if @REPLACE_ISWCNTRL@ 519 _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); 520 _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); 521 _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); 522 _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); 523 _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); 524 _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); 525 _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); 526 _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); 527 _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); 528 _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); 529 _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); 530 #else 531 _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); 532 _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); 533 _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); 534 _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); 535 _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); 536 _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); 537 _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); 538 _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); 539 _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); 540 _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); 541 _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); 542 #endif 543 #if __GLIBC__ >= 2 544 _GL_CXXALIASWARN (iswalnum); 545 _GL_CXXALIASWARN (iswalpha); 546 _GL_CXXALIASWARN (iswcntrl); 547 _GL_CXXALIASWARN (iswdigit); 548 _GL_CXXALIASWARN (iswgraph); 549 _GL_CXXALIASWARN (iswlower); 550 _GL_CXXALIASWARN (iswprint); 551 _GL_CXXALIASWARN (iswpunct); 552 _GL_CXXALIASWARN (iswspace); 553 _GL_CXXALIASWARN (iswupper); 554 _GL_CXXALIASWARN (iswxdigit); 555 #endif 556 557 #if @GNULIB_ISWBLANK@ 558 # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ 559 _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); 560 # else 561 _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); 562 # endif 563 # if __GLIBC__ >= 2 564 _GL_CXXALIASWARN (iswblank); 565 # endif 566 #endif 567 568 #if !@HAVE_WCTYPE_T@ 569 # if !GNULIB_defined_wctype_t 570 typedef void * wctype_t; 571 # define GNULIB_defined_wctype_t 1 572 # endif 573 #endif 574 575 /* Get a descriptor for a wide character property. */ 576 #if @GNULIB_WCTYPE@ 577 # if !@HAVE_WCTYPE_T@ 578 _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); 579 # endif 580 _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); 581 # if __GLIBC__ >= 2 582 _GL_CXXALIASWARN (wctype); 583 # endif 584 #elif defined GNULIB_POSIXCHECK 585 # undef wctype 586 # if HAVE_RAW_DECL_WCTYPE 587 _GL_WARN_ON_USE (wctype, "wctype is unportable - " 588 "use gnulib module wctype for portability"); 589 # endif 590 #endif 591 592 /* Test whether a wide character has a given property. 593 The argument WC must be either a wchar_t value or WEOF. 594 The argument DESC must have been returned by the wctype() function. */ 595 #if @GNULIB_ISWCTYPE@ 596 # if @GNULIB_OVERRIDES_WINT_T@ 597 # if !(defined __cplusplus && defined GNULIB_NAMESPACE) 598 # undef iswctype 599 # define iswctype rpl_iswctype 600 # endif 601 _GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc)); 602 _GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); 603 # else 604 # if !@HAVE_WCTYPE_T@ 605 _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); 606 # endif 607 _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); 608 # endif 609 # if __GLIBC__ >= 2 610 _GL_CXXALIASWARN (iswctype); 611 # endif 612 #elif defined GNULIB_POSIXCHECK 613 # undef iswctype 614 # if HAVE_RAW_DECL_ISWCTYPE 615 _GL_WARN_ON_USE (iswctype, "iswctype is unportable - " 616 "use gnulib module iswctype for portability"); 617 # endif 618 #endif 619 620 #if @REPLACE_TOWLOWER@ || defined __MINGW32__ 621 _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); 622 _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); 623 #else 624 _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); 625 _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); 626 #endif 627 #if __GLIBC__ >= 2 628 _GL_CXXALIASWARN (towlower); 629 _GL_CXXALIASWARN (towupper); 630 #endif 631 632 #if !@HAVE_WCTRANS_T@ 633 # if !GNULIB_defined_wctrans_t 634 typedef void * wctrans_t; 635 # define GNULIB_defined_wctrans_t 1 636 # endif 637 #endif 638 639 /* Get a descriptor for a wide character case conversion. */ 640 #if @GNULIB_WCTRANS@ 641 # if !@HAVE_WCTRANS_T@ 642 _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); 643 # endif 644 _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); 645 # if __GLIBC__ >= 2 646 _GL_CXXALIASWARN (wctrans); 647 # endif 648 #elif defined GNULIB_POSIXCHECK 649 # undef wctrans 650 # if HAVE_RAW_DECL_WCTRANS 651 _GL_WARN_ON_USE (wctrans, "wctrans is unportable - " 652 "use gnulib module wctrans for portability"); 653 # endif 654 #endif 655 656 /* Perform a given case conversion on a wide character. 657 The argument WC must be either a wchar_t value or WEOF. 658 The argument DESC must have been returned by the wctrans() function. */ 659 #if @GNULIB_TOWCTRANS@ 660 # if !@HAVE_WCTRANS_T@ 661 _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); 662 # endif 663 _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); 664 # if __GLIBC__ >= 2 665 _GL_CXXALIASWARN (towctrans); 666 # endif 667 #elif defined GNULIB_POSIXCHECK 668 # undef towctrans 669 # if HAVE_RAW_DECL_TOWCTRANS 670 _GL_WARN_ON_USE (towctrans, "towctrans is unportable - " 671 "use gnulib module towctrans for portability"); 672 # endif 673 #endif 674 675 _GL_INLINE_HEADER_END 676 677 #endif /* _@GUARD_PREFIX@_WCTYPE_H */ 678 #endif /* _@GUARD_PREFIX@_WCTYPE_H */ 679 #endif 680