X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fstr%2Fstr.h;h=7392e30fbacd7b1706658f7cff1dbb5a031ee56a;hp=54afca0f21c2afc671a7d0f5ad356e4fe1604b0f;hb=79dee5018a407be1d0674d6108b60f8e8c882b7c;hpb=ecea073699c60fd5aab9e3955f59a7042d637b68 diff --git a/ccan/str/str.h b/ccan/str/str.h index 54afca0f..7392e30f 100644 --- a/ccan/str/str.h +++ b/ccan/str/str.h @@ -1,3 +1,4 @@ +/* Licensed under LGPLv2.1+ - see LICENSE file for details */ #ifndef CCAN_STR_H #define CCAN_STR_H #include "config.h" @@ -71,6 +72,69 @@ static inline bool strends(const char *str, const char *postfix) */ size_t strcount(const char *haystack, const char *needle); +/** + * cisalnum - isalnum() which takes a char (and doesn't accept EOF) + * @c: a character + * + * Surprisingly, the standard ctype.h isalnum() takes an int, which + * must have the value of EOF (-1) or an unsigned char. This variant + * takes a real char, and doesn't accept EOF. + */ +static inline bool cisalnum(char c) +{ + return isalnum((unsigned char)c); +} +static inline bool cisalpha(char c) +{ + return isalpha((unsigned char)c); +} +static inline bool cisascii(char c) +{ + return isascii((unsigned char)c); +} +#if HAVE_ISBLANK +static inline bool cisblank(char c) +{ + return isblank((unsigned char)c); +} +#endif +static inline bool ciscntrl(char c) +{ + return iscntrl((unsigned char)c); +} +static inline bool cisdigit(char c) +{ + return isdigit((unsigned char)c); +} +static inline bool cisgraph(char c) +{ + return isgraph((unsigned char)c); +} +static inline bool cislower(char c) +{ + return islower((unsigned char)c); +} +static inline bool cisprint(char c) +{ + return isprint((unsigned char)c); +} +static inline bool cispunct(char c) +{ + return ispunct((unsigned char)c); +} +static inline bool cisspace(char c) +{ + return isspace((unsigned char)c); +} +static inline bool cisupper(char c) +{ + return isupper((unsigned char)c); +} +static inline bool cisxdigit(char c) +{ + return isxdigit((unsigned char)c); +} + #include /* These checks force things out of line, hence they are under DEBUG. */ @@ -105,7 +169,9 @@ size_t strcount(const char *haystack, const char *needle); #define isalnum(i) str_isalnum(str_check_arg_(i)) #define isalpha(i) str_isalpha(str_check_arg_(i)) #define isascii(i) str_isascii(str_check_arg_(i)) +#if HAVE_ISBLANK #define isblank(i) str_isblank(str_check_arg_(i)) +#endif #define iscntrl(i) str_iscntrl(str_check_arg_(i)) #define isdigit(i) str_isdigit(str_check_arg_(i)) #define isgraph(i) str_isgraph(str_check_arg_(i))