diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-10-31 13:20:12 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-10-31 13:20:12 +0000 |
| commit | 20d465ca8c5fcc2859bdc98f1f2ae10ea1e324e3 (patch) | |
| tree | 6a102ebd3a2ff39127b76290821e28b6abcf5abb /src/runtime/c/gu/utf8.c | |
| parent | 050ebd469ce942e98d20aa6a8f925bf465691ed6 (diff) | |
fixed utf-8 decoding problem in libgu
Diffstat (limited to 'src/runtime/c/gu/utf8.c')
| -rw-r--r-- | src/runtime/c/gu/utf8.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/runtime/c/gu/utf8.c b/src/runtime/c/gu/utf8.c index d0bd89b90..70db65f05 100644 --- a/src/runtime/c/gu/utf8.c +++ b/src/runtime/c/gu/utf8.c @@ -11,9 +11,12 @@ gu_utf8_decode(const uint8_t** src_inout) return (GuUCS) c; } size_t len = (c < 0xe0 ? 1 : - c < 0xf0 ? 2 : - 3); - uint32_t mask = 0x07071f7f; + c < 0xf0 ? 2 : + c < 0xf8 ? 3 : + c < 0xfc ? 4 : + 5 + ); + uint64_t mask = 0x0103070F1f7f; uint32_t u = c & (mask >> (len * 8)); for (size_t i = 1; i <= len; i++) { c = src[i]; |
