ade3ae649fb5dcb16f05b10144da3275cc8880b9
[libc-test] / src / functional / iconv_open.c
1 #include <string.h>
2 #include <errno.h>
3 #include <iconv.h>
4 #include "test.h"
5
6 int main(void)
7 {
8         iconv_t cd;
9         char buf[100];
10         char *inbuf = "test";
11         char *outbuf = buf;
12         size_t inlen = strlen(inbuf);
13         size_t outlen;
14         size_t r;
15
16         cd = iconv_open("", "");
17         if (cd != (iconv_t)-1)
18                 t_error("iconv_open(\"\",\"\") didn't fail\n");
19         if (errno != EINVAL)
20                 t_error("iconv_open(\"\",\"\") did not fail with EINVAL, got %s\n", strerror(errno));
21
22         errno = 0;
23         cd = iconv_open("UTF-8", "UTF-8");
24         if (cd == (iconv_t)-1)
25                 t_error("iconv_open(\"\",\"\") failed: %s\n", strerror(errno));
26
27         errno = 0;
28         outlen = 0;
29         r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
30         if (r != -1)
31                 t_error("iconv() did not fail with 0 output length\n");
32         if (errno != E2BIG)
33                 t_error("iconv() did not fail with E2BIG, got %s\n", strerror(errno));
34
35         errno = 0;
36         outlen = sizeof buf;
37         r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
38         if (r)
39                 t_error("iconv() did not return 0 when converting utf8 to utf8, got %d\n", r);
40         if (errno)
41                 t_error("iconv() failed: %s\n", strerror(errno));
42
43         r = iconv_close(cd);
44         if (r == -1)
45                 t_error("iconv_close failed: %s\n", strerror(errno));
46
47         return t_status;
48 }