1 #ifndef _CTYPE_H
2 #define _CTYPE_H
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8 #include <features.h>
9
10 int isalnum(int);
11 int isalpha(int);
12 int isblank(int);
13 int iscntrl(int);
14 int isdigit(int);
15 int isgraph(int);
16 int islower(int);
17 int isprint(int);
18 int ispunct(int);
19 int isspace(int);
20 int isupper(int);
21 int isxdigit(int);
22 int tolower(int);
23 int toupper(int);
24
25 // Disable these macros to avoid having to disable unsigned-integer-overflow
26 // UBSAN checks in all modules that use them.
27 #if !UBSAN_ENABLED
28 #ifndef __cplusplus
__isspace(int _c)29 static __inline int __isspace(int _c)
30 {
31 return _c == ' ' || (unsigned)_c-'\t' < 5;
32 }
33
34 #define isalpha(a) (0 ? isalpha(a) : (((unsigned)(a)|32)-'a') < 26)
35 #define isdigit(a) (0 ? isdigit(a) : ((unsigned)(a)-'0') < 10)
36 #define islower(a) (0 ? islower(a) : ((unsigned)(a)-'a') < 26)
37 #define isupper(a) (0 ? isupper(a) : ((unsigned)(a)-'A') < 26)
38 #define isprint(a) (0 ? isprint(a) : ((unsigned)(a)-0x20) < 0x5f)
39 #define isgraph(a) (0 ? isgraph(a) : ((unsigned)(a)-0x21) < 0x5e)
40 #define isspace(a) __isspace(a)
41 #endif
42 #endif
43
44
45 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
46 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
47 || defined(_BSD_SOURCE)
48
49 #define __NEED_locale_t
50 #include <bits/alltypes.h>
51
52 int isalnum_l(int, locale_t);
53 int isalpha_l(int, locale_t);
54 int isblank_l(int, locale_t);
55 int iscntrl_l(int, locale_t);
56 int isdigit_l(int, locale_t);
57 int isgraph_l(int, locale_t);
58 int islower_l(int, locale_t);
59 int isprint_l(int, locale_t);
60 int ispunct_l(int, locale_t);
61 int isspace_l(int, locale_t);
62 int isupper_l(int, locale_t);
63 int isxdigit_l(int, locale_t);
64 int tolower_l(int, locale_t);
65 int toupper_l(int, locale_t);
66
67 int isascii(int);
68 int toascii(int);
69 #define _tolower(a) ((a)|0x20)
70 #define _toupper(a) ((a)&0x5f)
71 #define isascii(a) (0 ? isascii(a) : (unsigned)(a) < 128)
72
73 #endif
74
75 #ifdef __cplusplus
76 }
77 #endif
78
79 #endif
80