| /* Contributed by Jiro SEKIBA <jir@yamato.ibm.com>. */ |
| #include <errno.h> |
| #include <iconv.h> |
| #include <stdbool.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #define UCS_STR "\x4e\x8c" /* EUC-TW 0xa2a2, EUC-JP 0x */ |
| |
| static const char *to_code; |
| |
| static bool |
| xiconv (iconv_t cd, int out_size) |
| { |
| unsigned char euc[4]; |
| char *inp = (char *) UCS_STR; |
| char *outp = (char *) euc; |
| size_t inbytesleft = strlen (UCS_STR); |
| size_t outbytesleft = out_size; |
| size_t ret; |
| bool fail = false; |
| |
| errno = 0; |
| ret = iconv (cd, &inp, &inbytesleft, &outp, &outbytesleft); |
| if (errno || ret == (size_t) -1) |
| { |
| fail = out_size == 4 || errno != E2BIG; |
| printf ("expected %d (E2BIG), got %d (%m)\n", E2BIG, errno); |
| } |
| else |
| { |
| printf ("%s: 0x%02x%02x\n", to_code, euc[0], euc[1]); |
| if (out_size == 1) |
| fail = true; |
| } |
| |
| return fail; |
| } |
| |
| |
| static iconv_t |
| xiconv_open (const char *code) |
| { |
| iconv_t cd; |
| to_code = code; |
| errno = 0; |
| if (errno || (cd = iconv_open (to_code, "UCS-2BE")) == (iconv_t) -1) |
| { |
| puts ("Can't open converter"); |
| exit (1); |
| } |
| return cd; |
| } |
| |
| |
| int |
| main (void) |
| { |
| iconv_t cd; |
| int result = 0; |
| |
| cd = xiconv_open ("EUC-TW"); |
| result |= xiconv (cd, 4) == true; |
| puts ("---"); |
| result |= xiconv (cd, 1) == true; |
| puts ("---"); |
| iconv_close (cd); |
| |
| cd = xiconv_open ("EUC-JP"); |
| result |= xiconv (cd, 4) == true; |
| puts ("---"); |
| result |= xiconv (cd, 1) == true; |
| puts ("---"); |
| iconv_close (cd); |
| |
| return result; |
| } |