diff --git a/lib/libc/minimal/include/ctype.h b/lib/libc/minimal/include/ctype.h index f9a4bdf7b4c47..82acd03351172 100644 --- a/lib/libc/minimal/include/ctype.h +++ b/lib/libc/minimal/include/ctype.h @@ -15,63 +15,82 @@ extern "C" { static inline int isupper(int a) { - return (int)(((unsigned)(a)-(unsigned)'A') < 26U); + return (('A' <= a) && (a <= 'Z')); } static inline int isalpha(int c) { - return (int)((((unsigned)c|32u)-(unsigned)'a') < 26U); + /* force to lowercase */ + c |= 32; + + return (('a' <= c) && (c <= 'z')); +} + +static inline int isblank(int c) +{ + return ((c == ' ') || (c == '\t')); } static inline int isspace(int c) { - return (int)(c == (int)' ' || ((unsigned)c-(unsigned)'\t') < 5U); + return ((c == ' ') || (('\t' <= c) && (c <= '\r'))); } static inline int isgraph(int c) { - return (int)((((unsigned)c) > ' ') && - (((unsigned)c) <= (unsigned)'~')); + return ((' ' < c) && (c <= '~')); } static inline int isprint(int c) { - return (int)((((unsigned)c) >= ' ') && - (((unsigned)c) <= (unsigned)'~')); + return ((' ' <= c) && (c <= '~')); } static inline int isdigit(int a) { - return (int)(((unsigned)(a)-(unsigned)'0') < 10U); + return (('0' <= a) && (a <= '9')); +} + +static inline int islower(int c) +{ + return (('a' <= c) && (c <= 'z')); } static inline int isxdigit(int a) { - unsigned int ua = (unsigned int)a; + if (isdigit(a) != 0) { + return 1; + } + + /* force to lowercase */ + a |= 32; - return (int)(((ua - (unsigned)'0') < 10U) || - ((ua | 32U) - (unsigned)'a' < 6U)); + return (('a' <= a) && (a <= 'f')); } static inline int tolower(int chr) { - return (chr >= (int)'A' && chr <= (int)'Z') ? (chr + 32) : (chr); + return (chr >= 'A' && chr <= 'Z') ? (chr + 32) : (chr); } static inline int toupper(int chr) { - return (int)((chr >= (int)'a' && chr <= - (int)'z') ? (chr - 32) : (chr)); + return ((chr >= 'a' && chr <= 'z') ? (chr - 32) : (chr)); } static inline int isalnum(int chr) { - return (int)(isalpha(chr) || isdigit(chr)); + return (isalpha(chr) || isdigit(chr)); +} + +static inline int ispunct(int c) +{ + return (isgraph(c) && !isalnum(c)); } static inline int iscntrl(int c) { - return (int)((((unsigned int)c) <= 31U) || (((unsigned int)c) == 127U)); + return ((((unsigned int)c) <= 31U) || (((unsigned int)c) == 127U)); } #ifdef __cplusplus