| #ifndef SANE_CTYPE_H |
| #define SANE_CTYPE_H |
| |
| /* Sane ctype - no locale, and works with signed chars */ |
| #undef isascii |
| #undef isspace |
| #undef isdigit |
| #undef isalpha |
| #undef isalnum |
| #undef isprint |
| #undef islower |
| #undef isupper |
| #undef tolower |
| #undef toupper |
| #undef iscntrl |
| #undef ispunct |
| #undef isxdigit |
| |
| extern const unsigned char sane_ctype[256]; |
| extern const signed char hexval_table[256]; |
| #define GIT_SPACE 0x01 |
| #define GIT_DIGIT 0x02 |
| #define GIT_ALPHA 0x04 |
| #define GIT_GLOB_SPECIAL 0x08 |
| #define GIT_REGEX_SPECIAL 0x10 |
| #define GIT_PATHSPEC_MAGIC 0x20 |
| #define GIT_CNTRL 0x40 |
| #define GIT_PUNCT 0x80 |
| #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) |
| #define isascii(x) (((x) & ~0x7f) == 0) |
| #define isspace(x) sane_istest(x,GIT_SPACE) |
| #define isdigit(x) sane_istest(x,GIT_DIGIT) |
| #define isalpha(x) sane_istest(x,GIT_ALPHA) |
| #define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT) |
| #define isprint(x) ((x) >= 0x20 && (x) <= 0x7e) |
| #define islower(x) sane_iscase(x, 1) |
| #define isupper(x) sane_iscase(x, 0) |
| #define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL) |
| #define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL) |
| #define iscntrl(x) (sane_istest(x,GIT_CNTRL)) |
| #define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \ |
| GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC) |
| #define isxdigit(x) (hexval_table[(unsigned char)(x)] != -1) |
| #define tolower(x) sane_case((unsigned char)(x), 0x20) |
| #define toupper(x) sane_case((unsigned char)(x), 0) |
| #define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC) |
| |
| static inline int sane_case(int x, int high) |
| { |
| if (sane_istest(x, GIT_ALPHA)) |
| x = (x & ~0x20) | high; |
| return x; |
| } |
| |
| static inline int sane_iscase(int x, int is_lower) |
| { |
| if (!sane_istest(x, GIT_ALPHA)) |
| return 0; |
| |
| if (is_lower) |
| return (x & 0x20) != 0; |
| else |
| return (x & 0x20) == 0; |
| } |
| |
| #endif |