/* * Build: * * clang -std=c99 -ansi -pedantic -O0 -g -Wall -Werror -o itest itest.c */ #include #include #include #include #include #include char buf[] = { 16, 3, 'R', 0, 'O', 0, 'D', 0, 'S', 0, '-', 0, '5', 0, 0, 0 }; int main(int argc, char* argv[]) { wchar_t wbuf[256]; iconv_t ic; size_t inbytes; size_t outbytes; size_t res; char *inptr; char *outptr; char *locale; int e, len; locale = setlocale(0, NULL); if (!locale) return 1; ic = iconv_open("UTF-32", "UTF-16"); if (ic == (iconv_t)-1) return 2; len = sizeof(buf); inptr = buf+2; inbytes = len-2; outptr = (char*) wbuf; outbytes = sizeof(wbuf); res = iconv(ic, &inptr, &inbytes, &outptr, &outbytes); fprintf(stderr, "iconv: res=%d\n", (int)res); if (res == (size_t)-1) return 3; wbuf[sizeof(wbuf)/sizeof(wbuf[0])-1] = 0x00000000; if (outbytes >= sizeof(wbuf[0])) *((wchar_t*)outptr) = 0x00000000; len = wcslen(wbuf+1); fprintf(stderr, "wlen=%d wbuf=[", len); e = fwprintf(stderr, L"%ls", wbuf+1); if (e < 0) { fprintf(stderr, "\nfwprintf: errno=%d\n", errno); return 4; } fprintf(stderr, "]\n"); return 0; }