]>
Commit | Line | Data |
---|---|---|
1890ce84 CW |
1 | #ifndef SANE_CTYPE_H |
2 | #define SANE_CTYPE_H | |
3 | ||
4 | /* Sane ctype - no locale, and works with signed chars */ | |
5 | #undef isascii | |
6 | #undef isspace | |
7 | #undef isdigit | |
8 | #undef isalpha | |
9 | #undef isalnum | |
10 | #undef isprint | |
11 | #undef islower | |
12 | #undef isupper | |
13 | #undef tolower | |
14 | #undef toupper | |
15 | #undef iscntrl | |
16 | #undef ispunct | |
17 | #undef isxdigit | |
18 | ||
19 | extern const unsigned char sane_ctype[256]; | |
20 | extern const signed char hexval_table[256]; | |
21 | #define GIT_SPACE 0x01 | |
22 | #define GIT_DIGIT 0x02 | |
23 | #define GIT_ALPHA 0x04 | |
24 | #define GIT_GLOB_SPECIAL 0x08 | |
25 | #define GIT_REGEX_SPECIAL 0x10 | |
26 | #define GIT_PATHSPEC_MAGIC 0x20 | |
27 | #define GIT_CNTRL 0x40 | |
28 | #define GIT_PUNCT 0x80 | |
29 | #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) | |
30 | #define isascii(x) (((x) & ~0x7f) == 0) | |
31 | #define isspace(x) sane_istest(x,GIT_SPACE) | |
32 | #define isdigit(x) sane_istest(x,GIT_DIGIT) | |
33 | #define isalpha(x) sane_istest(x,GIT_ALPHA) | |
34 | #define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT) | |
35 | #define isprint(x) ((x) >= 0x20 && (x) <= 0x7e) | |
36 | #define islower(x) sane_iscase(x, 1) | |
37 | #define isupper(x) sane_iscase(x, 0) | |
38 | #define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL) | |
39 | #define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL) | |
40 | #define iscntrl(x) (sane_istest(x,GIT_CNTRL)) | |
41 | #define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \ | |
42 | GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC) | |
43 | #define isxdigit(x) (hexval_table[(unsigned char)(x)] != -1) | |
44 | #define tolower(x) sane_case((unsigned char)(x), 0x20) | |
45 | #define toupper(x) sane_case((unsigned char)(x), 0) | |
46 | #define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC) | |
47 | ||
48 | static inline int sane_case(int x, int high) | |
49 | { | |
50 | if (sane_istest(x, GIT_ALPHA)) | |
51 | x = (x & ~0x20) | high; | |
52 | return x; | |
53 | } | |
54 | ||
55 | static inline int sane_iscase(int x, int is_lower) | |
56 | { | |
57 | if (!sane_istest(x, GIT_ALPHA)) | |
58 | return 0; | |
59 | ||
60 | if (is_lower) | |
61 | return (x & 0x20) != 0; | |
62 | else | |
63 | return (x & 0x20) == 0; | |
64 | } | |
65 | ||
66 | #endif |