| // BZ 12601 |
| #include <stdio.h> |
| #include <errno.h> |
| #include <iconv.h> |
| |
| static int |
| do_test (void) |
| { |
| iconv_t cd; |
| char in[] = "\x83\xd9"; |
| char out[256]; |
| char *inbuf; |
| size_t inbytesleft; |
| char *outbuf; |
| size_t outbytesleft; |
| size_t ret; |
| |
| inbuf = in; |
| inbytesleft = sizeof(in) - 1; |
| outbuf = out; |
| outbytesleft = sizeof(out); |
| |
| cd = iconv_open("utf-8", "cp932"); |
| ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); |
| iconv_close(cd); |
| |
| printf("result: %zd %d %zd %d\n", ret, errno, inbytesleft, inbuf[0]); |
| |
| /* |
| * result: -1 84 0 0 (84=EILSEQ) |
| * |
| * Error is returnd but inbuf is consumed. |
| * |
| * \x83\xd9 is valid shift-jis sequence but no character is assigned |
| * to it. |
| */ |
| |
| return (ret != -1 || errno != EILSEQ |
| || inbytesleft != 2 || inbuf[0] != in[0]); |
| } |
| |
| #define TEST_FUNCTION do_test () |
| #include "../test-skeleton.c" |