1 | |
2 | #include <iconv.h> |
3 | #include <errno.h> |
4 | #include <stddef.h> |
5 | #include <stdio.h> |
6 | |
7 | #define BUFSIZE 10000 |
8 | |
9 | static int |
10 | do_test (void) |
11 | { |
12 | char inbuf[BUFSIZE]; |
13 | wchar_t outbuf[BUFSIZE]; |
14 | |
15 | iconv_t cd; |
16 | int i; |
17 | char *inptr; |
18 | char *outptr; |
19 | size_t inbytes_left, outbytes_left; |
20 | int count; |
21 | int result = 0; |
22 | |
23 | for (i=0; i < BUFSIZE; i++) |
24 | inbuf[i] = 'a'; |
25 | |
26 | cd = iconv_open (tocode: "UCS-4LE" , fromcode: "UTF-8" ); |
27 | |
28 | inbytes_left = BUFSIZE; |
29 | outbytes_left = BUFSIZE * 4; |
30 | inptr = inbuf; |
31 | outptr = (char *) outbuf; |
32 | |
33 | count = iconv (cd: cd, inbuf: &inptr, inbytesleft: &inbytes_left, outbuf: &outptr, outbytesleft: &outbytes_left); |
34 | |
35 | if (count < 0) |
36 | { |
37 | if (errno == E2BIG) |
38 | printf (format: "Received E2BIG\n" ); |
39 | else |
40 | printf (format: "Received something else\n" ); |
41 | |
42 | printf (format: "inptr change: %td\n" , inptr - inbuf); |
43 | printf (format: "inlen change: %zd\n" , BUFSIZE - inbytes_left); |
44 | printf (format: "outptr change: %td\n" , outptr - (char *) outbuf); |
45 | printf (format: "outlen change: %zd\n" , BUFSIZE * 4 - outbytes_left); |
46 | result = 1; |
47 | } |
48 | else |
49 | printf (format: "Succeeded\n" ); |
50 | |
51 | iconv_close (cd: cd); |
52 | |
53 | return result; |
54 | } |
55 | |
56 | #define TEST_FUNCTION do_test () |
57 | #include "../test-skeleton.c" |
58 | |