1 | // BZ 12601 |
---|---|
2 | #include <stdio.h> |
3 | #include <errno.h> |
4 | #include <iconv.h> |
5 | |
6 | static int |
7 | do_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(tocode: "utf-8", fromcode: "cp932"); |
24 | ret = iconv(cd: cd, inbuf: &inbuf, inbytesleft: &inbytesleft, outbuf: &outbuf, outbytesleft: &outbytesleft); |
25 | iconv_close(cd: cd); |
26 | |
27 | printf(format: "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 |