mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-31 07:51:08 +03:00
120 lines
2.1 KiB
C
120 lines
2.1 KiB
C
|
/*
|
||
|
* ctype.h
|
||
|
*
|
||
|
* This assumes ISO 8859-1, being a reasonable superset of ASCII.
|
||
|
*/
|
||
|
|
||
|
#ifndef _CTYPE_H
|
||
|
#define _CTYPE_H
|
||
|
|
||
|
#ifndef __CTYPE_NO_INLINE
|
||
|
# define __ctype_inline extern __inline__
|
||
|
#else
|
||
|
# define __ctype_inline
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* This relies on the following definitions:
|
||
|
*
|
||
|
* cntrl = !print
|
||
|
* alpha = upper|lower
|
||
|
* graph = punct|alpha|digit
|
||
|
* blank = '\t' || ' ' (per POSIX requirement)
|
||
|
*/
|
||
|
enum {
|
||
|
__ctype_upper = (1 << 0),
|
||
|
__ctype_lower = (1 << 1),
|
||
|
__ctype_digit = (1 << 2),
|
||
|
__ctype_xdigit = (1 << 3),
|
||
|
__ctype_space = (1 << 4),
|
||
|
__ctype_print = (1 << 5),
|
||
|
__ctype_punct = (1 << 6),
|
||
|
__ctype_cntrl = (1 << 7),
|
||
|
};
|
||
|
|
||
|
extern const unsigned char __ctypes[];
|
||
|
|
||
|
__ctype_inline int isalnum(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] &
|
||
|
(__ctype_upper|__ctype_lower|__ctype_digit);
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isalpha(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] &
|
||
|
(__ctype_upper|__ctype_lower);
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isascii(int __c)
|
||
|
{
|
||
|
return !(__c & ~0x7f);
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isblank(int __c)
|
||
|
{
|
||
|
return (__c == '\t') || (__c == ' ');
|
||
|
}
|
||
|
|
||
|
__ctype_inline int iscntrl(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_cntrl;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isdigit(int __c)
|
||
|
{
|
||
|
return ((unsigned)__c - '0') <= 9;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isgraph(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] &
|
||
|
(__ctype_upper|__ctype_lower|__ctype_digit|__ctype_punct);
|
||
|
}
|
||
|
|
||
|
__ctype_inline int islower(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_lower;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isprint(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_print;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int ispunct(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_punct;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isspace(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_space;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isupper(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_upper;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int isxdigit(int __c)
|
||
|
{
|
||
|
return __ctypes[__c+1] & __ctype_xdigit;
|
||
|
}
|
||
|
|
||
|
/* Note: this is decimal, not hex, to avoid accidental promotion to unsigned */
|
||
|
#define _toupper(__c) ((__c) & ~32)
|
||
|
#define _tolower(__c) ((__c) | 32)
|
||
|
|
||
|
__ctype_inline int toupper(int __c)
|
||
|
{
|
||
|
return islower(__c) ? _toupper(__c) : __c;
|
||
|
}
|
||
|
|
||
|
__ctype_inline int tolower(int __c)
|
||
|
{
|
||
|
return isupper(__c) ? _tolower(__c) : __c;
|
||
|
}
|
||
|
|
||
|
#endif /* _CTYPE_H */
|