]>
code.delx.au - refind/blob - filesystems/fsw_strfunc.h
1 /* $Id: fsw_strfunc.h 29125 2010-05-06 09:43:05Z vboxsync $ */
7 * Copyright (C) 2010 Oracle Corporation
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 /* fsw_strfunc.h generated by mk_fsw_strfunc.py */
20 static int fsw_streq_ISO88591_UTF8(void *s1data
, void *s2data
, int len
)
23 fsw_u8
*p1
= (fsw_u8
*)s1data
;
24 fsw_u8
*p2
= (fsw_u8
*)s2data
;
27 for (i
= 0; i
< len
; i
++) {
30 if ((c2
& 0xe0) == 0xc0) {
31 c2
= ((c2
& 0x1f) << 6) | (*p2
++ & 0x3f);
32 } else if ((c2
& 0xf0) == 0xe0) {
33 c2
= ((c2
& 0x0f) << 12) | ((*p2
++ & 0x3f) << 6);
35 } else if ((c2
& 0xf8) == 0xf0) {
36 c2
= ((c2
& 0x07) << 18) | ((*p2
++ & 0x3f) << 12);
37 c2
|= ((*p2
++ & 0x3f) << 6);
47 static int fsw_streq_ISO88591_UTF16(void *s1data
, void *s2data
, int len
)
50 fsw_u8
*p1
= (fsw_u8
*)s1data
;
51 fsw_u16
*p2
= (fsw_u16
*)s2data
;
54 for (i
= 0; i
< len
; i
++) {
64 static int fsw_streq_ISO88591_UTF16_SWAPPED(void *s1data
, void *s2data
, int len
)
67 fsw_u8
*p1
= (fsw_u8
*)s1data
;
68 fsw_u16
*p2
= (fsw_u16
*)s2data
;
71 for (i
= 0; i
< len
; i
++) {
73 c2
= *p2
++; c2
= FSW_SWAPVALUE_U16(c2
);
80 static int fsw_streq_UTF8_UTF16(void *s1data
, void *s2data
, int len
)
83 fsw_u8
*p1
= (fsw_u8
*)s1data
;
84 fsw_u16
*p2
= (fsw_u16
*)s2data
;
87 for (i
= 0; i
< len
; i
++) {
89 if ((c1
& 0xe0) == 0xc0) {
90 c1
= ((c1
& 0x1f) << 6) | (*p1
++ & 0x3f);
91 } else if ((c1
& 0xf0) == 0xe0) {
92 c1
= ((c1
& 0x0f) << 12) | ((*p1
++ & 0x3f) << 6);
94 } else if ((c1
& 0xf8) == 0xf0) {
95 c1
= ((c1
& 0x07) << 18) | ((*p1
++ & 0x3f) << 12);
96 c1
|= ((*p1
++ & 0x3f) << 6);
106 static int fsw_streq_UTF8_UTF16_SWAPPED(void *s1data
, void *s2data
, int len
)
109 fsw_u8
*p1
= (fsw_u8
*)s1data
;
110 fsw_u16
*p2
= (fsw_u16
*)s2data
;
113 for (i
= 0; i
< len
; i
++) {
115 if ((c1
& 0xe0) == 0xc0) {
116 c1
= ((c1
& 0x1f) << 6) | (*p1
++ & 0x3f);
117 } else if ((c1
& 0xf0) == 0xe0) {
118 c1
= ((c1
& 0x0f) << 12) | ((*p1
++ & 0x3f) << 6);
119 c1
|= (*p1
++ & 0x3f);
120 } else if ((c1
& 0xf8) == 0xf0) {
121 c1
= ((c1
& 0x07) << 18) | ((*p1
++ & 0x3f) << 12);
122 c1
|= ((*p1
++ & 0x3f) << 6);
123 c1
|= (*p1
++ & 0x3f);
125 c2
= *p2
++; c2
= FSW_SWAPVALUE_U16(c2
);
132 static int fsw_streq_UTF16_UTF16_SWAPPED(void *s1data
, void *s2data
, int len
)
135 fsw_u16
*p1
= (fsw_u16
*)s1data
;
136 fsw_u16
*p2
= (fsw_u16
*)s2data
;
139 for (i
= 0; i
< len
; i
++) {
141 c2
= *p2
++; c2
= FSW_SWAPVALUE_U16(c2
);
148 static fsw_status_t
fsw_strcoerce_UTF8_ISO88591(void *srcdata
, int srclen
, struct fsw_string
*dest
)
156 dest
->type
= FSW_STRING_TYPE_ISO88591
;
158 dest
->size
= srclen
* sizeof(fsw_u8
);
159 status
= fsw_alloc(dest
->size
, &dest
->data
);
163 sp
= (fsw_u8
*)srcdata
;
164 dp
= (fsw_u8
*)dest
->data
;
165 for (i
= 0; i
< srclen
; i
++) {
167 if ((c
& 0xe0) == 0xc0) {
168 c
= ((c
& 0x1f) << 6) | (*sp
++ & 0x3f);
169 } else if ((c
& 0xf0) == 0xe0) {
170 c
= ((c
& 0x0f) << 12) | ((*sp
++ & 0x3f) << 6);
172 } else if ((c
& 0xf8) == 0xf0) {
173 c
= ((c
& 0x07) << 18) | ((*sp
++ & 0x3f) << 12);
174 c
|= ((*sp
++ & 0x3f) << 6);
182 static fsw_status_t
fsw_strcoerce_UTF16_ISO88591(void *srcdata
, int srclen
, struct fsw_string
*dest
)
190 dest
->type
= FSW_STRING_TYPE_ISO88591
;
192 dest
->size
= srclen
* sizeof(fsw_u8
);
193 status
= fsw_alloc(dest
->size
, &dest
->data
);
197 sp
= (fsw_u16
*)srcdata
;
198 dp
= (fsw_u8
*)dest
->data
;
199 for (i
= 0; i
< srclen
; i
++) {
206 static fsw_status_t
fsw_strcoerce_UTF16_SWAPPED_ISO88591(void *srcdata
, int srclen
, struct fsw_string
*dest
)
214 dest
->type
= FSW_STRING_TYPE_ISO88591
;
216 dest
->size
= srclen
* sizeof(fsw_u8
);
217 status
= fsw_alloc(dest
->size
, &dest
->data
);
221 sp
= (fsw_u16
*)srcdata
;
222 dp
= (fsw_u8
*)dest
->data
;
223 for (i
= 0; i
< srclen
; i
++) {
224 c
= *sp
++; c
= FSW_SWAPVALUE_U16(c
);
230 static fsw_status_t
fsw_strcoerce_ISO88591_UTF16(void *srcdata
, int srclen
, struct fsw_string
*dest
)
238 dest
->type
= FSW_STRING_TYPE_UTF16
;
240 dest
->size
= srclen
* sizeof(fsw_u16
);
241 status
= fsw_alloc(dest
->size
, &dest
->data
);
245 sp
= (fsw_u8
*)srcdata
;
246 dp
= (fsw_u16
*)dest
->data
;
247 for (i
= 0; i
< srclen
; i
++) {
254 static fsw_status_t
fsw_strcoerce_UTF8_UTF16(void *srcdata
, int srclen
, struct fsw_string
*dest
)
262 dest
->type
= FSW_STRING_TYPE_UTF16
;
264 dest
->size
= srclen
* sizeof(fsw_u16
);
265 status
= fsw_alloc(dest
->size
, &dest
->data
);
269 sp
= (fsw_u8
*)srcdata
;
270 dp
= (fsw_u16
*)dest
->data
;
271 for (i
= 0; i
< srclen
; i
++) {
273 if ((c
& 0xe0) == 0xc0) {
274 c
= ((c
& 0x1f) << 6) | (*sp
++ & 0x3f);
275 } else if ((c
& 0xf0) == 0xe0) {
276 c
= ((c
& 0x0f) << 12) | ((*sp
++ & 0x3f) << 6);
278 } else if ((c
& 0xf8) == 0xf0) {
279 c
= ((c
& 0x07) << 18) | ((*sp
++ & 0x3f) << 12);
280 c
|= ((*sp
++ & 0x3f) << 6);
288 static fsw_status_t
fsw_strcoerce_UTF16_SWAPPED_UTF16(void *srcdata
, int srclen
, struct fsw_string
*dest
)
296 dest
->type
= FSW_STRING_TYPE_UTF16
;
298 dest
->size
= srclen
* sizeof(fsw_u16
);
299 status
= fsw_alloc(dest
->size
, &dest
->data
);
303 sp
= (fsw_u16
*)srcdata
;
304 dp
= (fsw_u16
*)dest
->data
;
305 for (i
= 0; i
< srclen
; i
++) {
306 c
= *sp
++; c
= FSW_SWAPVALUE_U16(c
);
312 static fsw_status_t
fsw_strcoerce_ISO88591_UTF8(void *srcdata
, int srclen
, struct fsw_string
*dest
)
320 sp
= (fsw_u8
*)srcdata
;
322 for (i
= 0; i
< srclen
; i
++) {
327 else if (c
< 0x000800)
329 else if (c
< 0x010000)
335 dest
->type
= FSW_STRING_TYPE_UTF8
;
337 dest
->size
= destsize
;
338 status
= fsw_alloc(dest
->size
, &dest
->data
);
342 sp
= (fsw_u8
*)srcdata
;
343 dp
= (fsw_u8
*)dest
->data
;
344 for (i
= 0; i
< srclen
; i
++) {
349 } else if (c
< 0x000800) {
350 *dp
++ = (fsw_u8
)(0xc0 | ((c
>> 6) & 0x1f));
351 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
352 } else if (c
< 0x010000) {
353 *dp
++ = (fsw_u8
)(0xe0 | ((c
>> 12) & 0x0f));
354 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 6) & 0x3f));
355 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
357 *dp
++ = (fsw_u8
)(0xf0 | ((c
>> 18) & 0x07));
358 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 12) & 0x3f));
359 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 6) & 0x3f));
360 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
366 static fsw_status_t
fsw_strcoerce_UTF16_UTF8(void *srcdata
, int srclen
, struct fsw_string
*dest
)
374 sp
= (fsw_u16
*)srcdata
;
376 for (i
= 0; i
< srclen
; i
++) {
381 else if (c
< 0x000800)
383 else if (c
< 0x010000)
389 dest
->type
= FSW_STRING_TYPE_UTF8
;
391 dest
->size
= destsize
;
392 status
= fsw_alloc(dest
->size
, &dest
->data
);
396 sp
= (fsw_u16
*)srcdata
;
397 dp
= (fsw_u8
*)dest
->data
;
398 for (i
= 0; i
< srclen
; i
++) {
403 } else if (c
< 0x000800) {
404 *dp
++ = (fsw_u8
)(0xc0 | ((c
>> 6) & 0x1f));
405 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
406 } else if (c
< 0x010000) {
407 *dp
++ = (fsw_u8
)(0xe0 | ((c
>> 12) & 0x0f));
408 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 6) & 0x3f));
409 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
411 *dp
++ = (fsw_u8
)(0xf0 | ((c
>> 18) & 0x07));
412 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 12) & 0x3f));
413 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 6) & 0x3f));
414 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
420 static fsw_status_t
fsw_strcoerce_UTF16_SWAPPED_UTF8(void *srcdata
, int srclen
, struct fsw_string
*dest
)
428 sp
= (fsw_u16
*)srcdata
;
430 for (i
= 0; i
< srclen
; i
++) {
431 c
= *sp
++; c
= FSW_SWAPVALUE_U16(c
);
435 else if (c
< 0x000800)
437 else if (c
< 0x010000)
443 dest
->type
= FSW_STRING_TYPE_UTF8
;
445 dest
->size
= destsize
;
446 status
= fsw_alloc(dest
->size
, &dest
->data
);
450 sp
= (fsw_u16
*)srcdata
;
451 dp
= (fsw_u8
*)dest
->data
;
452 for (i
= 0; i
< srclen
; i
++) {
453 c
= *sp
++; c
= FSW_SWAPVALUE_U16(c
);
457 } else if (c
< 0x000800) {
458 *dp
++ = (fsw_u8
)(0xc0 | ((c
>> 6) & 0x1f));
459 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
460 } else if (c
< 0x010000) {
461 *dp
++ = (fsw_u8
)(0xe0 | ((c
>> 12) & 0x0f));
462 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 6) & 0x3f));
463 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));
465 *dp
++ = (fsw_u8
)(0xf0 | ((c
>> 18) & 0x07));
466 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 12) & 0x3f));
467 *dp
++ = (fsw_u8
)(0x80 | ((c
>> 6) & 0x3f));
468 *dp
++ = (fsw_u8
)(0x80 | (c
& 0x3f));