(root)/
glibc-2.38/
iconvdata/
bug-iconv8.c
       1  // BZ 12601
       2  #include <stdio.h>
       3  #include <errno.h>
       4  #include <iconv.h>
       5  
       6  static int
       7  do_test (void)
       8  {
       9     iconv_t cd;
      10     char in[] = "\x83\xd9";
      11     char out[256];
      12     char *inbuf;
      13     size_t inbytesleft;
      14     char *outbuf;
      15     size_t outbytesleft;
      16     size_t ret;
      17  
      18     inbuf = in;
      19     inbytesleft = sizeof (in) - 1;
      20     outbuf = out;
      21     outbytesleft = sizeof (out);
      22  
      23     cd = iconv_open("utf-8", "cp932");
      24     ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
      25     iconv_close(cd);
      26  
      27     printf("result: %zd %d %zd %d\n", ret, errno, inbytesleft, inbuf[0]);
      28  
      29     /*
      30      * result: -1 84 0 0        (84=EILSEQ)
      31      *
      32      * Error is returned but inbuf is consumed.
      33      *
      34      * \x83\xd9 is valid shift-jis sequence but no character is assigned
      35      * to it.
      36      */
      37  
      38     return (ret != -1 || errno != EILSEQ
      39  	   || inbytesleft != 2 || inbuf[0] != in[0]);
      40  }
      41  
      42  #define TEST_FUNCTION do_test ()
      43  #include "../test-skeleton.c"