bump version for 1.0.49 release
[uclibc-ng.git] / libc / misc / ctype / ctype.c
blobbbe12e514e373f3bab3414921dc9376d85f58f10
1 /* Copyright (C) 2003 Manuel Novoa III
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Library General Public
5 * License as published by the Free Software Foundation; either
6 * version 2 of the License, or (at your option) any later version.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Library General Public License for more details.
13 * You should have received a copy of the GNU Library General Public
14 * License along with this library; if not, see
15 * <http://www.gnu.org/licenses/>.
18 /* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
20 * Besides uClibc, I'm using this code in my libc for elks, which is
21 * a 16-bit environment with a fairly limited compiler. It would make
22 * things much easier for me if this file isn't modified unnecessarily.
23 * In particular, please put any new or replacement functions somewhere
24 * else, and modify the makefile to use your version instead.
25 * Thanks. Manuel
27 * ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! */
29 #define __NO_CTYPE
31 #include <ctype.h>
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <limits.h>
35 #include <stdint.h>
36 #include <assert.h>
37 #include <locale.h>
39 /**********************************************************************/
40 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
42 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
44 #if EOF >= CHAR_MIN
45 #define CTYPE_DOMAIN_CHECK(C) \
46 (((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN))
47 #else
48 #define CTYPE_DOMAIN_CHECK(C) \
49 ((((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN)) || ((C) == EOF))
50 #endif
52 #else /* __UCLIBC_HAS_CTYPE_SIGNED__ */
54 #if EOF == -1
55 #define CTYPE_DOMAIN_CHECK(C) \
56 (((unsigned int)((C) - EOF)) <= (UCHAR_MAX - EOF))
57 #else
58 #define CTYPE_DOMAIN_CHECK(C) \
59 ((((unsigned int)(C)) <= UCHAR_MAX) || ((C) == EOF))
60 #endif
62 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__ */
64 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
66 #undef PASTE2
67 #define PASTE2(X,Y) X ## Y
69 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
71 #undef CTYPE_NAME
72 #undef ISCTYPE
73 #undef CTYPE_ALIAS
74 #undef CTYPE_DEF
75 #ifdef __UCLIBC_DO_XLOCALE
76 #define CTYPE_NAME(X) __is ## X ## _l
77 #define ISCTYPE(C,F) __isctype_l( C, F, locale_arg)
78 #define CTYPE_ALIAS(NAME) strong_alias( __is ## NAME ## _l , is ## NAME ## _l)
79 #define CTYPE_DEF(NAME) libc_hidden_def(is ## NAME ## _l)
80 #else
81 #define CTYPE_NAME(X) is ## X
82 #define ISCTYPE(C,F) __isctype( C, F )
83 #define CTYPE_ALIAS(NAME)
84 #define CTYPE_DEF(NAME) libc_hidden_def(is ## NAME)
85 #endif
88 #undef CTYPE_BODY
90 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
91 /* Make sure assert is active for to*() funcs below. */
92 #undef NDEBUG
93 #include <assert.h>
95 extern void __isctype_assert(int c, int mask) __attribute__ ((__noreturn__)) attribute_hidden;
97 #define CTYPE_BODY(NAME,C,MASK) \
98 if (CTYPE_DOMAIN_CHECK(C)) { \
99 return ISCTYPE(C, MASK); \
101 __isctype_assert(C, MASK);
103 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
105 #define CTYPE_BODY(NAME,C,MASK) \
106 return CTYPE_DOMAIN_CHECK(C) \
107 ? ISCTYPE(C, MASK) \
108 : 0;
110 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
112 #define CTYPE_BODY(NAME,C,MASK) \
113 return ISCTYPE(C, MASK);
116 #else /* No checking done. */
118 #error Unknown type of ctype checking!
120 #endif
124 #define IS_FUNC_BODY(NAME) \
125 int CTYPE_NAME(NAME) (int c __LOCALE_PARAM ); \
126 int CTYPE_NAME(NAME) (int c __LOCALE_PARAM ) \
128 CTYPE_BODY(NAME,c,PASTE2(_IS,NAME)) \
130 CTYPE_DEF(NAME) \
131 CTYPE_ALIAS(NAME)
133 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
135 #define C_MACRO(X) PASTE2(__C_is,X)(c)
136 #define CTYPE_NAME(X) is ## X
137 #define CTYPE_DEF(NAME) libc_hidden_def(is ## NAME)
139 #define IS_FUNC_BODY(NAME) \
140 int CTYPE_NAME(NAME) (int c) \
142 return C_MACRO(NAME); \
145 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
146 /**********************************************************************/
147 #ifdef L___ctype_assert
148 #ifdef __UCLIBC_HAS_CTYPE_ENFORCED__
151 attribute_hidden void __isctype_assert(int c, int mask)
153 fprintf(stderr, "%s: __is*{_l}(%d,%#x {locale})\n", __uclibc_progname, c, mask);
154 abort();
157 #endif
158 #endif
159 /**********************************************************************/
160 #if defined(L_isalnum) || defined(L_isalnum_l)
162 IS_FUNC_BODY(alnum);
164 #endif
165 /**********************************************************************/
166 #if defined(L_isalpha) || defined(L_isalpha_l)
168 IS_FUNC_BODY(alpha);
170 #endif
171 /**********************************************************************/
172 #if defined(L_isblank) || defined(L_isblank_l)
174 IS_FUNC_BODY(blank);
176 #endif
177 /**********************************************************************/
178 #if defined(L_iscntrl) || defined(L_iscntrl_l)
180 IS_FUNC_BODY(cntrl);
182 #endif
183 /**********************************************************************/
184 #if defined(L_isdigit) || defined(L_isdigit_l)
186 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
188 /* The standards require EOF < 0. */
189 #if EOF >= CHAR_MIN
190 #define __isdigit_char_or_EOF(C) __isdigit_char((C))
191 #else
192 #define __isdigit_char_or_EOF(C) __isdigit_int((C))
193 #endif
195 int CTYPE_NAME(digit) (int C __LOCALE_PARAM);
196 int CTYPE_NAME(digit) (int C __LOCALE_PARAM)
198 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
199 if (CTYPE_DOMAIN_CHECK(C)) {
200 return __isdigit_char_or_EOF(C); /* C is (unsigned) char or EOF. */
202 __isctype_assert(C, _ISdigit);
203 #else
204 return __isdigit_int(C); /* C could be invalid. */
205 #endif
207 CTYPE_DEF(digit)
208 CTYPE_ALIAS(digit)
210 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
212 IS_FUNC_BODY(digit);
214 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
216 #endif
217 /**********************************************************************/
218 #if defined(L_isgraph) || defined(L_isgraph_l)
220 IS_FUNC_BODY(graph);
222 #endif
223 /**********************************************************************/
224 #if defined(L_islower) || defined(L_islower_l)
226 IS_FUNC_BODY(lower);
228 #endif
229 /**********************************************************************/
230 #if defined(L_isprint) || defined(L_isprint_l)
232 IS_FUNC_BODY(print);
234 #endif
235 /**********************************************************************/
236 #if defined(L_ispunct) || defined(L_ispunct_l)
238 IS_FUNC_BODY(punct);
240 #endif
241 /**********************************************************************/
242 #if defined(L_isspace) || defined(L_isspace_l)
244 IS_FUNC_BODY(space);
246 #endif
247 /**********************************************************************/
248 #if defined(L_isupper) || defined(L_isupper_l)
250 IS_FUNC_BODY(upper);
252 #endif
253 /**********************************************************************/
254 #if defined(L_isxdigit) || defined(L_isxdigit_l)
256 IS_FUNC_BODY(xdigit);
258 #endif
259 /**********************************************************************/
260 #ifdef L_tolower
262 #undef tolower
263 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
265 int tolower(int c)
267 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
268 assert(CTYPE_DOMAIN_CHECK(c));
269 #endif
270 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOLOWER)[c] : c;
273 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
275 int tolower(int c)
277 return __C_tolower(c);
280 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
281 libc_hidden_def(tolower)
283 #endif
284 /**********************************************************************/
285 #ifdef L_tolower_l
287 #undef tolower_l
288 int tolower_l(int c, __locale_t l)
290 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
291 assert(CTYPE_DOMAIN_CHECK(c));
292 #endif
293 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_tolower[c] : c;
295 libc_hidden_def(tolower_l)
297 #endif
298 /**********************************************************************/
299 #ifdef L_toupper
301 #undef toupper
302 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
304 int toupper(int c)
306 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
307 assert(CTYPE_DOMAIN_CHECK(c));
308 #endif
309 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOUPPER)[c] : c;
312 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
314 int toupper(int c)
316 return __C_toupper(c);
319 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
320 libc_hidden_def(toupper)
322 #endif
323 /**********************************************************************/
324 #ifdef L_toupper_l
326 #undef toupper_l
327 int toupper_l(int c, __locale_t l)
329 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
330 assert(CTYPE_DOMAIN_CHECK(c));
331 #endif
332 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_toupper[c] : c;
335 #endif
336 /**********************************************************************/
337 #if defined(L_isascii) || defined(L_isascii_l)
339 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
341 int __XL_NPP(isascii)(int c);
342 int __XL_NPP(isascii)(int c)
344 return __isascii(c); /* locale-independent */
347 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
349 int isascii(int c)
351 return __isascii(c); /* locale-independent */
354 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
355 CTYPE_DEF(ascii)
358 #endif
359 /**********************************************************************/
360 #if defined(L_toascii) || defined(L_toascii_l)
362 #ifdef __UCLIBC_HAS_CTYPE_TABLES__
364 int __XL_NPP(toascii)(int c);
365 int __XL_NPP(toascii)(int c)
367 return __toascii(c); /* locale-independent */
370 #else /* __UCLIBC_HAS_CTYPE_TABLES__ */
372 int toascii(int c)
374 return __toascii(c); /* locale-independent */
377 #endif /* __UCLIBC_HAS_CTYPE_TABLES__ */
379 #endif
380 /**********************************************************************/
381 /* glibc extensions */
382 /**********************************************************************/
383 #ifdef L_isctype
385 int isctype(int c, int mask)
387 CTYPE_BODY(NAME,c,mask)
390 #endif
391 /**********************************************************************/
392 #ifdef L___ctype_b_loc
394 #ifdef __UCLIBC_HAS_XLOCALE__
396 const __ctype_mask_t **__ctype_b_loc(void)
398 return &(__UCLIBC_CURLOCALE->__ctype_b);
401 libc_hidden_def(__ctype_b_loc)
402 #endif
404 #endif
405 /**********************************************************************/
406 #ifdef L___ctype_tolower_loc
408 #ifdef __UCLIBC_HAS_XLOCALE__
410 const __ctype_touplow_t **__ctype_tolower_loc(void)
412 return &(__UCLIBC_CURLOCALE->__ctype_tolower);
414 libc_hidden_def(__ctype_tolower_loc)
416 #endif
418 #endif
419 /**********************************************************************/
420 #ifdef L___ctype_toupper_loc
422 #ifdef __UCLIBC_HAS_XLOCALE__
424 const __ctype_touplow_t **__ctype_toupper_loc(void)
426 return &(__UCLIBC_CURLOCALE->__ctype_toupper);
428 libc_hidden_def(__ctype_toupper_loc)
430 #endif
432 #endif
433 /**********************************************************************/
434 #ifdef L___C_ctype_b
436 static const __ctype_mask_t __C_ctype_b_data[] = {
437 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
438 /* -128 M-^@ */ 0,
439 /* -127 M-^A */ 0,
440 /* -126 M-^B */ 0,
441 /* -125 M-^C */ 0,
442 /* -124 M-^D */ 0,
443 /* -123 M-^E */ 0,
444 /* -122 M-^F */ 0,
445 /* -121 M-^G */ 0,
446 /* -120 M-^H */ 0,
447 /* -119 M-^I */ 0,
448 /* -118 M-^J */ 0,
449 /* -117 M-^K */ 0,
450 /* -116 M-^L */ 0,
451 /* -115 M-^M */ 0,
452 /* -114 M-^N */ 0,
453 /* -113 M-^O */ 0,
454 /* -112 M-^P */ 0,
455 /* -111 M-^Q */ 0,
456 /* -110 M-^R */ 0,
457 /* -109 M-^S */ 0,
458 /* -108 M-^T */ 0,
459 /* -107 M-^U */ 0,
460 /* -106 M-^V */ 0,
461 /* -105 M-^W */ 0,
462 /* -104 M-^X */ 0,
463 /* -103 M-^Y */ 0,
464 /* -102 M-^Z */ 0,
465 /* -101 M-^[ */ 0,
466 /* -100 M-^\ */ 0,
467 /* -99 M-^] */ 0,
468 /* -98 M-^^ */ 0,
469 /* -97 M-^_ */ 0,
470 /* -96 M- */ 0,
471 /* -95 M-! */ 0,
472 /* -94 M-" */ 0,
473 /* -93 M-# */ 0,
474 /* -92 M-$ */ 0,
475 /* -91 M-% */ 0,
476 /* -90 M-& */ 0,
477 /* -89 M-' */ 0,
478 /* -88 M-( */ 0,
479 /* -87 M-) */ 0,
480 /* -86 M-* */ 0,
481 /* -85 M-+ */ 0,
482 /* -84 M-, */ 0,
483 /* -83 M-- */ 0,
484 /* -82 M-. */ 0,
485 /* -81 M-/ */ 0,
486 /* -80 M-0 */ 0,
487 /* -79 M-1 */ 0,
488 /* -78 M-2 */ 0,
489 /* -77 M-3 */ 0,
490 /* -76 M-4 */ 0,
491 /* -75 M-5 */ 0,
492 /* -74 M-6 */ 0,
493 /* -73 M-7 */ 0,
494 /* -72 M-8 */ 0,
495 /* -71 M-9 */ 0,
496 /* -70 M-: */ 0,
497 /* -69 M-; */ 0,
498 /* -68 M-< */ 0,
499 /* -67 M-= */ 0,
500 /* -66 M-> */ 0,
501 /* -65 M-? */ 0,
502 /* -64 M-@ */ 0,
503 /* -63 M-A */ 0,
504 /* -62 M-B */ 0,
505 /* -61 M-C */ 0,
506 /* -60 M-D */ 0,
507 /* -59 M-E */ 0,
508 /* -58 M-F */ 0,
509 /* -57 M-G */ 0,
510 /* -56 M-H */ 0,
511 /* -55 M-I */ 0,
512 /* -54 M-J */ 0,
513 /* -53 M-K */ 0,
514 /* -52 M-L */ 0,
515 /* -51 M-M */ 0,
516 /* -50 M-N */ 0,
517 /* -49 M-O */ 0,
518 /* -48 M-P */ 0,
519 /* -47 M-Q */ 0,
520 /* -46 M-R */ 0,
521 /* -45 M-S */ 0,
522 /* -44 M-T */ 0,
523 /* -43 M-U */ 0,
524 /* -42 M-V */ 0,
525 /* -41 M-W */ 0,
526 /* -40 M-X */ 0,
527 /* -39 M-Y */ 0,
528 /* -38 M-Z */ 0,
529 /* -37 M-[ */ 0,
530 /* -36 M-\ */ 0,
531 /* -35 M-] */ 0,
532 /* -34 M-^ */ 0,
533 /* -33 M-_ */ 0,
534 /* -32 M-` */ 0,
535 /* -31 M-a */ 0,
536 /* -30 M-b */ 0,
537 /* -29 M-c */ 0,
538 /* -28 M-d */ 0,
539 /* -27 M-e */ 0,
540 /* -26 M-f */ 0,
541 /* -25 M-g */ 0,
542 /* -24 M-h */ 0,
543 /* -23 M-i */ 0,
544 /* -22 M-j */ 0,
545 /* -21 M-k */ 0,
546 /* -20 M-l */ 0,
547 /* -19 M-m */ 0,
548 /* -18 M-n */ 0,
549 /* -17 M-o */ 0,
550 /* -16 M-p */ 0,
551 /* -15 M-q */ 0,
552 /* -14 M-r */ 0,
553 /* -13 M-s */ 0,
554 /* -12 M-t */ 0,
555 /* -11 M-u */ 0,
556 /* -10 M-v */ 0,
557 /* -9 M-w */ 0,
558 /* -8 M-x */ 0,
559 /* -7 M-y */ 0,
560 /* -6 M-z */ 0,
561 /* -5 M-{ */ 0,
562 /* -4 M-| */ 0,
563 /* -3 M-} */ 0,
564 /* -2 M-~ */ 0,
565 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
566 /* -1 M-^? */ 0,
567 /* 0 ^@ */ _IScntrl,
568 /* 1 ^A */ _IScntrl,
569 /* 2 ^B */ _IScntrl,
570 /* 3 ^C */ _IScntrl,
571 /* 4 ^D */ _IScntrl,
572 /* 5 ^E */ _IScntrl,
573 /* 6 ^F */ _IScntrl,
574 /* 7 ^G */ _IScntrl,
575 /* 8 ^H */ _IScntrl,
576 /* 9 ^I */ _ISspace|_ISblank|_IScntrl,
577 /* 10 ^J */ _ISspace|_IScntrl,
578 /* 11 ^K */ _ISspace|_IScntrl,
579 /* 12 ^L */ _ISspace|_IScntrl,
580 /* 13 ^M */ _ISspace|_IScntrl,
581 /* 14 ^N */ _IScntrl,
582 /* 15 ^O */ _IScntrl,
583 /* 16 ^P */ _IScntrl,
584 /* 17 ^Q */ _IScntrl,
585 /* 18 ^R */ _IScntrl,
586 /* 19 ^S */ _IScntrl,
587 /* 20 ^T */ _IScntrl,
588 /* 21 ^U */ _IScntrl,
589 /* 22 ^V */ _IScntrl,
590 /* 23 ^W */ _IScntrl,
591 /* 24 ^X */ _IScntrl,
592 /* 25 ^Y */ _IScntrl,
593 /* 26 ^Z */ _IScntrl,
594 /* 27 ^[ */ _IScntrl,
595 /* 28 ^\ */ _IScntrl,
596 /* 29 ^] */ _IScntrl,
597 /* 30 ^^ */ _IScntrl,
598 /* 31 ^_ */ _IScntrl,
599 /* 32 */ _ISspace|_ISprint|_ISblank,
600 /* 33 ! */ _ISprint|_ISgraph|_ISpunct,
601 /* 34 " */ _ISprint|_ISgraph|_ISpunct,
602 /* 35 # */ _ISprint|_ISgraph|_ISpunct,
603 /* 36 $ */ _ISprint|_ISgraph|_ISpunct,
604 /* 37 % */ _ISprint|_ISgraph|_ISpunct,
605 /* 38 & */ _ISprint|_ISgraph|_ISpunct,
606 /* 39 ' */ _ISprint|_ISgraph|_ISpunct,
607 /* 40 ( */ _ISprint|_ISgraph|_ISpunct,
608 /* 41 ) */ _ISprint|_ISgraph|_ISpunct,
609 /* 42 * */ _ISprint|_ISgraph|_ISpunct,
610 /* 43 + */ _ISprint|_ISgraph|_ISpunct,
611 /* 44 , */ _ISprint|_ISgraph|_ISpunct,
612 /* 45 - */ _ISprint|_ISgraph|_ISpunct,
613 /* 46 . */ _ISprint|_ISgraph|_ISpunct,
614 /* 47 / */ _ISprint|_ISgraph|_ISpunct,
615 /* 48 0 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
616 /* 49 1 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
617 /* 50 2 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
618 /* 51 3 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
619 /* 52 4 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
620 /* 53 5 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
621 /* 54 6 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
622 /* 55 7 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
623 /* 56 8 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
624 /* 57 9 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
625 /* 58 : */ _ISprint|_ISgraph|_ISpunct,
626 /* 59 ; */ _ISprint|_ISgraph|_ISpunct,
627 /* 60 < */ _ISprint|_ISgraph|_ISpunct,
628 /* 61 = */ _ISprint|_ISgraph|_ISpunct,
629 /* 62 > */ _ISprint|_ISgraph|_ISpunct,
630 /* 63 ? */ _ISprint|_ISgraph|_ISpunct,
631 /* 64 @ */ _ISprint|_ISgraph|_ISpunct,
632 /* 65 A */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
633 /* 66 B */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
634 /* 67 C */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
635 /* 68 D */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
636 /* 69 E */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
637 /* 70 F */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
638 /* 71 G */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
639 /* 72 H */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
640 /* 73 I */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
641 /* 74 J */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
642 /* 75 K */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
643 /* 76 L */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
644 /* 77 M */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
645 /* 78 N */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
646 /* 79 O */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
647 /* 80 P */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
648 /* 81 Q */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
649 /* 82 R */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
650 /* 83 S */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
651 /* 84 T */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
652 /* 85 U */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
653 /* 86 V */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
654 /* 87 W */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
655 /* 88 X */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
656 /* 89 Y */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
657 /* 90 Z */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
658 /* 91 [ */ _ISprint|_ISgraph|_ISpunct,
659 /* 92 \ */ _ISprint|_ISgraph|_ISpunct,
660 /* 93 ] */ _ISprint|_ISgraph|_ISpunct,
661 /* 94 ^ */ _ISprint|_ISgraph|_ISpunct,
662 /* 95 _ */ _ISprint|_ISgraph|_ISpunct,
663 /* 96 ` */ _ISprint|_ISgraph|_ISpunct,
664 /* 97 a */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
665 /* 98 b */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
666 /* 99 c */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
667 /* 100 d */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
668 /* 101 e */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
669 /* 102 f */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
670 /* 103 g */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
671 /* 104 h */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
672 /* 105 i */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
673 /* 106 j */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
674 /* 107 k */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
675 /* 108 l */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
676 /* 109 m */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
677 /* 110 n */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
678 /* 111 o */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
679 /* 112 p */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
680 /* 113 q */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
681 /* 114 r */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
682 /* 115 s */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
683 /* 116 t */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
684 /* 117 u */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
685 /* 118 v */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
686 /* 119 w */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
687 /* 120 x */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
688 /* 121 y */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
689 /* 122 z */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
690 /* 123 { */ _ISprint|_ISgraph|_ISpunct,
691 /* 124 | */ _ISprint|_ISgraph|_ISpunct,
692 /* 125 } */ _ISprint|_ISgraph|_ISpunct,
693 /* 126 ~ */ _ISprint|_ISgraph|_ISpunct,
694 /* 127 ^? */ _IScntrl,
695 /* 128 M-^@ */ 0,
696 /* 129 M-^A */ 0,
697 /* 130 M-^B */ 0,
698 /* 131 M-^C */ 0,
699 /* 132 M-^D */ 0,
700 /* 133 M-^E */ 0,
701 /* 134 M-^F */ 0,
702 /* 135 M-^G */ 0,
703 /* 136 M-^H */ 0,
704 /* 137 M-^I */ 0,
705 /* 138 M-^J */ 0,
706 /* 139 M-^K */ 0,
707 /* 140 M-^L */ 0,
708 /* 141 M-^M */ 0,
709 /* 142 M-^N */ 0,
710 /* 143 M-^O */ 0,
711 /* 144 M-^P */ 0,
712 /* 145 M-^Q */ 0,
713 /* 146 M-^R */ 0,
714 /* 147 M-^S */ 0,
715 /* 148 M-^T */ 0,
716 /* 149 M-^U */ 0,
717 /* 150 M-^V */ 0,
718 /* 151 M-^W */ 0,
719 /* 152 M-^X */ 0,
720 /* 153 M-^Y */ 0,
721 /* 154 M-^Z */ 0,
722 /* 155 M-^[ */ 0,
723 /* 156 M-^\ */ 0,
724 /* 157 M-^] */ 0,
725 /* 158 M-^^ */ 0,
726 /* 159 M-^_ */ 0,
727 /* 160 M- */ 0,
728 /* 161 M-! */ 0,
729 /* 162 M-" */ 0,
730 /* 163 M-# */ 0,
731 /* 164 M-$ */ 0,
732 /* 165 M-% */ 0,
733 /* 166 M-& */ 0,
734 /* 167 M-' */ 0,
735 /* 168 M-( */ 0,
736 /* 169 M-) */ 0,
737 /* 170 M-* */ 0,
738 /* 171 M-+ */ 0,
739 /* 172 M-, */ 0,
740 /* 173 M-- */ 0,
741 /* 174 M-. */ 0,
742 /* 175 M-/ */ 0,
743 /* 176 M-0 */ 0,
744 /* 177 M-1 */ 0,
745 /* 178 M-2 */ 0,
746 /* 179 M-3 */ 0,
747 /* 180 M-4 */ 0,
748 /* 181 M-5 */ 0,
749 /* 182 M-6 */ 0,
750 /* 183 M-7 */ 0,
751 /* 184 M-8 */ 0,
752 /* 185 M-9 */ 0,
753 /* 186 M-: */ 0,
754 /* 187 M-; */ 0,
755 /* 188 M-< */ 0,
756 /* 189 M-= */ 0,
757 /* 190 M-> */ 0,
758 /* 191 M-? */ 0,
759 /* 192 M-@ */ 0,
760 /* 193 M-A */ 0,
761 /* 194 M-B */ 0,
762 /* 195 M-C */ 0,
763 /* 196 M-D */ 0,
764 /* 197 M-E */ 0,
765 /* 198 M-F */ 0,
766 /* 199 M-G */ 0,
767 /* 200 M-H */ 0,
768 /* 201 M-I */ 0,
769 /* 202 M-J */ 0,
770 /* 203 M-K */ 0,
771 /* 204 M-L */ 0,
772 /* 205 M-M */ 0,
773 /* 206 M-N */ 0,
774 /* 207 M-O */ 0,
775 /* 208 M-P */ 0,
776 /* 209 M-Q */ 0,
777 /* 210 M-R */ 0,
778 /* 211 M-S */ 0,
779 /* 212 M-T */ 0,
780 /* 213 M-U */ 0,
781 /* 214 M-V */ 0,
782 /* 215 M-W */ 0,
783 /* 216 M-X */ 0,
784 /* 217 M-Y */ 0,
785 /* 218 M-Z */ 0,
786 /* 219 M-[ */ 0,
787 /* 220 M-\ */ 0,
788 /* 221 M-] */ 0,
789 /* 222 M-^ */ 0,
790 /* 223 M-_ */ 0,
791 /* 224 M-` */ 0,
792 /* 225 M-a */ 0,
793 /* 226 M-b */ 0,
794 /* 227 M-c */ 0,
795 /* 228 M-d */ 0,
796 /* 229 M-e */ 0,
797 /* 230 M-f */ 0,
798 /* 231 M-g */ 0,
799 /* 232 M-h */ 0,
800 /* 233 M-i */ 0,
801 /* 234 M-j */ 0,
802 /* 235 M-k */ 0,
803 /* 236 M-l */ 0,
804 /* 237 M-m */ 0,
805 /* 238 M-n */ 0,
806 /* 239 M-o */ 0,
807 /* 240 M-p */ 0,
808 /* 241 M-q */ 0,
809 /* 242 M-r */ 0,
810 /* 243 M-s */ 0,
811 /* 244 M-t */ 0,
812 /* 245 M-u */ 0,
813 /* 246 M-v */ 0,
814 /* 247 M-w */ 0,
815 /* 248 M-x */ 0,
816 /* 249 M-y */ 0,
817 /* 250 M-z */ 0,
818 /* 251 M-{ */ 0,
819 /* 252 M-| */ 0,
820 /* 253 M-} */ 0,
821 /* 254 M-~ */ 0,
822 /* 255 M-^? */ 0
825 const __ctype_mask_t *__C_ctype_b = __C_ctype_b_data + __UCLIBC_CTYPE_B_TBL_OFFSET;
826 libc_hidden_data_def(__C_ctype_b)
828 #ifndef __UCLIBC_HAS_XLOCALE__
830 const __ctype_mask_t *__ctype_b = __C_ctype_b_data + __UCLIBC_CTYPE_B_TBL_OFFSET;
831 libc_hidden_data_def(__ctype_b)
833 #endif
835 #endif
836 /**********************************************************************/
837 #ifdef L___C_ctype_tolower
839 static const __ctype_touplow_t __C_ctype_tolower_data[] = {
840 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
841 -128, -127, -126, -125,
842 -124, -123, -122, -121,
843 -120, -119, -118, -117,
844 -116, -115, -114, -113,
845 -112, -111, -110, -109,
846 -108, -107, -106, -105,
847 -104, -103, -102, -101,
848 -100, -99, -98, -97,
849 -96, -95, -94, -93,
850 -92, -91, -90, -89,
851 -88, -87, -86, -85,
852 -84, -83, -82, -81,
853 -80, -79, -78, -77,
854 -76, -75, -74, -73,
855 -72, -71, -70, -69,
856 -68, -67, -66, -65,
857 -64, -63, -62, -61,
858 -60, -59, -58, -57,
859 -56, -55, -54, -53,
860 -52, -51, -50, -49,
861 -48, -47, -46, -45,
862 -44, -43, -42, -41,
863 -40, -39, -38, -37,
864 -36, -35, -34, -33,
865 -32, -31, -30, -29,
866 -28, -27, -26, -25,
867 -24, -23, -22, -21,
868 -20, -19, -18, -17,
869 -16, -15, -14, -13,
870 -12, -11, -10, -9,
871 -8, -7, -6, -5,
872 -4, -3, -2, -1,
873 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
874 0, 1, 2, 3,
875 4, 5, 6, 7,
876 8, 9, 10, 11,
877 12, 13, 14, 15,
878 16, 17, 18, 19,
879 20, 21, 22, 23,
880 24, 25, 26, 27,
881 28, 29, 30, 31,
882 32, 33, 34, 35,
883 36, 37, 38, 39,
884 40, 41, 42, 43,
885 44, 45, 46, 47,
886 48, 49, 50, 51,
887 52, 53, 54, 55,
888 56, 57, 58, 59,
889 60, 61, 62, 63,
890 64, 97 /* a */, 98 /* b */, 99 /* c */,
891 100 /* d */, 101 /* e */, 102 /* f */, 103 /* g */,
892 104 /* h */, 105 /* i */, 106 /* j */, 107 /* k */,
893 108 /* l */, 109 /* m */, 110 /* n */, 111 /* o */,
894 112 /* p */, 113 /* q */, 114 /* r */, 115 /* s */,
895 116 /* t */, 117 /* u */, 118 /* v */, 119 /* w */,
896 120 /* x */, 121 /* y */, 122 /* z */, 91,
897 92, 93, 94, 95,
898 96, 97, 98, 99,
899 100, 101, 102, 103,
900 104, 105, 106, 107,
901 108, 109, 110, 111,
902 112, 113, 114, 115,
903 116, 117, 118, 119,
904 120, 121, 122, 123,
905 124, 125, 126, 127,
906 128, 129, 130, 131,
907 132, 133, 134, 135,
908 136, 137, 138, 139,
909 140, 141, 142, 143,
910 144, 145, 146, 147,
911 148, 149, 150, 151,
912 152, 153, 154, 155,
913 156, 157, 158, 159,
914 160, 161, 162, 163,
915 164, 165, 166, 167,
916 168, 169, 170, 171,
917 172, 173, 174, 175,
918 176, 177, 178, 179,
919 180, 181, 182, 183,
920 184, 185, 186, 187,
921 188, 189, 190, 191,
922 192, 193, 194, 195,
923 196, 197, 198, 199,
924 200, 201, 202, 203,
925 204, 205, 206, 207,
926 208, 209, 210, 211,
927 212, 213, 214, 215,
928 216, 217, 218, 219,
929 220, 221, 222, 223,
930 224, 225, 226, 227,
931 228, 229, 230, 231,
932 232, 233, 234, 235,
933 236, 237, 238, 239,
934 240, 241, 242, 243,
935 244, 245, 246, 247,
936 248, 249, 250, 251,
937 252, 253, 254, 255
940 const __ctype_touplow_t *__C_ctype_tolower =
941 __C_ctype_tolower_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;
942 libc_hidden_data_def(__C_ctype_tolower)
944 #ifndef __UCLIBC_HAS_XLOCALE__
946 const __ctype_touplow_t *__ctype_tolower =
947 __C_ctype_tolower_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;
948 libc_hidden_data_def(__ctype_tolower)
950 #endif
952 #endif
953 /**********************************************************************/
954 #ifdef L___C_ctype_toupper
956 static const __ctype_touplow_t __C_ctype_toupper_data[] = {
957 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
958 -128, -127, -126, -125,
959 -124, -123, -122, -121,
960 -120, -119, -118, -117,
961 -116, -115, -114, -113,
962 -112, -111, -110, -109,
963 -108, -107, -106, -105,
964 -104, -103, -102, -101,
965 -100, -99, -98, -97,
966 -96, -95, -94, -93,
967 -92, -91, -90, -89,
968 -88, -87, -86, -85,
969 -84, -83, -82, -81,
970 -80, -79, -78, -77,
971 -76, -75, -74, -73,
972 -72, -71, -70, -69,
973 -68, -67, -66, -65,
974 -64, -63, -62, -61,
975 -60, -59, -58, -57,
976 -56, -55, -54, -53,
977 -52, -51, -50, -49,
978 -48, -47, -46, -45,
979 -44, -43, -42, -41,
980 -40, -39, -38, -37,
981 -36, -35, -34, -33,
982 -32, -31, -30, -29,
983 -28, -27, -26, -25,
984 -24, -23, -22, -21,
985 -20, -19, -18, -17,
986 -16, -15, -14, -13,
987 -12, -11, -10, -9,
988 -8, -7, -6, -5,
989 -4, -3, -2, -1,
990 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
991 0, 1, 2, 3,
992 4, 5, 6, 7,
993 8, 9, 10, 11,
994 12, 13, 14, 15,
995 16, 17, 18, 19,
996 20, 21, 22, 23,
997 24, 25, 26, 27,
998 28, 29, 30, 31,
999 32, 33, 34, 35,
1000 36, 37, 38, 39,
1001 40, 41, 42, 43,
1002 44, 45, 46, 47,
1003 48, 49, 50, 51,
1004 52, 53, 54, 55,
1005 56, 57, 58, 59,
1006 60, 61, 62, 63,
1007 64, 65, 66, 67,
1008 68, 69, 70, 71,
1009 72, 73, 74, 75,
1010 76, 77, 78, 79,
1011 80, 81, 82, 83,
1012 84, 85, 86, 87,
1013 88, 89, 90, 91,
1014 92, 93, 94, 95,
1015 96, 65 /* A */, 66 /* B */, 67 /* C */,
1016 68 /* D */, 69 /* E */, 70 /* F */, 71 /* G */,
1017 72 /* H */, 73 /* I */, 74 /* J */, 75 /* K */,
1018 76 /* L */, 77 /* M */, 78 /* N */, 79 /* O */,
1019 80 /* P */, 81 /* Q */, 82 /* R */, 83 /* S */,
1020 84 /* T */, 85 /* U */, 86 /* V */, 87 /* W */,
1021 88 /* X */, 89 /* Y */, 90 /* Z */, 123,
1022 124, 125, 126, 127,
1023 128, 129, 130, 131,
1024 132, 133, 134, 135,
1025 136, 137, 138, 139,
1026 140, 141, 142, 143,
1027 144, 145, 146, 147,
1028 148, 149, 150, 151,
1029 152, 153, 154, 155,
1030 156, 157, 158, 159,
1031 160, 161, 162, 163,
1032 164, 165, 166, 167,
1033 168, 169, 170, 171,
1034 172, 173, 174, 175,
1035 176, 177, 178, 179,
1036 180, 181, 182, 183,
1037 184, 185, 186, 187,
1038 188, 189, 190, 191,
1039 192, 193, 194, 195,
1040 196, 197, 198, 199,
1041 200, 201, 202, 203,
1042 204, 205, 206, 207,
1043 208, 209, 210, 211,
1044 212, 213, 214, 215,
1045 216, 217, 218, 219,
1046 220, 221, 222, 223,
1047 224, 225, 226, 227,
1048 228, 229, 230, 231,
1049 232, 233, 234, 235,
1050 236, 237, 238, 239,
1051 240, 241, 242, 243,
1052 244, 245, 246, 247,
1053 248, 249, 250, 251,
1054 252, 253, 254, 255
1057 const __ctype_touplow_t *__C_ctype_toupper =
1058 __C_ctype_toupper_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;
1059 libc_hidden_data_def(__C_ctype_toupper)
1061 #ifndef __UCLIBC_HAS_XLOCALE__
1063 const __ctype_touplow_t *__ctype_toupper =
1064 __C_ctype_toupper_data + __UCLIBC_CTYPE_TO_TBL_OFFSET;
1065 libc_hidden_data_def(__ctype_toupper)
1067 #endif
1069 #endif
1070 /**********************************************************************/