1 /* 2 * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 /* 11 * This version of ctype.h provides a standardised and platform 12 * independent implementation that supports seven bit ASCII characters. 13 * The specific intent is to not pass extended ASCII characters (> 127) 14 * even if the host operating system would. 15 * 16 * There is EBCDIC support included for machines which use this. However, 17 * there are a number of concerns about how well EBCDIC is supported 18 * throughout the rest of the source code. Refer to issue #4154 for 19 * details. 20 */ 21 #ifndef OSSL_CRYPTO_CTYPE_H 22 # define OSSL_CRYPTO_CTYPE_H 23 # pragma once 24 25 # define CTYPE_MASK_lower 0x1 26 # define CTYPE_MASK_upper 0x2 27 # define CTYPE_MASK_digit 0x4 28 # define CTYPE_MASK_space 0x8 29 # define CTYPE_MASK_xdigit 0x10 30 # define CTYPE_MASK_blank 0x20 31 # define CTYPE_MASK_cntrl 0x40 32 # define CTYPE_MASK_graph 0x80 33 # define CTYPE_MASK_print 0x100 34 # define CTYPE_MASK_punct 0x200 35 # define CTYPE_MASK_base64 0x400 36 # define CTYPE_MASK_asn1print 0x800 37 38 # define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper) 39 # define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit) 40 41 /* 42 * The ascii mask assumes that any other classification implies that 43 * the character is ASCII and that there are no ASCII characters 44 * that aren't in any of the classifications. 45 * 46 * This assumption holds at the moment, but it might not in the future. 47 */ 48 # define CTYPE_MASK_ascii (~0) 49 50 # ifdef CHARSET_EBCDIC 51 int ossl_toascii(int c); 52 int ossl_fromascii(int c); 53 # else 54 # define ossl_toascii(c) (c) 55 # define ossl_fromascii(c) (c) 56 # endif 57 int ossl_ctype_check(int c, unsigned int mask); 58 int ossl_tolower(int c); 59 int ossl_toupper(int c); 60 61 int ossl_ascii_isdigit(const char inchar); 62 63 # define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) 64 # define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) 65 # ifdef CHARSET_EBCDIC 66 # define ossl_isascii(c) (ossl_ctype_check((c), CTYPE_MASK_ascii)) 67 # else 68 # define ossl_isascii(c) (((c) & ~127) == 0) 69 # endif 70 # define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) 71 # define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) 72 # define ossl_isdigit(c) (ossl_ctype_check((c), CTYPE_MASK_digit)) 73 # define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) 74 # define ossl_islower(c) (ossl_ctype_check((c), CTYPE_MASK_lower)) 75 # define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) 76 # define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) 77 # define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) 78 # define ossl_isupper(c) (ossl_ctype_check((c), CTYPE_MASK_upper)) 79 # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) 80 # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) 81 # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) 82 83 #endif 84