#include #include #include #include #include #include #include #include "test.h" int main(void) { int i, j; mbstate_t st, st2; wchar_t wc, map[257], wtmp[257]; char s[MB_LEN_MAX*256]; size_t rv; int c; int ni_errors=0; setlocale(LC_CTYPE, "C"); if (MB_CUR_MAX != 1) t_error("MB_CUR_MAX = %d, expected 1\n", (int)MB_CUR_MAX); for (i=0; i<256; i++) { st = (mbstate_t){0}; if (mbrtowc(&wc, &(char){i}, 1, &st) != !!i) t_error("mbrtowc failed to convert byte %.2x to wchar_t\n", i); if ((map[i]=btowc(i)) == WEOF) { t_error("btowc failed to convert byte %.2x to wchar_t\n", i); continue; } for (j=0; j 50) t_error("additional %d non-image errors (not printed)\n", ni_errors); map[256] = 0; st = (mbstate_t){0}; if ((rv=wcsrtombs(s, &(const wchar_t *){map+1}, sizeof s, &st)) != 255) t_error("wcsrtombs returned %zd, expected 255\n", rv); if ((rv=mbsrtowcs(wtmp, &(const char *){s}, 256, &st)) != 255) t_error("mbsrtowcs returned %zd, expected 255\n", rv); if (memcmp(map+1, wtmp, 256*sizeof(*map))) t_error("wcsrtombs/mbsrtowcs round trip failed\n"); return t_status; }