]> code.delx.au - refind/blob - filesystems/fsw_strfunc.h
263999773393fa000726a73407cd96a96dab991b
[refind] / filesystems / fsw_strfunc.h
1 /* fsw_strfunc.h generated by mk_fsw_strfunc.py */
2
3 static int fsw_streq_ISO88591_UTF8(void *s1data, void *s2data, int len)
4 {
5 int i;
6 fsw_u8 *p1 = (fsw_u8 *)s1data;
7 fsw_u8 *p2 = (fsw_u8 *)s2data;
8 fsw_u32 c1, c2;
9
10 for (i = 0; i < len; i++) {
11 c1 = *p1++;
12 c2 = *p2++;
13 if ((c2 & 0xe0) == 0xc0) {
14 c2 = ((c2 & 0x1f) << 6) | (*p2++ & 0x3f);
15 } else if ((c2 & 0xf0) == 0xe0) {
16 c2 = ((c2 & 0x0f) << 12) | ((*p2++ & 0x3f) << 6);
17 c2 |= (*p2++ & 0x3f);
18 } else if ((c2 & 0xf8) == 0xf0) {
19 c2 = ((c2 & 0x07) << 18) | ((*p2++ & 0x3f) << 12);
20 c2 |= ((*p2++ & 0x3f) << 6);
21 c2 |= (*p2++ & 0x3f);
22 }
23 if (c1 != c2)
24 return 0;
25 }
26 return 1;
27 }
28
29 static int fsw_streq_ISO88591_UTF16(void *s1data, void *s2data, int len)
30 {
31 int i;
32 fsw_u8 *p1 = (fsw_u8 *)s1data;
33 fsw_u16 *p2 = (fsw_u16 *)s2data;
34 fsw_u32 c1, c2;
35
36 for (i = 0; i < len; i++) {
37 c1 = *p1++;
38 c2 = *p2++;
39 if (c1 != c2)
40 return 0;
41 }
42 return 1;
43 }
44
45 static int fsw_streq_ISO88591_UTF16_SWAPPED(void *s1data, void *s2data, int len)
46 {
47 int i;
48 fsw_u8 *p1 = (fsw_u8 *)s1data;
49 fsw_u16 *p2 = (fsw_u16 *)s2data;
50 fsw_u32 c1, c2;
51
52 for (i = 0; i < len; i++) {
53 c1 = *p1++;
54 c2 = *p2++; c2 = FSW_SWAPVALUE_U16(c2);
55 if (c1 != c2)
56 return 0;
57 }
58 return 1;
59 }
60
61 static int fsw_streq_UTF8_UTF16(void *s1data, void *s2data, int len)
62 {
63 int i;
64 fsw_u8 *p1 = (fsw_u8 *)s1data;
65 fsw_u16 *p2 = (fsw_u16 *)s2data;
66 fsw_u32 c1, c2;
67
68 for (i = 0; i < len; i++) {
69 c1 = *p1++;
70 if ((c1 & 0xe0) == 0xc0) {
71 c1 = ((c1 & 0x1f) << 6) | (*p1++ & 0x3f);
72 } else if ((c1 & 0xf0) == 0xe0) {
73 c1 = ((c1 & 0x0f) << 12) | ((*p1++ & 0x3f) << 6);
74 c1 |= (*p1++ & 0x3f);
75 } else if ((c1 & 0xf8) == 0xf0) {
76 c1 = ((c1 & 0x07) << 18) | ((*p1++ & 0x3f) << 12);
77 c1 |= ((*p1++ & 0x3f) << 6);
78 c1 |= (*p1++ & 0x3f);
79 }
80 c2 = *p2++;
81 if (c1 != c2)
82 return 0;
83 }
84 return 1;
85 }
86
87 static int fsw_streq_UTF8_UTF16_SWAPPED(void *s1data, void *s2data, int len)
88 {
89 int i;
90 fsw_u8 *p1 = (fsw_u8 *)s1data;
91 fsw_u16 *p2 = (fsw_u16 *)s2data;
92 fsw_u32 c1, c2;
93
94 for (i = 0; i < len; i++) {
95 c1 = *p1++;
96 if ((c1 & 0xe0) == 0xc0) {
97 c1 = ((c1 & 0x1f) << 6) | (*p1++ & 0x3f);
98 } else if ((c1 & 0xf0) == 0xe0) {
99 c1 = ((c1 & 0x0f) << 12) | ((*p1++ & 0x3f) << 6);
100 c1 |= (*p1++ & 0x3f);
101 } else if ((c1 & 0xf8) == 0xf0) {
102 c1 = ((c1 & 0x07) << 18) | ((*p1++ & 0x3f) << 12);
103 c1 |= ((*p1++ & 0x3f) << 6);
104 c1 |= (*p1++ & 0x3f);
105 }
106 c2 = *p2++; c2 = FSW_SWAPVALUE_U16(c2);
107 if (c1 != c2)
108 return 0;
109 }
110 return 1;
111 }
112
113 static int fsw_streq_UTF16_UTF16_SWAPPED(void *s1data, void *s2data, int len)
114 {
115 int i;
116 fsw_u16 *p1 = (fsw_u16 *)s1data;
117 fsw_u16 *p2 = (fsw_u16 *)s2data;
118 fsw_u32 c1, c2;
119
120 for (i = 0; i < len; i++) {
121 c1 = *p1++;
122 c2 = *p2++; c2 = FSW_SWAPVALUE_U16(c2);
123 if (c1 != c2)
124 return 0;
125 }
126 return 1;
127 }
128
129 static fsw_status_t fsw_strcoerce_UTF8_ISO88591(void *srcdata, int srclen, struct fsw_string *dest)
130 {
131 fsw_status_t status;
132 int i;
133 fsw_u8 *sp;
134 fsw_u8 *dp;
135 fsw_u32 c;
136
137 dest->type = FSW_STRING_TYPE_ISO88591;
138 dest->len = srclen;
139 dest->size = srclen * sizeof(fsw_u8);
140 status = fsw_alloc(dest->size, &dest->data);
141 if (status)
142 return status;
143
144 sp = (fsw_u8 *)srcdata;
145 dp = (fsw_u8 *)dest->data;
146 for (i = 0; i < srclen; i++) {
147 c = *sp++;
148 if ((c & 0xe0) == 0xc0) {
149 c = ((c & 0x1f) << 6) | (*sp++ & 0x3f);
150 } else if ((c & 0xf0) == 0xe0) {
151 c = ((c & 0x0f) << 12) | ((*sp++ & 0x3f) << 6);
152 c |= (*sp++ & 0x3f);
153 } else if ((c & 0xf8) == 0xf0) {
154 c = ((c & 0x07) << 18) | ((*sp++ & 0x3f) << 12);
155 c |= ((*sp++ & 0x3f) << 6);
156 c |= (*sp++ & 0x3f);
157 }
158 *dp++ = (fsw_u8)c;
159 }
160 return FSW_SUCCESS;
161 }
162
163 static fsw_status_t fsw_strcoerce_UTF16_ISO88591(void *srcdata, int srclen, struct fsw_string *dest)
164 {
165 fsw_status_t status;
166 int i;
167 fsw_u16 *sp;
168 fsw_u8 *dp;
169 fsw_u32 c;
170
171 dest->type = FSW_STRING_TYPE_ISO88591;
172 dest->len = srclen;
173 dest->size = srclen * sizeof(fsw_u8);
174 status = fsw_alloc(dest->size, &dest->data);
175 if (status)
176 return status;
177
178 sp = (fsw_u16 *)srcdata;
179 dp = (fsw_u8 *)dest->data;
180 for (i = 0; i < srclen; i++) {
181 c = *sp++;
182 *dp++ = (fsw_u8)c;
183 }
184 return FSW_SUCCESS;
185 }
186
187 static fsw_status_t fsw_strcoerce_UTF16_SWAPPED_ISO88591(void *srcdata, int srclen, struct fsw_string *dest)
188 {
189 fsw_status_t status;
190 int i;
191 fsw_u16 *sp;
192 fsw_u8 *dp;
193 fsw_u32 c;
194
195 dest->type = FSW_STRING_TYPE_ISO88591;
196 dest->len = srclen;
197 dest->size = srclen * sizeof(fsw_u8);
198 status = fsw_alloc(dest->size, &dest->data);
199 if (status)
200 return status;
201
202 sp = (fsw_u16 *)srcdata;
203 dp = (fsw_u8 *)dest->data;
204 for (i = 0; i < srclen; i++) {
205 c = *sp++; c = FSW_SWAPVALUE_U16(c);
206 *dp++ = (fsw_u8)c;
207 }
208 return FSW_SUCCESS;
209 }
210
211 static fsw_status_t fsw_strcoerce_ISO88591_UTF16(void *srcdata, int srclen, struct fsw_string *dest)
212 {
213 fsw_status_t status;
214 int i;
215 fsw_u8 *sp;
216 fsw_u16 *dp;
217 fsw_u32 c;
218
219 dest->type = FSW_STRING_TYPE_UTF16;
220 dest->len = srclen;
221 dest->size = srclen * sizeof(fsw_u16);
222 status = fsw_alloc(dest->size, &dest->data);
223 if (status)
224 return status;
225
226 sp = (fsw_u8 *)srcdata;
227 dp = (fsw_u16 *)dest->data;
228 for (i = 0; i < srclen; i++) {
229 c = *sp++;
230 *dp++ = (fsw_u16)c;
231 }
232 return FSW_SUCCESS;
233 }
234
235 static fsw_status_t fsw_strcoerce_UTF8_UTF16(void *srcdata, int srclen, struct fsw_string *dest)
236 {
237 fsw_status_t status;
238 int i;
239 fsw_u8 *sp;
240 fsw_u16 *dp;
241 fsw_u32 c;
242
243 dest->type = FSW_STRING_TYPE_UTF16;
244 dest->len = srclen;
245 dest->size = srclen * sizeof(fsw_u16);
246 status = fsw_alloc(dest->size, &dest->data);
247 if (status)
248 return status;
249
250 sp = (fsw_u8 *)srcdata;
251 dp = (fsw_u16 *)dest->data;
252 for (i = 0; i < srclen; i++) {
253 c = *sp++;
254 if ((c & 0xe0) == 0xc0) {
255 c = ((c & 0x1f) << 6) | (*sp++ & 0x3f);
256 } else if ((c & 0xf0) == 0xe0) {
257 c = ((c & 0x0f) << 12) | ((*sp++ & 0x3f) << 6);
258 c |= (*sp++ & 0x3f);
259 } else if ((c & 0xf8) == 0xf0) {
260 c = ((c & 0x07) << 18) | ((*sp++ & 0x3f) << 12);
261 c |= ((*sp++ & 0x3f) << 6);
262 c |= (*sp++ & 0x3f);
263 }
264 *dp++ = (fsw_u16)c;
265 }
266 return FSW_SUCCESS;
267 }
268
269 static fsw_status_t fsw_strcoerce_UTF16_SWAPPED_UTF16(void *srcdata, int srclen, struct fsw_string *dest)
270 {
271 fsw_status_t status;
272 int i;
273 fsw_u16 *sp;
274 fsw_u16 *dp;
275 fsw_u32 c;
276
277 dest->type = FSW_STRING_TYPE_UTF16;
278 dest->len = srclen;
279 dest->size = srclen * sizeof(fsw_u16);
280 status = fsw_alloc(dest->size, &dest->data);
281 if (status)
282 return status;
283
284 sp = (fsw_u16 *)srcdata;
285 dp = (fsw_u16 *)dest->data;
286 for (i = 0; i < srclen; i++) {
287 c = *sp++; c = FSW_SWAPVALUE_U16(c);
288 *dp++ = (fsw_u16)c;
289 }
290 return FSW_SUCCESS;
291 }
292
293 static fsw_status_t fsw_strcoerce_ISO88591_UTF8(void *srcdata, int srclen, struct fsw_string *dest)
294 {
295 fsw_status_t status;
296 int i, destsize;
297 fsw_u8 *sp;
298 fsw_u8 *dp;
299 fsw_u32 c;
300
301 sp = (fsw_u8 *)srcdata;
302 destsize = 0;
303 for (i = 0; i < srclen; i++) {
304 c = *sp++;
305
306 if (c < 0x000080)
307 destsize++;
308 else if (c < 0x000800)
309 destsize += 2;
310 else if (c < 0x010000)
311 destsize += 3;
312 else
313 destsize += 4;
314 }
315
316 dest->type = FSW_STRING_TYPE_UTF8;
317 dest->len = srclen;
318 dest->size = destsize;
319 status = fsw_alloc(dest->size, &dest->data);
320 if (status)
321 return status;
322
323 sp = (fsw_u8 *)srcdata;
324 dp = (fsw_u8 *)dest->data;
325 for (i = 0; i < srclen; i++) {
326 c = *sp++;
327
328 if (c < 0x000080) {
329 *dp++ = (fsw_u8)c;
330 } else if (c < 0x000800) {
331 *dp++ = (fsw_u8)(0xc0 | ((c >> 6) & 0x1f));
332 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
333 } else if (c < 0x010000) {
334 *dp++ = (fsw_u8)(0xe0 | ((c >> 12) & 0x0f));
335 *dp++ = (fsw_u8)(0x80 | ((c >> 6) & 0x3f));
336 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
337 } else {
338 *dp++ = (fsw_u8)(0xf0 | ((c >> 18) & 0x07));
339 *dp++ = (fsw_u8)(0x80 | ((c >> 12) & 0x3f));
340 *dp++ = (fsw_u8)(0x80 | ((c >> 6) & 0x3f));
341 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
342 }
343 }
344 return FSW_SUCCESS;
345 }
346
347 static fsw_status_t fsw_strcoerce_UTF16_UTF8(void *srcdata, int srclen, struct fsw_string *dest)
348 {
349 fsw_status_t status;
350 int i, destsize;
351 fsw_u16 *sp;
352 fsw_u8 *dp;
353 fsw_u32 c;
354
355 sp = (fsw_u16 *)srcdata;
356 destsize = 0;
357 for (i = 0; i < srclen; i++) {
358 c = *sp++;
359
360 if (c < 0x000080)
361 destsize++;
362 else if (c < 0x000800)
363 destsize += 2;
364 else if (c < 0x010000)
365 destsize += 3;
366 else
367 destsize += 4;
368 }
369
370 dest->type = FSW_STRING_TYPE_UTF8;
371 dest->len = srclen;
372 dest->size = destsize;
373 status = fsw_alloc(dest->size, &dest->data);
374 if (status)
375 return status;
376
377 sp = (fsw_u16 *)srcdata;
378 dp = (fsw_u8 *)dest->data;
379 for (i = 0; i < srclen; i++) {
380 c = *sp++;
381
382 if (c < 0x000080) {
383 *dp++ = (fsw_u8)c;
384 } else if (c < 0x000800) {
385 *dp++ = (fsw_u8)(0xc0 | ((c >> 6) & 0x1f));
386 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
387 } else if (c < 0x010000) {
388 *dp++ = (fsw_u8)(0xe0 | ((c >> 12) & 0x0f));
389 *dp++ = (fsw_u8)(0x80 | ((c >> 6) & 0x3f));
390 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
391 } else {
392 *dp++ = (fsw_u8)(0xf0 | ((c >> 18) & 0x07));
393 *dp++ = (fsw_u8)(0x80 | ((c >> 12) & 0x3f));
394 *dp++ = (fsw_u8)(0x80 | ((c >> 6) & 0x3f));
395 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
396 }
397 }
398 return FSW_SUCCESS;
399 }
400
401 static fsw_status_t fsw_strcoerce_UTF16_SWAPPED_UTF8(void *srcdata, int srclen, struct fsw_string *dest)
402 {
403 fsw_status_t status;
404 int i, destsize;
405 fsw_u16 *sp;
406 fsw_u8 *dp;
407 fsw_u32 c;
408
409 sp = (fsw_u16 *)srcdata;
410 destsize = 0;
411 for (i = 0; i < srclen; i++) {
412 c = *sp++; c = FSW_SWAPVALUE_U16(c);
413
414 if (c < 0x000080)
415 destsize++;
416 else if (c < 0x000800)
417 destsize += 2;
418 else if (c < 0x010000)
419 destsize += 3;
420 else
421 destsize += 4;
422 }
423
424 dest->type = FSW_STRING_TYPE_UTF8;
425 dest->len = srclen;
426 dest->size = destsize;
427 status = fsw_alloc(dest->size, &dest->data);
428 if (status)
429 return status;
430
431 sp = (fsw_u16 *)srcdata;
432 dp = (fsw_u8 *)dest->data;
433 for (i = 0; i < srclen; i++) {
434 c = *sp++; c = FSW_SWAPVALUE_U16(c);
435
436 if (c < 0x000080) {
437 *dp++ = (fsw_u8)c;
438 } else if (c < 0x000800) {
439 *dp++ = (fsw_u8)(0xc0 | ((c >> 6) & 0x1f));
440 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
441 } else if (c < 0x010000) {
442 *dp++ = (fsw_u8)(0xe0 | ((c >> 12) & 0x0f));
443 *dp++ = (fsw_u8)(0x80 | ((c >> 6) & 0x3f));
444 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
445 } else {
446 *dp++ = (fsw_u8)(0xf0 | ((c >> 18) & 0x07));
447 *dp++ = (fsw_u8)(0x80 | ((c >> 12) & 0x3f));
448 *dp++ = (fsw_u8)(0x80 | ((c >> 6) & 0x3f));
449 *dp++ = (fsw_u8)(0x80 | (c & 0x3f));
450 }
451 }
452 return FSW_SUCCESS;
453 }