Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _LINUX_CTYPE_H |
| 2 | #define _LINUX_CTYPE_H |
| 3 | |
| 4 | /* |
| 5 | * NOTE! This ctype does not handle EOF like the standard C |
| 6 | * library is required to. |
| 7 | */ |
| 8 | |
| 9 | #define _U 0x01 /* upper */ |
| 10 | #define _L 0x02 /* lower */ |
| 11 | #define _D 0x04 /* digit */ |
| 12 | #define _C 0x08 /* cntrl */ |
| 13 | #define _P 0x10 /* punct */ |
| 14 | #define _S 0x20 /* white space (space/lf/tab) */ |
| 15 | #define _X 0x40 /* hex digit */ |
| 16 | #define _SP 0x80 /* hard space (0x20) */ |
| 17 | |
André Goddard Rosa | 7707e61 | 2009-12-14 18:01:02 -0800 | [diff] [blame] | 18 | extern const unsigned char _ctype[]; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 19 | |
| 20 | #define __ismask(x) (_ctype[(int)(unsigned char)(x)]) |
| 21 | |
| 22 | #define isalnum(c) ((__ismask(c)&(_U|_L|_D)) != 0) |
| 23 | #define isalpha(c) ((__ismask(c)&(_U|_L)) != 0) |
| 24 | #define iscntrl(c) ((__ismask(c)&(_C)) != 0) |
Alexey Dobriyan | 1204c77 | 2016-10-11 13:51:30 -0700 | [diff] [blame] | 25 | static inline int isdigit(int c) |
| 26 | { |
| 27 | return '0' <= c && c <= '9'; |
| 28 | } |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 29 | #define isgraph(c) ((__ismask(c)&(_P|_U|_L|_D)) != 0) |
| 30 | #define islower(c) ((__ismask(c)&(_L)) != 0) |
| 31 | #define isprint(c) ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0) |
| 32 | #define ispunct(c) ((__ismask(c)&(_P)) != 0) |
André Goddard Rosa | f653398 | 2009-12-14 18:01:04 -0800 | [diff] [blame] | 33 | /* Note: isspace() must return false for %NUL-terminator */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 34 | #define isspace(c) ((__ismask(c)&(_S)) != 0) |
| 35 | #define isupper(c) ((__ismask(c)&(_U)) != 0) |
| 36 | #define isxdigit(c) ((__ismask(c)&(_D|_X)) != 0) |
| 37 | |
| 38 | #define isascii(c) (((unsigned char)(c))<=0x7f) |
| 39 | #define toascii(c) (((unsigned char)(c))&0x7f) |
| 40 | |
| 41 | static inline unsigned char __tolower(unsigned char c) |
| 42 | { |
| 43 | if (isupper(c)) |
| 44 | c -= 'A'-'a'; |
| 45 | return c; |
| 46 | } |
| 47 | |
| 48 | static inline unsigned char __toupper(unsigned char c) |
| 49 | { |
| 50 | if (islower(c)) |
| 51 | c -= 'a'-'A'; |
| 52 | return c; |
| 53 | } |
| 54 | |
| 55 | #define tolower(c) __tolower(c) |
| 56 | #define toupper(c) __toupper(c) |
| 57 | |
Andy Shevchenko | 75fb8f2 | 2011-07-25 17:13:20 -0700 | [diff] [blame] | 58 | /* |
| 59 | * Fast implementation of tolower() for internal usage. Do not use in your |
| 60 | * code. |
| 61 | */ |
| 62 | static inline char _tolower(const char c) |
| 63 | { |
| 64 | return c | 0x20; |
| 65 | } |
| 66 | |
Andy Shevchenko | 2e0fb40 | 2013-04-29 16:18:11 -0700 | [diff] [blame] | 67 | /* Fast check for octal digit */ |
| 68 | static inline int isodigit(const char c) |
| 69 | { |
| 70 | return c >= '0' && c <= '7'; |
| 71 | } |
| 72 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 73 | #endif |