From d2fcfb0cefeaaeeac65a33159fd4a37b3decd97a Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 14 May 2012 10:18:42 +0200 Subject: [PATCH] * include/grub/charset.h (GRUB_UTF16_UPPER_SURROGATE): Fix mask sizes. (GRUB_UTF16_LOWER_SURROGATE): Likewise. (grub_utf16_to_utf8): Likewise. --- ChangeLog | 6 ++++++ include/grub/charset.h | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 99fc59a0c..7bdb9d322 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-05-14 Vladimir Serbinenko + + * include/grub/charset.h (GRUB_UTF16_UPPER_SURROGATE): Fix mask sizes. + (GRUB_UTF16_LOWER_SURROGATE): Likewise. + (grub_utf16_to_utf8): Likewise. + 2012-05-13 Vladimir Serbinenko * grub-core/disk/ieee1275/ofdisk.c (scan): Don't scan device tree if diff --git a/include/grub/charset.h b/include/grub/charset.h index 8cb228703..ab9202884 100644 --- a/include/grub/charset.h +++ b/include/grub/charset.h @@ -44,9 +44,9 @@ #define GRUB_UCS2_LIMIT 0x10000 #define GRUB_UTF16_UPPER_SURROGATE(code) \ - (0xD800 + ((((code) - GRUB_UCS2_LIMIT) >> 12) & 0xfff)) + (0xD800 | ((((code) - GRUB_UCS2_LIMIT) >> 10) & 0x3ff)) #define GRUB_UTF16_LOWER_SURROGATE(code) \ - (0xDC00 + (((code) - GRUB_UCS2_LIMIT) & 0xfff)) + (0xDC00 | (((code) - GRUB_UCS2_LIMIT) & 0x3ff)) /* Process one character from UTF8 sequence. At beginning set *code = 0, *count = 0. Returns 0 on failure and @@ -195,7 +195,7 @@ grub_utf16_to_utf8 (grub_uint8_t *dest, const grub_uint16_t *src, if (code >= 0xDC00 && code <= 0xDFFF) { /* Surrogate pair. */ - code = ((code_high - 0xD800) << 12) + (code - 0xDC00) + 0x10000; + code = ((code_high - 0xD800) << 10) + (code - 0xDC00) + 0x10000; *dest++ = (code >> 18) | 0xF0; *dest++ = ((code >> 12) & 0x3F) | 0x80;