| | 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 |
8454360 |
VCT_invalid_name(const char *b, const char *e) |
281 |
|
{ |
282 |
|
|
283 |
8454360 |
AN(b); |
284 |
8454360 |
if (e == NULL) |
285 |
4293960 |
e = strchr(b, '\0'); |
286 |
8454360 |
assert(b < e); |
287 |
|
|
288 |
8454360 |
if (!vct_isident1(*b)) |
289 |
120 |
return (b); |
290 |
|
|
291 |
215916520 |
for (; b < e; b++) |
292 |
207462400 |
if (!vct_isident(*b)) |
293 |
120 |
return (b); |
294 |
|
|
295 |
8454120 |
return (NULL); |
296 |
8454360 |
} |
297 |
|
|
298 |
|
#ifdef TEST_DRIVER |
299 |
|
|
300 |
|
#include <ctype.h> |
301 |
|
#include <locale.h> |
302 |
|
|
303 |
|
int |
304 |
40 |
main(int argc, char **argv) |
305 |
|
{ |
306 |
|
int i; |
307 |
|
const char *p; |
308 |
|
|
309 |
40 |
(void)argc; |
310 |
40 |
(void)argv; |
311 |
|
|
312 |
40 |
AN(setlocale(LC_ALL, "C")); |
313 |
|
|
314 |
40 |
p = ""; |
315 |
40 |
assert(vct_iscrlf(p, p) == 0); |
316 |
|
|
317 |
3840 |
for (i = 0x20; i < 0x7f; i++) |
318 |
3800 |
assert(vct_lowertab[i] == tolower(i)); |
319 |
|
|
320 |
40 |
assert(vct_casecmp("AZaz", "azAZ") == 0); |
321 |
40 |
assert(vct_casecmp("AZaz", "azAY") > 0); |
322 |
40 |
assert(vct_casecmp("AZay", "azAZ") < 0); |
323 |
40 |
assert(vct_casecmp("AZaz_", "azAZ") > 0); |
324 |
40 |
assert(vct_casecmp("AZaz", "azAZ_") < 0); |
325 |
40 |
assert(vct_casecmp("", "") == 0); |
326 |
|
|
327 |
40 |
assert(vct_caselencmp("AZaz_", "azAZ", 4) == 0); |
328 |
40 |
assert(vct_caselencmp("AZaz", "azAZ_", 4) == 0); |
329 |
|
|
330 |
40 |
assert(vct_caselencmp("AZaz1", "azAZ1", 4) == 0); |
331 |
40 |
assert(vct_caselencmp("AZaz1", "azAY1", 4) > 0); |
332 |
40 |
assert(vct_caselencmp("AZay1", "azAZ1", 4) < 0); |
333 |
|
|
334 |
40 |
assert(vct_caselencmp("AZaz", "azAZ", 5) == 0); |
335 |
40 |
assert(vct_caselencmp("AZaz ", "azAY", 5) > 0); |
336 |
40 |
assert(vct_caselencmp("AZay ", "azAZ", 5) < 0); |
337 |
|
|
338 |
40 |
assert(vct_caselencmp("AZaz", "azAZ1", 5) < 0); |
339 |
40 |
assert(vct_caselencmp("AZaz1", "azAZ", 5) > 0); |
340 |
|
|
341 |
|
|
342 |
40 |
assert(vct_caselencmp("A", "B", 0) == 0); |
343 |
|
|
344 |
40 |
return (0); |
345 |
|
} |
346 |
|
|
347 |
|
#endif /* TEST_DRIVER */ |