Tor 0.4.9.0-alpha-dev
compat_ctype.h
Go to the documentation of this file.
1/* Copyright (c) 2003-2004, Roger Dingledine
2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
3 * Copyright (c) 2007-2021, The Tor Project, Inc. */
4/* See LICENSE for licensing information */
5
6/**
7 * \file compat_ctype.h
8 * \brief Locale-independent character-type inspection (header)
9 **/
10
11#ifndef TOR_COMPAT_CTYPE_H
12#define TOR_COMPAT_CTYPE_H
13
14#include "orconfig.h"
15#include "lib/cc/torint.h"
16
17/* Much of the time when we're checking ctypes, we're doing spec compliance,
18 * which all assumes we're doing ASCII. */
19#define DECLARE_CTYPE_FN(name) \
20 static int TOR_##name(char c); \
21 extern const uint32_t TOR_##name##_TABLE[]; \
22 static inline int TOR_##name(char c) { \
23 uint8_t u = c; \
24 return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1u << (u & 31))); \
25 }
26DECLARE_CTYPE_FN(ISALPHA)
27DECLARE_CTYPE_FN(ISALNUM)
28DECLARE_CTYPE_FN(ISSPACE)
29DECLARE_CTYPE_FN(ISDIGIT)
30DECLARE_CTYPE_FN(ISXDIGIT)
31DECLARE_CTYPE_FN(ISPRINT)
32DECLARE_CTYPE_FN(ISLOWER)
33DECLARE_CTYPE_FN(ISUPPER)
34extern const uint8_t TOR_TOUPPER_TABLE[];
35extern const uint8_t TOR_TOLOWER_TABLE[];
36#define TOR_TOLOWER(c) (TOR_TOLOWER_TABLE[(uint8_t)c])
37#define TOR_TOUPPER(c) (TOR_TOUPPER_TABLE[(uint8_t)c])
38
39static inline int hex_decode_digit(char c);
40
41/** Helper: given a hex digit, return its value, or -1 if it isn't hex. */
42static inline int
44{
45 switch (c) {
46 case '0': return 0;
47 case '1': return 1;
48 case '2': return 2;
49 case '3': return 3;
50 case '4': return 4;
51 case '5': return 5;
52 case '6': return 6;
53 case '7': return 7;
54 case '8': return 8;
55 case '9': return 9;
56 case 'A': case 'a': return 10;
57 case 'B': case 'b': return 11;
58 case 'C': case 'c': return 12;
59 case 'D': case 'd': return 13;
60 case 'E': case 'e': return 14;
61 case 'F': case 'f': return 15;
62 default:
63 return -1;
64 }
65}
66
67#endif /* !defined(TOR_COMPAT_CTYPE_H) */
static int hex_decode_digit(char c)
Definition: compat_ctype.h:43
const uint8_t TOR_TOUPPER_TABLE[]
Definition: compat_ctype.c:37
Integer definitions used throughout Tor.