1 // BZ 12601 2 #include <stdio.h> 3 #include <errno.h> 4 #include <iconv.h> 5 6 static int do_test(void)7do_test (void) 8 { 9 iconv_t cd; 10 char in[] = "\x83\xd9"; 11 char out[256]; 12 char *inbuf; 13 size_t inbytesleft; 14 char *outbuf; 15 size_t outbytesleft; 16 size_t ret; 17 18 inbuf = in; 19 inbytesleft = sizeof (in) - 1; 20 outbuf = out; 21 outbytesleft = sizeof (out); 22 23 cd = iconv_open("utf-8", "cp932"); 24 ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); 25 iconv_close(cd); 26 27 printf("result: %zd %d %zd %d\n", ret, errno, inbytesleft, inbuf[0]); 28 29 /* 30 * result: -1 84 0 0 (84=EILSEQ) 31 * 32 * Error is returnd but inbuf is consumed. 33 * 34 * \x83\xd9 is valid shift-jis sequence but no character is assigned 35 * to it. 36 */ 37 38 return (ret != -1 || errno != EILSEQ 39 || inbytesleft != 2 || inbuf[0] != in[0]); 40 } 41 42 #define TEST_FUNCTION do_test () 43 #include "../test-skeleton.c" 44