]> git.ipfire.org Git - thirdparty/glibc.git/blob - iconv/tst-iconv4.c
Avoid undefined behaviour in ibm128 implementation of llroundl (BZ #29488)
[thirdparty/glibc.git] / iconv / tst-iconv4.c
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 ("ASCII//TRANSLIT", "UTF-8");
11 if (cd == (iconv_t) -1)
12 {
13 puts ("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, &inptr, &insize, &outptr, &outsize);
25 if (ret != (size_t) -1)
26 {
27 puts ("iconv succeeded");
28 return 1;
29 }
30 if (errno != E2BIG)
31 {
32 puts ("iconv did not set errno to E2BIG");
33 return 1;
34 }
35 int res = 0;
36 if (inptr != input)
37 {
38 puts ("inptr changed");
39 res = 1;
40 }
41 if (insize != sizeof (input))
42 {
43 puts ("insize changed");
44 res = 1;
45 }
46 if (outptr != output)
47 {
48 puts ("outptr changed");
49 res = 1;
50 }
51 if (outsize != sizeof (output))
52 {
53 puts ("outsize changed");
54 res = 1;
55 }
56 if (iconv_close (cd) == -1)
57 {
58 puts ("iconv_close failed");
59 res = 1;
60 }
61 return res;
62 }
63
64 #define TEST_FUNCTION do_test ()
65 #include "../test-skeleton.c"