]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* include/grub/charset.h (GRUB_UTF16_UPPER_SURROGATE): Fix mask sizes.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 14 May 2012 08:18:42 +0000 (10:18 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 14 May 2012 08:18:42 +0000 (10:18 +0200)
(GRUB_UTF16_LOWER_SURROGATE): Likewise.
(grub_utf16_to_utf8): Likewise.

ChangeLog
include/grub/charset.h

index 99fc59a0c315d1af9be8887c425cd6fe67f4393c..7bdb9d322fe56e5efb731f6789eb0fc8d4bf1d2b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-14  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * 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  <phcoder@gmail.com>
 
        * grub-core/disk/ieee1275/ofdisk.c (scan): Don't scan device tree if
index 8cb228703ea025e284245220b8c78212b3f2a68b..ab9202884419326449f1f27851c66a31728750a7 100644 (file)
@@ -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;