tor  0.4.2.1-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-2019, The Tor Project, Inc. */
4 /* See LICENSE for licensing information */
5 
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  }
26 DECLARE_CTYPE_FN(ISALPHA)
27 DECLARE_CTYPE_FN(ISALNUM)
28 DECLARE_CTYPE_FN(ISSPACE)
29 DECLARE_CTYPE_FN(ISDIGIT)
30 DECLARE_CTYPE_FN(ISXDIGIT)
31 DECLARE_CTYPE_FN(ISPRINT)
32 DECLARE_CTYPE_FN(ISLOWER)
33 DECLARE_CTYPE_FN(ISUPPER)
34 extern const uint8_t TOR_TOUPPER_TABLE[];
35 extern 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 
39 static inline int hex_decode_digit(char c);
40 
42 static 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
Integer definitions used throughout Tor.
const uint8_t TOR_TOUPPER_TABLE[]
Definition: compat_ctype.c:36