1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds #ifndef _LINUX_CTYPE_H 31da177e4SLinus Torvalds #define _LINUX_CTYPE_H 41da177e4SLinus Torvalds 5*caabdd0fSArnd Bergmann #include <linux/compiler.h> 6*caabdd0fSArnd Bergmann 71da177e4SLinus Torvalds /* 81da177e4SLinus Torvalds * NOTE! This ctype does not handle EOF like the standard C 91da177e4SLinus Torvalds * library is required to. 101da177e4SLinus Torvalds */ 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #define _U 0x01 /* upper */ 131da177e4SLinus Torvalds #define _L 0x02 /* lower */ 141da177e4SLinus Torvalds #define _D 0x04 /* digit */ 151da177e4SLinus Torvalds #define _C 0x08 /* cntrl */ 161da177e4SLinus Torvalds #define _P 0x10 /* punct */ 171da177e4SLinus Torvalds #define _S 0x20 /* white space (space/lf/tab) */ 181da177e4SLinus Torvalds #define _X 0x40 /* hex digit */ 191da177e4SLinus Torvalds #define _SP 0x80 /* hard space (0x20) */ 201da177e4SLinus Torvalds 217707e61cSAndré Goddard Rosa extern const unsigned char _ctype[]; 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds #define __ismask(x) (_ctype[(int)(unsigned char)(x)]) 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds #define isalnum(c) ((__ismask(c)&(_U|_L|_D)) != 0) 261da177e4SLinus Torvalds #define isalpha(c) ((__ismask(c)&(_U|_L)) != 0) 271da177e4SLinus Torvalds #define iscntrl(c) ((__ismask(c)&(_C)) != 0) 281da177e4SLinus Torvalds #define isgraph(c) ((__ismask(c)&(_P|_U|_L|_D)) != 0) 291da177e4SLinus Torvalds #define islower(c) ((__ismask(c)&(_L)) != 0) 301da177e4SLinus Torvalds #define isprint(c) ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0) 311da177e4SLinus Torvalds #define ispunct(c) ((__ismask(c)&(_P)) != 0) 32f653398cSAndré Goddard Rosa /* Note: isspace() must return false for %NUL-terminator */ 331da177e4SLinus Torvalds #define isspace(c) ((__ismask(c)&(_S)) != 0) 341da177e4SLinus Torvalds #define isupper(c) ((__ismask(c)&(_U)) != 0) 351da177e4SLinus Torvalds #define isxdigit(c) ((__ismask(c)&(_D|_X)) != 0) 361da177e4SLinus Torvalds 371da177e4SLinus Torvalds #define isascii(c) (((unsigned char)(c))<=0x7f) 381da177e4SLinus Torvalds #define toascii(c) (((unsigned char)(c))&0x7f) 391da177e4SLinus Torvalds 40*caabdd0fSArnd Bergmann #if __has_builtin(__builtin_isdigit) 41*caabdd0fSArnd Bergmann #define isdigit(c) __builtin_isdigit(c) 42*caabdd0fSArnd Bergmann #else isdigit(int c)43*caabdd0fSArnd Bergmannstatic inline int isdigit(int c) 44*caabdd0fSArnd Bergmann { 45*caabdd0fSArnd Bergmann return '0' <= c && c <= '9'; 46*caabdd0fSArnd Bergmann } 47*caabdd0fSArnd Bergmann #endif 48*caabdd0fSArnd Bergmann __tolower(unsigned char c)491da177e4SLinus Torvaldsstatic inline unsigned char __tolower(unsigned char c) 501da177e4SLinus Torvalds { 511da177e4SLinus Torvalds if (isupper(c)) 521da177e4SLinus Torvalds c -= 'A'-'a'; 531da177e4SLinus Torvalds return c; 541da177e4SLinus Torvalds } 551da177e4SLinus Torvalds __toupper(unsigned char c)561da177e4SLinus Torvaldsstatic inline unsigned char __toupper(unsigned char c) 571da177e4SLinus Torvalds { 581da177e4SLinus Torvalds if (islower(c)) 591da177e4SLinus Torvalds c -= 'a'-'A'; 601da177e4SLinus Torvalds return c; 611da177e4SLinus Torvalds } 621da177e4SLinus Torvalds 631da177e4SLinus Torvalds #define tolower(c) __tolower(c) 641da177e4SLinus Torvalds #define toupper(c) __toupper(c) 651da177e4SLinus Torvalds 6675fb8f26SAndy Shevchenko /* 6775fb8f26SAndy Shevchenko * Fast implementation of tolower() for internal usage. Do not use in your 6875fb8f26SAndy Shevchenko * code. 6975fb8f26SAndy Shevchenko */ _tolower(const char c)7075fb8f26SAndy Shevchenkostatic inline char _tolower(const char c) 7175fb8f26SAndy Shevchenko { 7275fb8f26SAndy Shevchenko return c | 0x20; 7375fb8f26SAndy Shevchenko } 7475fb8f26SAndy Shevchenko 752e0fb404SAndy Shevchenko /* Fast check for octal digit */ isodigit(const char c)762e0fb404SAndy Shevchenkostatic inline int isodigit(const char c) 772e0fb404SAndy Shevchenko { 782e0fb404SAndy Shevchenko return c >= '0' && c <= '7'; 792e0fb404SAndy Shevchenko } 802e0fb404SAndy Shevchenko 811da177e4SLinus Torvalds #endif 82