|  | /* 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; | 
|  | } |