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, write to the Free
15 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
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.
27 * ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! */
40 #ifdef __UCLIBC_HAS_XLOCALE__
42 #endif /* __UCLIBC_HAS_XLOCALE__ */
44 /**********************************************************************/
46 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
49 #define CTYPE_DOMAIN_CHECK(C) \
50 (((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN))
52 #define CTYPE_DOMAIN_CHECK(C) \
53 ((((unsigned int)((C) - CHAR_MIN)) <= (UCHAR_MAX - CHAR_MIN)) || ((C) == EOF))
56 #else /* __UCLIBC_HAS_CTYPE_SIGNED__ */
59 #define CTYPE_DOMAIN_CHECK(C) \
60 (((unsigned int)((C) - EOF)) <= (UCHAR_MAX - EOF))
62 #define CTYPE_DOMAIN_CHECK(C) \
63 ((((unsigned int)(C)) <= UCHAR_MAX) || ((C) == EOF))
66 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__ */
68 /**********************************************************************/
69 #ifdef __UCLIBC_MJN3_ONLY__
72 #warning CONSIDER: Should we assert when debugging and __UCLIBC_HAS_CTYPE_CHECKED?
73 #warning TODO: Fix asserts in to{upper|lower}{_l}.
74 #warning TODO: Optimize the isx*() funcs.
76 #endif /* __UCLIBC_MJN3_ONLY__ */
81 #ifdef __UCLIBC_DO_XLOCALE
82 #define CTYPE_NAME(X) __is ## X ## _l
83 #define ISCTYPE(C,F) __isctype_l( C, F, locale_arg)
84 #define CTYPE_ALIAS(NAME) weak_alias( __is ## NAME ## _l , is ## NAME ## _l)
86 #define CTYPE_NAME(X) is ## X
87 #define ISCTYPE(C,F) __isctype( C, F )
88 #define CTYPE_ALIAS(NAME)
91 #define PASTE2(X,Y) X ## Y
96 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
97 /* Make sure assert is active for to*() funcs below. */
101 extern void __isctype_assert(int c, int mask) __attribute__ ((__noreturn__));
103 #define CTYPE_BODY(NAME,C,MASK) \
104 if (CTYPE_DOMAIN_CHECK(C)) { \
105 return ISCTYPE(C, MASK); \
107 __isctype_assert(C, MASK);
109 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
111 #define CTYPE_BODY(NAME,C,MASK) \
112 return CTYPE_DOMAIN_CHECK(C) \
116 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
118 #define CTYPE_BODY(NAME,C,MASK) \
119 return ISCTYPE(C, MASK);
122 #else /* No checking done. */
124 #error Unknown type of ctype checking!
130 #define IS_FUNC_BODY(NAME) \
131 int CTYPE_NAME(NAME) (int c __LOCALE_PARAM ) \
133 CTYPE_BODY(NAME,c,PASTE2(_IS,NAME)) \
138 /**********************************************************************/
139 #ifdef L___ctype_assert
140 #ifdef __UCLIBC_HAS_CTYPE_ENFORCED__
142 extern const char *__progname;
144 void __isctype_assert(int c, int mask)
146 fprintf(stderr, "%s: __is*{_l}(%d,%#x {locale})\n", __progname, c, mask);
152 /**********************************************************************/
153 #if defined(L_isalnum) || defined(L_isalnum_l)
158 /**********************************************************************/
159 #if defined(L_isalpha) || defined(L_isalpha_l)
164 /**********************************************************************/
165 #if defined(L_isblank) || defined(L_isblank_l)
170 /**********************************************************************/
171 #if defined(L_iscntrl) || defined(L_iscntrl_l)
176 /**********************************************************************/
177 #if defined(L_isdigit) || defined(L_isdigit_l)
179 /* The standards require EOF < 0. */
181 #define __isdigit_char_or_EOF(C) __isdigit_char((C))
183 #define __isdigit_char_or_EOF(C) __isdigit_int((C))
186 int CTYPE_NAME(digit) (int C __LOCALE_PARAM)
188 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
189 if (CTYPE_DOMAIN_CHECK(C)) {
190 return __isdigit_char_or_EOF(C); /* C is (unsigned) char or EOF. */
192 __isctype_assert(C, _ISdigit);
194 return __isdigit_int(C); /* C could be invalid. */
201 /**********************************************************************/
202 #if defined(L_isgraph) || defined(L_isgraph_l)
207 /**********************************************************************/
208 #if defined(L_islower) || defined(L_islower_l)
213 /**********************************************************************/
214 #if defined(L_isprint) || defined(L_isprint_l)
219 /**********************************************************************/
220 #if defined(L_ispunct) || defined(L_ispunct_l)
225 /**********************************************************************/
226 #if defined(L_isspace) || defined(L_isspace_l)
231 /**********************************************************************/
232 #if defined(L_isupper) || defined(L_isupper_l)
237 /**********************************************************************/
238 #if defined(L_isxdigit) || defined(L_isxdigit_l)
240 IS_FUNC_BODY(xdigit);
243 /**********************************************************************/
248 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
249 assert(CTYPE_DOMAIN_CHECK(c));
251 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOLOWER)[c] : c;
255 /**********************************************************************/
260 int tolower_l(int c, __locale_t l)
262 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
263 assert(CTYPE_DOMAIN_CHECK(c));
265 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_tolower[c] : c;
269 /**********************************************************************/
274 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
275 assert(CTYPE_DOMAIN_CHECK(c));
277 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? (__UCLIBC_CTYPE_TOUPPER)[c] : c;
281 /**********************************************************************/
286 int toupper_l(int c, __locale_t l)
288 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
289 assert(CTYPE_DOMAIN_CHECK(c));
291 return __UCLIBC_CTYPE_IN_TO_DOMAIN(c) ? l->__ctype_toupper[c] : c;
295 /**********************************************************************/
296 #if defined(L_isascii) || defined(L_isascii_l)
298 int __XL(isascii)(int c)
300 return __isascii(c); /* locale-independent */
304 /**********************************************************************/
305 #if defined(L_toascii) || defined(L_toascii_l)
307 int __XL(toascii)(int c)
309 return __toascii(c); /* locale-independent */
313 /**********************************************************************/
314 /* old uClibc extensions */
315 /**********************************************************************/
320 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
321 assert(CTYPE_DOMAIN_CHECK(C));
322 return (__isctype(C, (_ISxdigit|_ISupper)) == _ISxdigit);
323 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
324 return CTYPE_DOMAIN_CHECK(C)
325 ? (__isctype(C, (_ISxdigit|_ISupper)) == _ISxdigit)
327 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
328 return (__isctype(C, (_ISxdigit|_ISupper)) == _ISxdigit);
329 #else /* No checking done. */
330 #error Unknown type of ctype checking!
335 /**********************************************************************/
340 #if defined(__UCLIBC_HAS_CTYPE_ENFORCED__)
341 assert(CTYPE_DOMAIN_CHECK(C));
342 return (__isctype(C, (_ISxdigit|_ISlower)) == _ISxdigit);
343 #elif defined(__UCLIBC_HAS_CTYPE_CHECKED__)
344 return CTYPE_DOMAIN_CHECK(C)
345 ? (__isctype(C, (_ISxdigit|_ISlower)) == _ISxdigit)
347 #elif defined(__UCLIBC_HAS_CTYPE_UNSAFE__)
348 return (__isctype(C, (_ISxdigit|_ISlower)) == _ISxdigit);
349 #else /* No checking done. */
350 #error Unknown type of ctype checking!
355 /**********************************************************************/
356 /* glibc extensions */
357 /**********************************************************************/
360 int isctype(int c, int mask)
362 CTYPE_BODY(NAME,c,mask)
366 /**********************************************************************/
369 #ifdef __UCLIBC_HAS_XLOCALE__
371 const uint16_t **__ctype_b_loc(void)
373 return &(__UCLIBC_CURLOCALE_DATA).__ctype_b;
379 /**********************************************************************/
380 #if L___ctype_tolower_loc
382 #ifdef __UCLIBC_HAS_XLOCALE__
384 const __ctype_touplow_t **__ctype_tolower_loc(void)
386 return &(__UCLIBC_CURLOCALE_DATA).__ctype_tolower;
392 /**********************************************************************/
393 #if L___ctype_toupper_loc
395 #ifdef __UCLIBC_HAS_XLOCALE__
397 const __ctype_touplow_t **__ctype_toupper_loc(void)
399 return &(__UCLIBC_CURLOCALE_DATA).__ctype_toupper;
405 /**********************************************************************/
408 const uint16_t __C_ctype_b_data[] = {
409 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
537 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
548 /* 9 ^I */ _ISspace|_ISblank|_IScntrl,
549 /* 10 ^J */ _ISspace|_IScntrl,
550 /* 11 ^K */ _ISspace|_IScntrl,
551 /* 12 ^L */ _ISspace|_IScntrl,
552 /* 13 ^M */ _ISspace|_IScntrl,
553 /* 14 ^N */ _IScntrl,
554 /* 15 ^O */ _IScntrl,
555 /* 16 ^P */ _IScntrl,
556 /* 17 ^Q */ _IScntrl,
557 /* 18 ^R */ _IScntrl,
558 /* 19 ^S */ _IScntrl,
559 /* 20 ^T */ _IScntrl,
560 /* 21 ^U */ _IScntrl,
561 /* 22 ^V */ _IScntrl,
562 /* 23 ^W */ _IScntrl,
563 /* 24 ^X */ _IScntrl,
564 /* 25 ^Y */ _IScntrl,
565 /* 26 ^Z */ _IScntrl,
566 /* 27 ^[ */ _IScntrl,
567 /* 28 ^\ */ _IScntrl,
568 /* 29 ^] */ _IScntrl,
569 /* 30 ^^ */ _IScntrl,
570 /* 31 ^_ */ _IScntrl,
571 /* 32 */ _ISspace|_ISprint|_ISblank,
572 /* 33 ! */ _ISprint|_ISgraph|_ISpunct,
573 /* 34 " */ _ISprint|_ISgraph|_ISpunct,
574 /* 35 # */ _ISprint|_ISgraph|_ISpunct,
575 /* 36 $ */ _ISprint|_ISgraph|_ISpunct,
576 /* 37 % */ _ISprint|_ISgraph|_ISpunct,
577 /* 38 & */ _ISprint|_ISgraph|_ISpunct,
578 /* 39 ' */ _ISprint|_ISgraph|_ISpunct,
579 /* 40 ( */ _ISprint|_ISgraph|_ISpunct,
580 /* 41 ) */ _ISprint|_ISgraph|_ISpunct,
581 /* 42 * */ _ISprint|_ISgraph|_ISpunct,
582 /* 43 + */ _ISprint|_ISgraph|_ISpunct,
583 /* 44 , */ _ISprint|_ISgraph|_ISpunct,
584 /* 45 - */ _ISprint|_ISgraph|_ISpunct,
585 /* 46 . */ _ISprint|_ISgraph|_ISpunct,
586 /* 47 / */ _ISprint|_ISgraph|_ISpunct,
587 /* 48 0 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
588 /* 49 1 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
589 /* 50 2 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
590 /* 51 3 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
591 /* 52 4 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
592 /* 53 5 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
593 /* 54 6 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
594 /* 55 7 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
595 /* 56 8 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
596 /* 57 9 */ _ISdigit|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
597 /* 58 : */ _ISprint|_ISgraph|_ISpunct,
598 /* 59 ; */ _ISprint|_ISgraph|_ISpunct,
599 /* 60 < */ _ISprint|_ISgraph|_ISpunct,
600 /* 61 = */ _ISprint|_ISgraph|_ISpunct,
601 /* 62 > */ _ISprint|_ISgraph|_ISpunct,
602 /* 63 ? */ _ISprint|_ISgraph|_ISpunct,
603 /* 64 @ */ _ISprint|_ISgraph|_ISpunct,
604 /* 65 A */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
605 /* 66 B */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
606 /* 67 C */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
607 /* 68 D */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
608 /* 69 E */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
609 /* 70 F */ _ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
610 /* 71 G */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
611 /* 72 H */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
612 /* 73 I */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
613 /* 74 J */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
614 /* 75 K */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
615 /* 76 L */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
616 /* 77 M */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
617 /* 78 N */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
618 /* 79 O */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
619 /* 80 P */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
620 /* 81 Q */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
621 /* 82 R */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
622 /* 83 S */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
623 /* 84 T */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
624 /* 85 U */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
625 /* 86 V */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
626 /* 87 W */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
627 /* 88 X */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
628 /* 89 Y */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
629 /* 90 Z */ _ISupper|_ISalpha|_ISprint|_ISgraph|_ISalnum,
630 /* 91 [ */ _ISprint|_ISgraph|_ISpunct,
631 /* 92 \ */ _ISprint|_ISgraph|_ISpunct,
632 /* 93 ] */ _ISprint|_ISgraph|_ISpunct,
633 /* 94 ^ */ _ISprint|_ISgraph|_ISpunct,
634 /* 95 _ */ _ISprint|_ISgraph|_ISpunct,
635 /* 96 ` */ _ISprint|_ISgraph|_ISpunct,
636 /* 97 a */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
637 /* 98 b */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
638 /* 99 c */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
639 /* 100 d */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
640 /* 101 e */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
641 /* 102 f */ _ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph|_ISalnum,
642 /* 103 g */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
643 /* 104 h */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
644 /* 105 i */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
645 /* 106 j */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
646 /* 107 k */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
647 /* 108 l */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
648 /* 109 m */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
649 /* 110 n */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
650 /* 111 o */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
651 /* 112 p */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
652 /* 113 q */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
653 /* 114 r */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
654 /* 115 s */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
655 /* 116 t */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
656 /* 117 u */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
657 /* 118 v */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
658 /* 119 w */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
659 /* 120 x */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
660 /* 121 y */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
661 /* 122 z */ _ISlower|_ISalpha|_ISprint|_ISgraph|_ISalnum,
662 /* 123 { */ _ISprint|_ISgraph|_ISpunct,
663 /* 124 | */ _ISprint|_ISgraph|_ISpunct,
664 /* 125 } */ _ISprint|_ISgraph|_ISpunct,
665 /* 126 ~ */ _ISprint|_ISgraph|_ISpunct,
666 /* 127 ^? */ _IScntrl,
797 const uint16_t *__C_ctype_b = __C_ctype_b_data + 1
798 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
803 #ifndef __UCLIBC_HAS_XLOCALE__
805 const uint16_t *__ctype_b = __C_ctype_b_data + 1
806 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
814 /**********************************************************************/
815 #ifdef L___C_ctype_tolower
817 const __ctype_touplow_t __C_ctype_tolower_data[] = {
818 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
819 -128, -127, -126, -125,
820 -124, -123, -122, -121,
821 -120, -119, -118, -117,
822 -116, -115, -114, -113,
823 -112, -111, -110, -109,
824 -108, -107, -106, -105,
825 -104, -103, -102, -101,
851 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
868 64, 97 /* a */, 98 /* b */, 99 /* c */,
869 100 /* d */, 101 /* e */, 102 /* f */, 103 /* g */,
870 104 /* h */, 105 /* i */, 106 /* j */, 107 /* k */,
871 108 /* l */, 109 /* m */, 110 /* n */, 111 /* o */,
872 112 /* p */, 113 /* q */, 114 /* r */, 115 /* s */,
873 116 /* t */, 117 /* u */, 118 /* v */, 119 /* w */,
874 120 /* x */, 121 /* y */, 122 /* z */, 91,
918 const __ctype_touplow_t *__C_ctype_tolower = __C_ctype_tolower_data
919 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
924 #ifndef __UCLIBC_HAS_XLOCALE__
926 const __ctype_touplow_t *__ctype_tolower = __C_ctype_tolower_data
927 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
935 /**********************************************************************/
936 #ifdef L___C_ctype_toupper
938 const __ctype_touplow_t __C_ctype_toupper_data[] = {
939 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
940 -128, -127, -126, -125,
941 -124, -123, -122, -121,
942 -120, -119, -118, -117,
943 -116, -115, -114, -113,
944 -112, -111, -110, -109,
945 -108, -107, -106, -105,
946 -104, -103, -102, -101,
972 #endif /* __UCLIBC_HAS_CTYPE_SIGNED__*/
997 96, 65 /* A */, 66 /* B */, 67 /* C */,
998 68 /* D */, 69 /* E */, 70 /* F */, 71 /* G */,
999 72 /* H */, 73 /* I */, 74 /* J */, 75 /* K */,
1000 76 /* L */, 77 /* M */, 78 /* N */, 79 /* O */,
1001 80 /* P */, 81 /* Q */, 82 /* R */, 83 /* S */,
1002 84 /* T */, 85 /* U */, 86 /* V */, 87 /* W */,
1003 88 /* X */, 89 /* Y */, 90 /* Z */, 123,
1039 const __ctype_touplow_t *__C_ctype_toupper = __C_ctype_toupper_data
1040 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
1045 #ifndef __UCLIBC_HAS_XLOCALE__
1047 const __ctype_touplow_t *__ctype_toupper = __C_ctype_toupper_data
1048 #ifdef __UCLIBC_HAS_CTYPE_SIGNED__
1056 /**********************************************************************/