Blame iconvdata/bug-iconv8.c

Packit 6c4009
// BZ 12601
Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <errno.h>
Packit 6c4009
#include <iconv.h>
Packit 6c4009
Packit 6c4009
static int
Packit 6c4009
do_test (void)
Packit 6c4009
{
Packit 6c4009
   iconv_t cd;
Packit 6c4009
   char in[] = "\x83\xd9";
Packit 6c4009
   char out[256];
Packit 6c4009
   char *inbuf;
Packit 6c4009
   size_t inbytesleft;
Packit 6c4009
   char *outbuf;
Packit 6c4009
   size_t outbytesleft;
Packit 6c4009
   size_t ret;
Packit 6c4009
Packit 6c4009
   inbuf = in;
Packit 6c4009
   inbytesleft = sizeof(in) - 1;
Packit 6c4009
   outbuf = out;
Packit 6c4009
   outbytesleft = sizeof(out);
Packit 6c4009
Packit 6c4009
   cd = iconv_open("utf-8", "cp932");
Packit 6c4009
   ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
Packit 6c4009
   iconv_close(cd);
Packit 6c4009
Packit 6c4009
   printf("result: %zd %d %zd %d\n", ret, errno, inbytesleft, inbuf[0]);
Packit 6c4009
Packit 6c4009
   /*
Packit 6c4009
    * result: -1 84 0 0        (84=EILSEQ)
Packit 6c4009
    *
Packit 6c4009
    * Error is returnd but inbuf is consumed.
Packit 6c4009
    *
Packit 6c4009
    * \x83\xd9 is valid shift-jis sequence but no character is assigned
Packit 6c4009
    * to it.
Packit 6c4009
    */
Packit 6c4009
Packit 6c4009
   return (ret != -1 || errno != EILSEQ
Packit 6c4009
	   || inbytesleft != 2 || inbuf[0] != in[0]);
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#define TEST_FUNCTION do_test ()
Packit 6c4009
#include "../test-skeleton.c"