162a2af07SWilly Tarreau /* SPDX-License-Identifier: LGPL-2.1 OR MIT */ 262a2af07SWilly Tarreau /* 362a2af07SWilly Tarreau * ctype function definitions for NOLIBC 462a2af07SWilly Tarreau * Copyright (C) 2017-2021 Willy Tarreau <w@1wt.eu> 562a2af07SWilly Tarreau */ 662a2af07SWilly Tarreau 762a2af07SWilly Tarreau #ifndef _NOLIBC_CTYPE_H 862a2af07SWilly Tarreau #define _NOLIBC_CTYPE_H 962a2af07SWilly Tarreau 1062a2af07SWilly Tarreau #include "std.h" 1162a2af07SWilly Tarreau 1262a2af07SWilly Tarreau /* 1362a2af07SWilly Tarreau * As much as possible, please keep functions alphabetically sorted. 1462a2af07SWilly Tarreau */ 1562a2af07SWilly Tarreau 1662a2af07SWilly Tarreau static __attribute__((unused)) isascii(int c)1750850c38SWilly Tarreauint isascii(int c) 1850850c38SWilly Tarreau { 1950850c38SWilly Tarreau /* 0x00..0x7f */ 2050850c38SWilly Tarreau return (unsigned int)c <= 0x7f; 2150850c38SWilly Tarreau } 2250850c38SWilly Tarreau 2350850c38SWilly Tarreau static __attribute__((unused)) isblank(int c)2450850c38SWilly Tarreauint isblank(int c) 2550850c38SWilly Tarreau { 2650850c38SWilly Tarreau return c == '\t' || c == ' '; 2750850c38SWilly Tarreau } 2850850c38SWilly Tarreau 2950850c38SWilly Tarreau static __attribute__((unused)) iscntrl(int c)3050850c38SWilly Tarreauint iscntrl(int c) 3150850c38SWilly Tarreau { 3250850c38SWilly Tarreau /* 0x00..0x1f, 0x7f */ 3350850c38SWilly Tarreau return (unsigned int)c < 0x20 || c == 0x7f; 3450850c38SWilly Tarreau } 3550850c38SWilly Tarreau 3650850c38SWilly Tarreau static __attribute__((unused)) isdigit(int c)3762a2af07SWilly Tarreauint isdigit(int c) 3862a2af07SWilly Tarreau { 3950850c38SWilly Tarreau return (unsigned int)(c - '0') < 10; 4050850c38SWilly Tarreau } 4150850c38SWilly Tarreau 4250850c38SWilly Tarreau static __attribute__((unused)) isgraph(int c)4350850c38SWilly Tarreauint isgraph(int c) 4450850c38SWilly Tarreau { 4550850c38SWilly Tarreau /* 0x21..0x7e */ 4650850c38SWilly Tarreau return (unsigned int)(c - 0x21) < 0x5e; 4750850c38SWilly Tarreau } 4850850c38SWilly Tarreau 4950850c38SWilly Tarreau static __attribute__((unused)) islower(int c)5050850c38SWilly Tarreauint islower(int c) 5150850c38SWilly Tarreau { 5250850c38SWilly Tarreau return (unsigned int)(c - 'a') < 26; 5350850c38SWilly Tarreau } 5450850c38SWilly Tarreau 5550850c38SWilly Tarreau static __attribute__((unused)) isprint(int c)5650850c38SWilly Tarreauint isprint(int c) 5750850c38SWilly Tarreau { 5850850c38SWilly Tarreau /* 0x20..0x7e */ 5950850c38SWilly Tarreau return (unsigned int)(c - 0x20) < 0x5f; 6050850c38SWilly Tarreau } 6150850c38SWilly Tarreau 6250850c38SWilly Tarreau static __attribute__((unused)) isspace(int c)6350850c38SWilly Tarreauint isspace(int c) 6450850c38SWilly Tarreau { 6550850c38SWilly Tarreau /* \t is 0x9, \n is 0xA, \v is 0xB, \f is 0xC, \r is 0xD */ 6650850c38SWilly Tarreau return ((unsigned int)c == ' ') || (unsigned int)(c - 0x09) < 5; 6750850c38SWilly Tarreau } 6850850c38SWilly Tarreau 6950850c38SWilly Tarreau static __attribute__((unused)) isupper(int c)7050850c38SWilly Tarreauint isupper(int c) 7150850c38SWilly Tarreau { 7250850c38SWilly Tarreau return (unsigned int)(c - 'A') < 26; 7350850c38SWilly Tarreau } 7450850c38SWilly Tarreau 7550850c38SWilly Tarreau static __attribute__((unused)) isxdigit(int c)7650850c38SWilly Tarreauint isxdigit(int c) 7750850c38SWilly Tarreau { 7850850c38SWilly Tarreau return isdigit(c) || (unsigned int)(c - 'A') < 6 || (unsigned int)(c - 'a') < 6; 7950850c38SWilly Tarreau } 8050850c38SWilly Tarreau 8150850c38SWilly Tarreau static __attribute__((unused)) isalpha(int c)8250850c38SWilly Tarreauint isalpha(int c) 8350850c38SWilly Tarreau { 8450850c38SWilly Tarreau return islower(c) || isupper(c); 8550850c38SWilly Tarreau } 8650850c38SWilly Tarreau 8750850c38SWilly Tarreau static __attribute__((unused)) isalnum(int c)8850850c38SWilly Tarreauint isalnum(int c) 8950850c38SWilly Tarreau { 9050850c38SWilly Tarreau return isalpha(c) || isdigit(c); 9150850c38SWilly Tarreau } 9250850c38SWilly Tarreau 9350850c38SWilly Tarreau static __attribute__((unused)) ispunct(int c)9450850c38SWilly Tarreauint ispunct(int c) 9550850c38SWilly Tarreau { 9650850c38SWilly Tarreau return isgraph(c) && !isalnum(c); 9762a2af07SWilly Tarreau } 9862a2af07SWilly Tarreau 99*55abdd1fSWilly Tarreau /* make sure to include all global symbols */ 100*55abdd1fSWilly Tarreau #include "nolibc.h" 101*55abdd1fSWilly Tarreau 10262a2af07SWilly Tarreau #endif /* _NOLIBC_CTYPE_H */ 103