Commit 6bc5c0e0 authored by Paul Eggert's avatar Paul Eggert
Browse files

mbrtowc: port better to narrow-wchar_t platforms

* lib/mbrtowc.c (mbrtowc): On platforms like AIX 7.2, where
wchar_t is too narrow to represent all the Unicode characters,
consider a byte sequence for an out-of-wchar_t-range character to
be an encoding error.  This fixes grep’s surrogate-pair test
failure on AIX 7.2.
parent be584c56
2019-12-26 Paul Eggert <eggert@cs.ucla.edu>
mbrtowc: port better to narrow-wchar_t platforms
* lib/mbrtowc.c (mbrtowc): On platforms like AIX 7.2, where
wchar_t is too narrow to represent all the Unicode characters,
consider a byte sequence for an out-of-wchar_t-range character to
be an encoding error. This fixes grep’s surrogate-pair test
failure on AIX 7.2.
2019-12-24 Bruno Haible <bruno@clisp.org>
 
localcharset: Avoid referencing rpl_setlocale on native Windows.
......@@ -214,12 +214,17 @@ mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
if ((c3 ^ 0x80) < 0x40)
{
if (pwc != NULL)
*pwc = ((unsigned int) (c & 0x0f) << 12)
| ((unsigned int) (c2 ^ 0x80) << 6)
| (unsigned int) (c3 ^ 0x80);
res = 3;
goto success;
unsigned int wc
= (((unsigned int) (c & 0x0f) << 12)
| ((unsigned int) (c2 ^ 0x80) << 6)
| (unsigned int) (c3 ^ 0x80));
if (wc <= WCHAR_MAX)
{
if (pwc != NULL)
*pwc = wc;
res = 3;
goto success;
}
}
}
}
......@@ -253,13 +258,19 @@ mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
if ((c4 ^ 0x80) < 0x40)
{
if (pwc != NULL)
*pwc = ((unsigned int) (c & 0x07) << 18)
| ((unsigned int) (c2 ^ 0x80) << 12)
| ((unsigned int) (c3 ^ 0x80) << 6)
| (unsigned int) (c4 ^ 0x80);
res = 4;
goto success;
unsigned int wc
= (((unsigned int) (c & 0x07) << 18)
| ((unsigned int) (c2 ^ 0x80)
<< 12)
| ((unsigned int) (c3 ^ 0x80) << 6)
| (unsigned int) (c4 ^ 0x80));
if (wc <= WCHAR_MAX)
{
if (pwc != NULL)
*pwc = wc;
res = 4;
goto success;
}
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment