| /* Test program by Satoru Takabayashi. */ |
| #include <errno.h> |
| #include <iconv.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| int |
| main (int argc, char **argv) |
| { |
| const char in[] = "\x41\x42\x43\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa"; |
| /* valid eucJP string */ |
| const char exp[] = "\x41\x42\x43\x82\xa0\x82\xa2\x82\xa4"; |
| size_t outbufsize = 10; |
| /* 10 is too small to store full result (intentional) */ |
| size_t inleft, outleft; |
| char *in_p = (char *) in; |
| char out[outbufsize]; |
| char *out_p = out; |
| iconv_t cd; |
| int i; |
| |
| inleft = strlen (in); |
| outleft = outbufsize; |
| |
| cd = iconv_open ("SJIS", "eucJP"); |
| if (cd == (iconv_t) -1) |
| { |
| puts ("iconv_open failed"); |
| exit (1); |
| } |
| |
| iconv (cd, &in_p, &inleft, &out_p, &outleft); /* this returns E2BIG */ |
| for (i = 0; i < outbufsize - outleft; ++i) |
| printf (" %02x", (unsigned char) out[i]); |
| puts (""); |
| iconv_close (cd); |
| |
| return outbufsize - outleft != 9 || memcmp (out, exp, 9) != 0; |
| } |