diff options
Diffstat (limited to 'test/iconv/tst-iconv3.c')
-rw-r--r-- | test/iconv/tst-iconv3.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/test/iconv/tst-iconv3.c b/test/iconv/tst-iconv3.c new file mode 100644 index 0000000..7853fa6 --- /dev/null +++ b/test/iconv/tst-iconv3.c @@ -0,0 +1,63 @@ +/* Contributed by Owen Taylor <otaylor@redhat.com>. */ + +#include <errno.h> +#include <stddef.h> +#include <stdio.h> + +#if defined(__GLIBC__) && !defined(__UCLIBC__) +#include <iconv.h> +#endif + +#define BUFSIZE 10000 + +static int +do_test (void) +{ +#if defined(__GLIBC__) && !defined(__UCLIBC__) + char inbuf[BUFSIZE]; + wchar_t outbuf[BUFSIZE]; + + iconv_t cd; + int i; + char *inptr; + char *outptr; + size_t inbytes_left, outbytes_left; + int count; + int result = 0; + + for (i=0; i < BUFSIZE; i++) + inbuf[i] = 'a'; + + cd = iconv_open ("UCS-4LE", "UTF-8"); + + inbytes_left = BUFSIZE; + outbytes_left = BUFSIZE * 4; + inptr = inbuf; + outptr = (char *) outbuf; + + count = iconv (cd, &inptr, &inbytes_left, &outptr, &outbytes_left); + + if (count < 0) + { + if (errno == E2BIG) + printf ("Received E2BIG\n"); + else + printf ("Received something else\n"); + + printf ("inptr change: %td\n", inptr - inbuf); + printf ("inlen change: %zd\n", BUFSIZE - inbytes_left); + printf ("outptr change: %td\n", outptr - (char *) outbuf); + printf ("outlen change: %zd\n", BUFSIZE * 4 - outbytes_left); + result = 1; + } + else + printf ("Succeeded\n"); + + return result; +#else + return 23; +#endif +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |