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