diff --git a/src/functional/iconv_open.c b/src/functional/iconv_open.c new file mode 100644 index 0000000..ade3ae6 --- /dev/null +++ b/src/functional/iconv_open.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include "test.h" + +int main(void) +{ + iconv_t cd; + char buf[100]; + char *inbuf = "test"; + char *outbuf = buf; + size_t inlen = strlen(inbuf); + size_t outlen; + size_t r; + + cd = iconv_open("", ""); + if (cd != (iconv_t)-1) + t_error("iconv_open(\"\",\"\") didn't fail\n"); + if (errno != EINVAL) + t_error("iconv_open(\"\",\"\") did not fail with EINVAL, got %s\n", strerror(errno)); + + errno = 0; + cd = iconv_open("UTF-8", "UTF-8"); + if (cd == (iconv_t)-1) + t_error("iconv_open(\"\",\"\") failed: %s\n", strerror(errno)); + + errno = 0; + outlen = 0; + r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen); + if (r != -1) + t_error("iconv() did not fail with 0 output length\n"); + if (errno != E2BIG) + t_error("iconv() did not fail with E2BIG, got %s\n", strerror(errno)); + + errno = 0; + outlen = sizeof buf; + r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen); + if (r) + t_error("iconv() did not return 0 when converting utf8 to utf8, got %d\n", r); + if (errno) + t_error("iconv() failed: %s\n", strerror(errno)); + + r = iconv_close(cd); + if (r == -1) + t_error("iconv_close failed: %s\n", strerror(errno)); + + return t_status; +}