#include #include #include #include #include #include #include int main () { assert (setlocale (LC_ALL, "zh_CN.GB18030") != NULL); mbstate_t state; memset (&state, 0, sizeof (state)); char32_t uc = 0xDEADBEEF; size_t bytes; /* \224\071\311\067 = U+0001F403 */ bytes = mbrtoc32 (&uc, "\224", 1, &state); assert (bytes == (size_t)-2); bytes = mbrtoc32 (&uc, "\071", 1, &state); assert (bytes == (size_t)-2); bytes = mbrtoc32 (&uc, "\311", 1, &state); assert (bytes == (size_t)-2); bytes = mbrtoc32 (&uc, "\067", 1, &state); assert (bytes == 1); assert (uc == 0x0001F403); } /* Works in: glibc Fails in: Cygwin 3.5.3 */