Make sure utf-16 strings are written as little endian words.

This commit is contained in:
matt 2012-07-25 01:07:49 +00:00
parent 82d572b2e8
commit 8c19c1d834
1 changed files with 7 additions and 5 deletions

View File

@ -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;