|  |  | varnish-cache/lib/libvarnish/vct.c | 
|---|
| 0 |  | /*- | 
| 1 |  |  * Copyright (c) 2006-2010 Varnish Software AS | 
| 2 |  |  * All rights reserved. | 
| 3 |  |  * | 
| 4 |  |  * Author: Poul-Henning Kamp <phk@phk.freebsd.dk> | 
| 5 |  |  * | 
| 6 |  |  * SPDX-License-Identifier: BSD-2-Clause | 
| 7 |  |  * | 
| 8 |  |  * Redistribution and use in source and binary forms, with or without | 
| 9 |  |  * modification, are permitted provided that the following conditions | 
| 10 |  |  * are met: | 
| 11 |  |  * 1. Redistributions of source code must retain the above copyright | 
| 12 |  |  *    notice, this list of conditions and the following disclaimer. | 
| 13 |  |  * 2. Redistributions in binary form must reproduce the above copyright | 
| 14 |  |  *    notice, this list of conditions and the following disclaimer in the | 
| 15 |  |  *    documentation and/or other materials provided with the distribution. | 
| 16 |  |  * | 
| 17 |  |  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | 
| 18 |  |  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 19 |  |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| 20 |  |  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE | 
| 21 |  |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
| 22 |  |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
| 23 |  |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
| 24 |  |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
| 25 |  |  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 26 |  |  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 27 |  |  * SUCH DAMAGE. | 
| 28 |  |  * | 
| 29 |  |  * ctype(3) like functions, according to RFC2616 | 
| 30 |  |  */ | 
| 31 |  |  | 
| 32 |  | #include "config.h" | 
| 33 |  |  | 
| 34 |  | #include <sys/types.h> | 
| 35 |  |  | 
| 36 |  | #include <stdlib.h> | 
| 37 |  | #include <stdint.h> | 
| 38 |  | #include <string.h> | 
| 39 |  |  | 
| 40 |  | #include "vdef.h" | 
| 41 |  |  | 
| 42 |  | #include "vas.h" | 
| 43 |  | #include "vct.h" | 
| 44 |  |  | 
| 45 |  | /* NB: VCT always operate in ASCII, don't replace 0x0d with \r etc. */ | 
| 46 |  |  | 
| 47 |  | #define VCT_UPALPHA     (VCT_ALPHA | VCT_UPPER | VCT_BASE64) | 
| 48 |  | #define VCT_LOALPHA     (VCT_ALPHA | VCT_LOWER | VCT_BASE64) | 
| 49 |  |  | 
| 50 |  | const uint16_t vct_typtab[256] = { | 
| 51 |  |         [0x00]  =       VCT_CTL, | 
| 52 |  |         [0x01]  =       VCT_CTL, | 
| 53 |  |         [0x02]  =       VCT_CTL, | 
| 54 |  |         [0x03]  =       VCT_CTL, | 
| 55 |  |         [0x04]  =       VCT_CTL, | 
| 56 |  |         [0x05]  =       VCT_CTL, | 
| 57 |  |         [0x06]  =       VCT_CTL, | 
| 58 |  |         [0x07]  =       VCT_CTL, | 
| 59 |  |         [0x08]  =       VCT_CTL, | 
| 60 |  |         [0x09]  =       VCT_CTL | VCT_OWS, | 
| 61 |  |         [0x0a]  =       VCT_CTL | VCT_CRLF, | 
| 62 |  |         [0x0b]  =       VCT_CTL | VCT_VT, | 
| 63 |  |         [0x0c]  =       VCT_CTL, | 
| 64 |  |         [0x0d]  =       VCT_CTL | VCT_CRLF, | 
| 65 |  |         [0x0e]  =       VCT_CTL, | 
| 66 |  |         [0x0f]  =       VCT_CTL, | 
| 67 |  |         [0x10]  =       VCT_CTL, | 
| 68 |  |         [0x11]  =       VCT_CTL, | 
| 69 |  |         [0x12]  =       VCT_CTL, | 
| 70 |  |         [0x13]  =       VCT_CTL, | 
| 71 |  |         [0x14]  =       VCT_CTL, | 
| 72 |  |         [0x15]  =       VCT_CTL, | 
| 73 |  |         [0x16]  =       VCT_CTL, | 
| 74 |  |         [0x17]  =       VCT_CTL, | 
| 75 |  |         [0x18]  =       VCT_CTL, | 
| 76 |  |         [0x19]  =       VCT_CTL, | 
| 77 |  |         [0x1a]  =       VCT_CTL, | 
| 78 |  |         [0x1b]  =       VCT_CTL, | 
| 79 |  |         [0x1c]  =       VCT_CTL, | 
| 80 |  |         [0x1d]  =       VCT_CTL, | 
| 81 |  |         [0x1e]  =       VCT_CTL, | 
| 82 |  |         [0x1f]  =       VCT_CTL, | 
| 83 |  |         [0x20]  =       VCT_OWS, | 
| 84 |  |         [0x21]  =       VCT_TCHAR, | 
| 85 |  |         [0x22]  =       VCT_SEPARATOR, | 
| 86 |  |         [0x23]  =       VCT_TCHAR, | 
| 87 |  |         [0x24]  =       VCT_TCHAR, | 
| 88 |  |         [0x25]  =       VCT_TCHAR, | 
| 89 |  |         [0x26]  =       VCT_TCHAR, | 
| 90 |  |         [0x27]  =       VCT_TCHAR, | 
| 91 |  |         [0x28]  =       VCT_SEPARATOR, | 
| 92 |  |         [0x29]  =       VCT_SEPARATOR, | 
| 93 |  |         [0x2a]  =       VCT_TCHAR, | 
| 94 |  |         [0x2b]  =       VCT_TCHAR | VCT_BASE64, | 
| 95 |  |         [0x2c]  =       VCT_SEPARATOR, | 
| 96 |  |         [0x2d]  =       VCT_XMLNAME | VCT_TCHAR | VCT_ID, | 
| 97 |  |         [0x2e]  =       VCT_XMLNAME | VCT_TCHAR, | 
| 98 |  |         [0x2f]  =       VCT_SEPARATOR | VCT_BASE64, | 
| 99 |  |         [0x30]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 100 |  |         [0x31]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 101 |  |         [0x32]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 102 |  |         [0x33]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 103 |  |         [0x34]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 104 |  |         [0x35]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 105 |  |         [0x36]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 106 |  |         [0x37]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 107 |  |         [0x38]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 108 |  |         [0x39]  =       VCT_DIGIT | VCT_HEX | VCT_XMLNAME | VCT_BASE64, | 
| 109 |  |         [0x3a]  =       VCT_SEPARATOR | VCT_XMLNAMESTART, | 
| 110 |  |         [0x3b]  =       VCT_SEPARATOR, | 
| 111 |  |         [0x3c]  =       VCT_SEPARATOR, | 
| 112 |  |         [0x3d]  =       VCT_SEPARATOR | VCT_BASE64, | 
| 113 |  |         [0x3e]  =       VCT_SEPARATOR, | 
| 114 |  |         [0x3f]  =       VCT_SEPARATOR, | 
| 115 |  |         [0x40]  =       VCT_SEPARATOR, | 
| 116 |  |         [0x41]  =       VCT_UPALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 117 |  |         [0x42]  =       VCT_UPALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 118 |  |         [0x43]  =       VCT_UPALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 119 |  |         [0x44]  =       VCT_UPALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 120 |  |         [0x45]  =       VCT_UPALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 121 |  |         [0x46]  =       VCT_UPALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 122 |  |         [0x47]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 123 |  |         [0x48]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 124 |  |         [0x49]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 125 |  |         [0x4a]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 126 |  |         [0x4b]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 127 |  |         [0x4c]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 128 |  |         [0x4d]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 129 |  |         [0x4e]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 130 |  |         [0x4f]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 131 |  |         [0x50]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 132 |  |         [0x51]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 133 |  |         [0x52]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 134 |  |         [0x53]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 135 |  |         [0x54]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 136 |  |         [0x55]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 137 |  |         [0x56]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 138 |  |         [0x57]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 139 |  |         [0x58]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 140 |  |         [0x59]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 141 |  |         [0x5a]  =       VCT_UPALPHA | VCT_XMLNAMESTART, | 
| 142 |  |         [0x5b]  =       VCT_SEPARATOR, | 
| 143 |  |         [0x5c]  =       VCT_SEPARATOR, | 
| 144 |  |         [0x5d]  =       VCT_SEPARATOR, | 
| 145 |  |         [0x5e]  =       VCT_TCHAR, | 
| 146 |  |         [0x5f]  =       VCT_XMLNAMESTART | VCT_TCHAR | VCT_ID, | 
| 147 |  |         [0x60]  =       VCT_TCHAR, | 
| 148 |  |         [0x61]  =       VCT_LOALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 149 |  |         [0x62]  =       VCT_LOALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 150 |  |         [0x63]  =       VCT_LOALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 151 |  |         [0x64]  =       VCT_LOALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 152 |  |         [0x65]  =       VCT_LOALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 153 |  |         [0x66]  =       VCT_LOALPHA | VCT_HEX | VCT_XMLNAMESTART, | 
| 154 |  |         [0x67]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 155 |  |         [0x68]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 156 |  |         [0x69]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 157 |  |         [0x6a]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 158 |  |         [0x6b]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 159 |  |         [0x6c]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 160 |  |         [0x6d]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 161 |  |         [0x6e]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 162 |  |         [0x6f]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 163 |  |         [0x70]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 164 |  |         [0x71]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 165 |  |         [0x72]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 166 |  |         [0x73]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 167 |  |         [0x74]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 168 |  |         [0x75]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 169 |  |         [0x76]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 170 |  |         [0x77]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 171 |  |         [0x78]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 172 |  |         [0x79]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 173 |  |         [0x7a]  =       VCT_LOALPHA | VCT_XMLNAMESTART, | 
| 174 |  |         [0x7b]  =       VCT_SEPARATOR, | 
| 175 |  |         [0x7c]  =       VCT_TCHAR, | 
| 176 |  |         [0x7d]  =       VCT_SEPARATOR, | 
| 177 |  |         [0x7e]  =       VCT_TCHAR, | 
| 178 |  |         [0x7f]  =       VCT_CTL, | 
| 179 |  |         [0xb7]  =       VCT_XMLNAME, | 
| 180 |  |         [0xc0]  =       VCT_XMLNAMESTART, | 
| 181 |  |         [0xc1]  =       VCT_XMLNAMESTART, | 
| 182 |  |         [0xc2]  =       VCT_XMLNAMESTART, | 
| 183 |  |         [0xc3]  =       VCT_XMLNAMESTART, | 
| 184 |  |         [0xc4]  =       VCT_XMLNAMESTART, | 
| 185 |  |         [0xc5]  =       VCT_XMLNAMESTART, | 
| 186 |  |         [0xc6]  =       VCT_XMLNAMESTART, | 
| 187 |  |         [0xc7]  =       VCT_XMLNAMESTART, | 
| 188 |  |         [0xc8]  =       VCT_XMLNAMESTART, | 
| 189 |  |         [0xc9]  =       VCT_XMLNAMESTART, | 
| 190 |  |         [0xca]  =       VCT_XMLNAMESTART, | 
| 191 |  |         [0xcb]  =       VCT_XMLNAMESTART, | 
| 192 |  |         [0xcc]  =       VCT_XMLNAMESTART, | 
| 193 |  |         [0xcd]  =       VCT_XMLNAMESTART, | 
| 194 |  |         [0xce]  =       VCT_XMLNAMESTART, | 
| 195 |  |         [0xcf]  =       VCT_XMLNAMESTART, | 
| 196 |  |         [0xd0]  =       VCT_XMLNAMESTART, | 
| 197 |  |         [0xd1]  =       VCT_XMLNAMESTART, | 
| 198 |  |         [0xd2]  =       VCT_XMLNAMESTART, | 
| 199 |  |         [0xd3]  =       VCT_XMLNAMESTART, | 
| 200 |  |         [0xd4]  =       VCT_XMLNAMESTART, | 
| 201 |  |         [0xd5]  =       VCT_XMLNAMESTART, | 
| 202 |  |         [0xd6]  =       VCT_XMLNAMESTART, | 
| 203 |  |         [0xd8]  =       VCT_XMLNAMESTART, | 
| 204 |  |         [0xd9]  =       VCT_XMLNAMESTART, | 
| 205 |  |         [0xda]  =       VCT_XMLNAMESTART, | 
| 206 |  |         [0xdb]  =       VCT_XMLNAMESTART, | 
| 207 |  |         [0xdc]  =       VCT_XMLNAMESTART, | 
| 208 |  |         [0xdd]  =       VCT_XMLNAMESTART, | 
| 209 |  |         [0xde]  =       VCT_XMLNAMESTART, | 
| 210 |  |         [0xdf]  =       VCT_XMLNAMESTART, | 
| 211 |  |         [0xe0]  =       VCT_XMLNAMESTART, | 
| 212 |  |         [0xe1]  =       VCT_XMLNAMESTART, | 
| 213 |  |         [0xe2]  =       VCT_XMLNAMESTART, | 
| 214 |  |         [0xe3]  =       VCT_XMLNAMESTART, | 
| 215 |  |         [0xe4]  =       VCT_XMLNAMESTART, | 
| 216 |  |         [0xe5]  =       VCT_XMLNAMESTART, | 
| 217 |  |         [0xe6]  =       VCT_XMLNAMESTART, | 
| 218 |  |         [0xe7]  =       VCT_XMLNAMESTART, | 
| 219 |  |         [0xe8]  =       VCT_XMLNAMESTART, | 
| 220 |  |         [0xe9]  =       VCT_XMLNAMESTART, | 
| 221 |  |         [0xea]  =       VCT_XMLNAMESTART, | 
| 222 |  |         [0xeb]  =       VCT_XMLNAMESTART, | 
| 223 |  |         [0xec]  =       VCT_XMLNAMESTART, | 
| 224 |  |         [0xed]  =       VCT_XMLNAMESTART, | 
| 225 |  |         [0xee]  =       VCT_XMLNAMESTART, | 
| 226 |  |         [0xef]  =       VCT_XMLNAMESTART, | 
| 227 |  |         [0xf0]  =       VCT_XMLNAMESTART, | 
| 228 |  |         [0xf1]  =       VCT_XMLNAMESTART, | 
| 229 |  |         [0xf2]  =       VCT_XMLNAMESTART, | 
| 230 |  |         [0xf3]  =       VCT_XMLNAMESTART, | 
| 231 |  |         [0xf4]  =       VCT_XMLNAMESTART, | 
| 232 |  |         [0xf5]  =       VCT_XMLNAMESTART, | 
| 233 |  |         [0xf6]  =       VCT_XMLNAMESTART, | 
| 234 |  |         [0xf8]  =       VCT_XMLNAMESTART, | 
| 235 |  |         [0xf9]  =       VCT_XMLNAMESTART, | 
| 236 |  |         [0xfa]  =       VCT_XMLNAMESTART, | 
| 237 |  |         [0xfb]  =       VCT_XMLNAMESTART, | 
| 238 |  |         [0xfc]  =       VCT_XMLNAMESTART, | 
| 239 |  |         [0xfd]  =       VCT_XMLNAMESTART, | 
| 240 |  |         [0xfe]  =       VCT_XMLNAMESTART, | 
| 241 |  |         [0xff]  =       VCT_XMLNAMESTART, | 
| 242 |  | }; | 
| 243 |  |  | 
| 244 |  | const uint8_t vct_lowertab[256] = { | 
| 245 |  |         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 0x00 | 
| 246 |  |         0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, // 0x08 | 
| 247 |  |         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, // 0x10 | 
| 248 |  |         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, // 0x18 | 
| 249 |  |         0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, // 0x20 | 
| 250 |  |         0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, // 0x28 | 
| 251 |  |         0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // 0x30 | 
| 252 |  |         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, // 0x38 | 
| 253 |  |         0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, // 0x40 | 
| 254 |  |         0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, // 0x48 | 
| 255 |  |         0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, // 0x50 | 
| 256 |  |         0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, // 0x58 | 
| 257 |  |         0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, // 0x60 | 
| 258 |  |         0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, // 0x68 | 
| 259 |  |         0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, // 0x70 | 
| 260 |  |         0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, // 0x78 | 
| 261 |  |         0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, // 0x80 | 
| 262 |  |         0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, // 0x88 | 
| 263 |  |         0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, // 0x90 | 
| 264 |  |         0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, // 0x98 | 
| 265 |  |         0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, // 0xa0 | 
| 266 |  |         0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, // 0xa8 | 
| 267 |  |         0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, // 0xb0 | 
| 268 |  |         0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, // 0xb8 | 
| 269 |  |         0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, // 0xc0 | 
| 270 |  |         0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, // 0xc8 | 
| 271 |  |         0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, // 0xd0 | 
| 272 |  |         0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, // 0xd8 | 
| 273 |  |         0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, // 0xe0 | 
| 274 |  |         0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, // 0xe8 | 
| 275 |  |         0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, // 0xf0 | 
| 276 |  |         0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, // 0xf8 | 
| 277 |  | }; | 
| 278 |  |  | 
| 279 |  | const char * | 
| 280 | 215312 | VCT_invalid_name(const char *b, const char *e) | 
| 281 |  | { | 
| 282 |  |  | 
| 283 | 215312 |         AN(b); | 
| 284 | 215312 |         if (e == NULL) | 
| 285 | 109349 |                 e = strchr(b, '\0'); | 
| 286 | 215312 |         assert(b < e); | 
| 287 |  |  | 
| 288 | 215312 |         if (!vct_isident1(*b)) | 
| 289 | 3 |                 return (b); | 
| 290 |  |  | 
| 291 | 5499203 |         for (; b < e; b++) | 
| 292 | 5283897 |                 if (!vct_isident(*b)) | 
| 293 | 3 |                         return (b); | 
| 294 |  |  | 
| 295 | 215306 |         return (NULL); | 
| 296 | 215312 | } | 
| 297 |  |  | 
| 298 |  | #ifdef TEST_DRIVER | 
| 299 |  |  | 
| 300 |  | #include <ctype.h> | 
| 301 |  | #include <locale.h> | 
| 302 |  |  | 
| 303 |  | int | 
| 304 | 1 | main(int argc, char **argv) | 
| 305 |  | { | 
| 306 |  |         int i; | 
| 307 |  |         const char *p; | 
| 308 |  |  | 
| 309 | 1 |         (void)argc; | 
| 310 | 1 |         (void)argv; | 
| 311 |  |  | 
| 312 | 1 |         AN(setlocale(LC_ALL, "C")); | 
| 313 |  |  | 
| 314 | 1 |         p = ""; | 
| 315 | 1 |         assert(vct_iscrlf(p, p) == 0); | 
| 316 |  |  | 
| 317 | 96 |         for (i = 0x20; i < 0x7f; i++) | 
| 318 | 95 |                 assert(vct_lowertab[i] == tolower(i)); | 
| 319 |  |  | 
| 320 | 1 |         assert(vct_casecmp("AZaz", "azAZ") == 0); | 
| 321 | 1 |         assert(vct_casecmp("AZaz", "azAY") > 0); | 
| 322 | 1 |         assert(vct_casecmp("AZay", "azAZ") < 0); | 
| 323 | 1 |         assert(vct_casecmp("AZaz_", "azAZ") > 0); | 
| 324 | 1 |         assert(vct_casecmp("AZaz", "azAZ_") < 0); | 
| 325 | 1 |         assert(vct_casecmp("", "") == 0); | 
| 326 |  |  | 
| 327 | 1 |         assert(vct_caselencmp("AZaz_", "azAZ", 4) == 0); | 
| 328 | 1 |         assert(vct_caselencmp("AZaz", "azAZ_", 4) == 0); | 
| 329 |  |  | 
| 330 | 1 |         assert(vct_caselencmp("AZaz1", "azAZ1", 4) == 0); | 
| 331 | 1 |         assert(vct_caselencmp("AZaz1", "azAY1", 4) > 0); | 
| 332 | 1 |         assert(vct_caselencmp("AZay1", "azAZ1", 4) < 0); | 
| 333 |  |  | 
| 334 | 1 |         assert(vct_caselencmp("AZaz", "azAZ", 5) == 0); | 
| 335 | 1 |         assert(vct_caselencmp("AZaz ", "azAY", 5) > 0); | 
| 336 | 1 |         assert(vct_caselencmp("AZay ", "azAZ", 5) < 0); | 
| 337 |  |  | 
| 338 | 1 |         assert(vct_caselencmp("AZaz", "azAZ1", 5) < 0); | 
| 339 | 1 |         assert(vct_caselencmp("AZaz1", "azAZ", 5) > 0); | 
| 340 |  |  | 
| 341 |  |  | 
| 342 | 1 |         assert(vct_caselencmp("A", "B", 0) == 0); | 
| 343 |  |  | 
| 344 | 1 |         return (0); | 
| 345 |  | } | 
| 346 |  |  | 
| 347 |  | #endif /* TEST_DRIVER */ |