Make sure utf-16 strings are written as little endian words.
This commit is contained in:
parent
82d572b2e8
commit
8c19c1d834
|
@ -31,7 +31,7 @@
|
|||
__FBSDID("$FreeBSD: src/sbin/gpt/gpt.c,v 1.16 2006/07/07 02:44:23 marcel Exp $");
|
||||
#endif
|
||||
#ifdef __RCSID
|
||||
__RCSID("$NetBSD: gpt.c,v 1.15 2011/08/27 17:38:16 joerg Exp $");
|
||||
__RCSID("$NetBSD: gpt.c,v 1.16 2012/07/25 01:07:49 matt Exp $");
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -225,12 +225,14 @@ utf8_to_utf16(const uint8_t *s8, uint16_t *s16, size_t s16len)
|
|||
}
|
||||
if (utfbytes == 0) {
|
||||
if (utfchar >= 0x10000 && s16idx + 2 >= s16len)
|
||||
utfchar = 0xfffd;
|
||||
utfchar = htole16(0xfffd);
|
||||
if (utfchar >= 0x10000) {
|
||||
s16[s16idx++] = 0xd800 | ((utfchar>>10)-0x40);
|
||||
s16[s16idx++] = 0xdc00 | (utfchar & 0x3ff);
|
||||
s16[s16idx++] =
|
||||
htole16(0xd800 | ((utfchar>>10)-0x40));
|
||||
s16[s16idx++] =
|
||||
htole16(0xdc00 | (utfchar & 0x3ff));
|
||||
} else
|
||||
s16[s16idx++] = utfchar;
|
||||
s16[s16idx++] = htole16(utfchar);
|
||||
if (s16idx == s16len) {
|
||||
s16[--s16idx] = 0;
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue