| /* Contributed by Owen Taylor <otaylor@redhat.com>. */ |
| |
| #include <iconv.h> |
| #include <errno.h> |
| #include <stddef.h> |
| #include <stdio.h> |
| |
| #define BUFSIZE 10000 |
| |
| int |
| main (int argc, char *argv[]) |
| { |
| char inbuf[BUFSIZE]; |
| wchar_t outbuf[BUFSIZE]; |
| |
| iconv_t cd; |
| int i; |
| char *inptr; |
| char *outptr; |
| size_t inbytes_left, outbytes_left; |
| int count; |
| int result = 0; |
| |
| for (i=0; i < BUFSIZE; i++) |
| inbuf[i] = 'a'; |
| |
| cd = iconv_open ("UCS-4LE", "UTF-8"); |
| |
| inbytes_left = BUFSIZE; |
| outbytes_left = BUFSIZE * 4; |
| inptr = inbuf; |
| outptr = (char *) outbuf; |
| |
| count = iconv (cd, &inptr, &inbytes_left, &outptr, &outbytes_left); |
| |
| if (count < 0) |
| { |
| if (errno == E2BIG) |
| printf ("Received E2BIG\n"); |
| else |
| printf ("Received something else\n"); |
| |
| printf ("inptr change: %td\n", inptr - inbuf); |
| printf ("inlen change: %zd\n", BUFSIZE - inbytes_left); |
| printf ("outptr change: %td\n", outptr - (char *) outbuf); |
| printf ("outlen change: %zd\n", BUFSIZE * 4 - outbytes_left); |
| result = 1; |
| } |
| else |
| printf ("Succeeded\n"); |
| |
| return result; |
| } |