123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <sys/cdefs.h>
- __BEGIN_DECLS
- #ifndef EOF
- # define EOF (-1)
- #endif
- /* Do what newlib does to appease GCC's --with-newlib option. */
- #define _U 01
- #define _L 02
- #define _N 04
- #define _S 010
- #define _P 020
- #define _C 040
- #define _X 0100
- #define _B 0200
- /**
- * newlib has a 257 byte _ctype_ array to enable compiler tricks to catch
- * people passing char instead of int. We don't engage in those tricks,
- * but still claim to be newlib to the toolchains
- */
- extern char const _ctype_[1 + 256] __attribute__((visibility("default")));
- static inline int __inline_isalnum(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_U | _L | _N);
- }
- static inline int __inline_isalpha(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_U | _L);
- }
- static inline int __inline_isascii(int c)
- {
- return (unsigned)c <= 127;
- }
- static inline int __inline_iscntrl(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_C);
- }
- static inline int __inline_isdigit(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_N);
- }
- static inline int __inline_isxdigit(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_N | _X);
- }
- static inline int __inline_isspace(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_S);
- }
- static inline int __inline_ispunct(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_P);
- }
- static inline int __inline_isprint(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_P | _U | _L | _N | _B);
- }
- static inline int __inline_isgraph(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_P | _U | _L | _N);
- }
- static inline int __inline_islower(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_L);
- }
- static inline int __inline_isupper(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_U);
- }
- static inline int __inline_isblank(int c)
- {
- return _ctype_[(unsigned char)(c) + 1] & (_B) || (c == '\t');
- }
- static inline int __inline_toascii(int c)
- {
- return c & 127;
- }
- static inline int __inline_tolower(int c)
- {
- if (c >= 'A' && c <= 'Z')
- return c | 0x20;
- return c;
- }
- static inline int __inline_toupper(int c)
- {
- if (c >= 'a' && c <= 'z')
- return c & ~0x20;
- return c;
- }
- #ifdef __cplusplus
- extern "C" {
- #endif
- int isalnum(int c);
- int isalpha(int c);
- int isascii(int c);
- int iscntrl(int c);
- int isdigit(int c);
- int isxdigit(int c);
- int isspace(int c);
- int ispunct(int c);
- int isprint(int c);
- int isgraph(int c);
- int islower(int c);
- int isupper(int c);
- int isblank(int c);
- int toascii(int c);
- int tolower(int c);
- int toupper(int c);
- #ifdef __cplusplus
- }
- #endif
- #define isalnum __inline_isalnum
- #define isalpha __inline_isalpha
- #define isascii __inline_isascii
- #define iscntrl __inline_iscntrl
- #define isdigit __inline_isdigit
- #define isxdigit __inline_isxdigit
- #define isspace __inline_isspace
- #define ispunct __inline_ispunct
- #define isprint __inline_isprint
- #define isgraph __inline_isgraph
- #define islower __inline_islower
- #define isupper __inline_isupper
- #define isblank __inline_isblank
- #define toascii __inline_toascii
- #define tolower __inline_tolower
- #define toupper __inline_toupper
- __END_DECLS
|