1 /* 2 * Copyright 2017-2022 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 # include <openssl/e_os2.h> 26 27 # define CTYPE_MASK_lower 0x1 28 # define CTYPE_MASK_upper 0x2 29 # define CTYPE_MASK_digit 0x4 30 # define CTYPE_MASK_space 0x8 31 # define CTYPE_MASK_xdigit 0x10 32 # define CTYPE_MASK_blank 0x20 33 # define CTYPE_MASK_cntrl 0x40 34 # define CTYPE_MASK_graph 0x80 35 # define CTYPE_MASK_print 0x100 36 # define CTYPE_MASK_punct 0x200 37 # define CTYPE_MASK_base64 0x400 38 # define CTYPE_MASK_asn1print 0x800 39 40 # define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper) 41 # define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit) 42 43 /* 44 * The ascii mask assumes that any other classification implies that 45 * the character is ASCII and that there are no ASCII characters 46 * that aren't in any of the classifications. 47 * 48 * This assumption holds at the moment, but it might not in the future. 49 */ 50 # define CTYPE_MASK_ascii (~0) 51 52 # ifdef CHARSET_EBCDIC 53 int ossl_toascii(int c); 54 int ossl_fromascii(int c); 55 # else 56 # define ossl_toascii(c) (c) 57 # define ossl_fromascii(c) (c) 58 # endif 59 int ossl_ctype_check(int c, unsigned int mask); 60 61 int ossl_tolower(int c); 62 int ossl_toupper(int c); 63 64 int ossl_isdigit(int c); 65 int ossl_islower(int c); 66 int ossl_isupper(int c); 67 68 int ossl_ascii_isdigit(int c); 69 70 # define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) 71 # define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) 72 # ifdef CHARSET_EBCDIC 73 # define ossl_isascii(c) (ossl_ctype_check((c), CTYPE_MASK_ascii)) 74 # else 75 # define ossl_isascii(c) (((c) & ~127) == 0) 76 # endif 77 # define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) 78 # define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) 79 # define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) 80 # define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) 81 # define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) 82 # define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) 83 # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) 84 # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) 85 # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) 86 #endif 87