1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

(utf8_internal_loop): Correctly reconstruct stored character in state in UNPACK_BYTES macro.

This commit is contained in:
Ulrich Drepper
2000-04-27 05:36:45 +00:00
parent 548f51f6be
commit cd201e387c

View File

@ -939,21 +939,42 @@ ucs4le_internal_loop_single (const unsigned char **inptrp,
#define UNPACK_BYTES \ #define UNPACK_BYTES \
{ \ { \
wint_t wch = state->__value.__wch; \ wint_t wch = state->__value.__wch; \
size_t ntotal; \
inlen = state->__count; \ inlen = state->__count; \
\ \
if (state->__value.__wch <= 0x7ff) \ if (state->__value.__wch <= 0x7ff) \
bytebuf[0] = 0xc0; \ { \
bytebuf[0] = 0xc0; \
ntotal = 2; \
} \
else if (state->__value.__wch <= 0xffff) \ else if (state->__value.__wch <= 0xffff) \
bytebuf[0] = 0xe0; \ { \
bytebuf[0] = 0xe0; \
ntotal = 3; \
} \
else if (state->__value.__wch <= 0x1fffff) \ else if (state->__value.__wch <= 0x1fffff) \
bytebuf[0] = 0xf0; \ { \
bytebuf[0] = 0xf0; \
ntotal = 4; \
} \
else if (state->__value.__wch <= 0x3ffffff) \ else if (state->__value.__wch <= 0x3ffffff) \
bytebuf[0] = 0xf8; \ { \
bytebuf[0] = 0xf8; \
ntotal = 5; \
} \
else \ else \
bytebuf[0] = 0xfc; \ { \
bytebuf[0] = 0xfc; \
ntotal = 6; \
} \
\ \
while (inlen-- > 1) \ do \
bytebuf[inlen] = 0x80 | (wch & 0x3f); \ { \
if (--ntotal < inlen) \
bytebuf[ntotal] = 0x80 | (wch & 0x3f); \
wch >>= 6; \
} \
while (ntotal > 1); \
\ \
bytebuf[0] |= wch; \ bytebuf[0] |= wch; \
} }