1 | // Derived from BZ #9793 |
2 | #include <errno.h> |
3 | #include <iconv.h> |
4 | #include <stdio.h> |
5 | |
6 | |
7 | static int |
8 | do_test (void) |
9 | { |
10 | iconv_t cd = iconv_open (tocode: "ASCII//TRANSLIT" , fromcode: "UTF-8" ); |
11 | if (cd == (iconv_t) -1) |
12 | { |
13 | puts (s: "iconv_open failed" ); |
14 | return 1; |
15 | } |
16 | |
17 | char input[2] = { 0xc2, 0xae }; /* Registered trademark */ |
18 | char *inptr = input; |
19 | size_t insize = sizeof (input); |
20 | char output[2]; /* Too short to contain "(R)". */ |
21 | char *outptr = output; |
22 | size_t outsize = sizeof (output); |
23 | |
24 | size_t ret = iconv (cd: cd, inbuf: &inptr, inbytesleft: &insize, outbuf: &outptr, outbytesleft: &outsize); |
25 | if (ret != (size_t) -1) |
26 | { |
27 | puts (s: "iconv succeeded" ); |
28 | return 1; |
29 | } |
30 | if (errno != E2BIG) |
31 | { |
32 | puts (s: "iconv did not set errno to E2BIG" ); |
33 | return 1; |
34 | } |
35 | int res = 0; |
36 | if (inptr != input) |
37 | { |
38 | puts (s: "inptr changed" ); |
39 | res = 1; |
40 | } |
41 | if (insize != sizeof (input)) |
42 | { |
43 | puts (s: "insize changed" ); |
44 | res = 1; |
45 | } |
46 | if (outptr != output) |
47 | { |
48 | puts (s: "outptr changed" ); |
49 | res = 1; |
50 | } |
51 | if (outsize != sizeof (output)) |
52 | { |
53 | puts (s: "outsize changed" ); |
54 | res = 1; |
55 | } |
56 | if (iconv_close (cd: cd) == -1) |
57 | { |
58 | puts (s: "iconv_close failed" ); |
59 | res = 1; |
60 | } |
61 | return res; |
62 | } |
63 | |
64 | #define TEST_FUNCTION do_test () |
65 | #include "../test-skeleton.c" |
66 | |