+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.
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;
+ }
}
}
}
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;
+ }
}
}
}