File: ctype.h

package info (click to toggle)
openssl 3.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 146,996 kB
  • sloc: ansic: 652,495; perl: 247,872; asm: 6,332; sh: 1,681; pascal: 997; python: 648; makefile: 551; lisp: 35; ruby: 16; cpp: 10; sed: 6
file content (86 lines) | stat: -rw-r--r-- 2,952 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

/*
 * This version of ctype.h provides a standardised and platform
 * independent implementation that supports seven bit ASCII characters.
 * The specific intent is to not pass extended ASCII characters (> 127)
 * even if the host operating system would.
 *
 * There is EBCDIC support included for machines which use this.  However,
 * there are a number of concerns about how well EBCDIC is supported
 * throughout the rest of the source code.  Refer to issue #4154 for
 * details.
 */
#ifndef OSSL_CRYPTO_CTYPE_H
#define OSSL_CRYPTO_CTYPE_H
#pragma once

#include <openssl/e_os2.h>

#define CTYPE_MASK_lower 0x1
#define CTYPE_MASK_upper 0x2
#define CTYPE_MASK_digit 0x4
#define CTYPE_MASK_space 0x8
#define CTYPE_MASK_xdigit 0x10
#define CTYPE_MASK_blank 0x20
#define CTYPE_MASK_cntrl 0x40
#define CTYPE_MASK_graph 0x80
#define CTYPE_MASK_print 0x100
#define CTYPE_MASK_punct 0x200
#define CTYPE_MASK_base64 0x400
#define CTYPE_MASK_asn1print 0x800

#define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
#define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit)

/*
 * The ascii mask assumes that any other classification implies that
 * the character is ASCII and that there are no ASCII characters
 * that aren't in any of the classifications.
 *
 * This assumption holds at the moment, but it might not in the future.
 */
#define CTYPE_MASK_ascii (~0)

#ifdef CHARSET_EBCDIC
int ossl_toascii(int c);
int ossl_fromascii(int c);
#else
#define ossl_toascii(c) (c)
#define ossl_fromascii(c) (c)
#endif
int ossl_ctype_check(int c, unsigned int mask);

int ossl_tolower(int c);
int ossl_toupper(int c);

int ossl_isdigit(int c);
int ossl_islower(int c);
int ossl_isupper(int c);

int ossl_ascii_isdigit(int c);

#define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum))
#define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha))
#ifdef CHARSET_EBCDIC
#define ossl_isascii(c) (ossl_ctype_check((c), CTYPE_MASK_ascii))
#else
#define ossl_isascii(c) (((c) & ~127) == 0)
#endif
#define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank))
#define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl))
#define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph))
#define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print))
#define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct))
#define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space))
#define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit))
#define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64))
#define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print))
#endif