1 | #include <iconv.h> |
2 | #include <stdint.h> |
3 | #include <stdio.h> |
4 | |
5 | |
6 | static int |
7 | do_test (void) |
8 | { |
9 | iconv_t cd = iconv_open (tocode: "utf-8" , fromcode: "unicode" ); |
10 | if (cd == (iconv_t) -1) |
11 | { |
12 | puts (s: "cannot open iconv module" ); |
13 | return 1; |
14 | } |
15 | |
16 | static const uint16_t us[] = { 0xfeff, 0x0041, 0x0042, 0x0043 }; |
17 | char buf[100]; |
18 | |
19 | char *inbuf; |
20 | size_t inlen; |
21 | char *outbuf; |
22 | size_t outlen; |
23 | size_t n; |
24 | |
25 | inbuf = (char *) us; |
26 | inlen = sizeof (us); |
27 | outbuf = buf; |
28 | outlen = sizeof (buf); |
29 | n = iconv (cd: cd, inbuf: &inbuf, inbytesleft: &inlen, outbuf: &outbuf, outbytesleft: &outlen); |
30 | if (n == (size_t) -1 || inlen != 0 || outlen != sizeof (buf) - 3) |
31 | { |
32 | puts (s: "first conversion failed" ); |
33 | return 1; |
34 | } |
35 | |
36 | iconv (cd: cd, NULL, NULL, NULL, NULL); |
37 | |
38 | inbuf = (char *) us; |
39 | inlen = sizeof (us); |
40 | outbuf = buf; |
41 | outlen = sizeof (buf); |
42 | n = iconv (cd: cd, inbuf: &inbuf, inbytesleft: &inlen, outbuf: &outbuf, outbytesleft: &outlen); |
43 | if (n == (size_t) -1 || inlen != 0 || outlen != sizeof (buf) - 3) |
44 | { |
45 | puts (s: "second conversion failed" ); |
46 | return 1; |
47 | } |
48 | |
49 | return 0; |
50 | } |
51 | |
52 | #define TEST_FUNCTION do_test () |
53 | #include "../test-skeleton.c" |
54 | |