2 * encode.c - string conversion routines (mostly for compatibility with
5 * Copyright (C) 2008 Kay Sievers <kay.sievers@vrfy.org>
6 * Copyright (C) 2009 Karel Zak <kzak@redhat.com>
8 * This file may be redistributed under the terms of the
9 * GNU Lesser General Public License.
22 size_t blkid_encode_to_utf8(int enc
, unsigned char *dest
, size_t len
,
23 const unsigned char *src
, size_t count
)
28 for (j
= i
= 0; i
< count
; i
++) {
29 if (enc
== BLKID_ENC_UTF16LE
) {
32 c
= (src
[i
+1] << 8) | src
[i
];
34 } else if (enc
== BLKID_ENC_UTF16BE
) {
37 c
= (src
[i
] << 8) | src
[i
+1];
39 } else if (enc
== BLKID_ENC_LATIN1
) {
47 } else if (c
< 0x80) {
50 dest
[j
++] = (uint8_t) c
;
51 } else if (c
< 0x800) {
54 dest
[j
++] = (uint8_t) (0xc0 | (c
>> 6));
55 dest
[j
++] = (uint8_t) (0x80 | (c
& 0x3f));
59 dest
[j
++] = (uint8_t) (0xe0 | (c
>> 12));
60 dest
[j
++] = (uint8_t) (0x80 | ((c
>> 6) & 0x3f));
61 dest
[j
++] = (uint8_t) (0x80 | (c
& 0x3f));