mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-27 04:41:02 +08:00
44 lines
903 B
C
44 lines
903 B
C
// BZ 12601
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <iconv.h>
|
|
|
|
static int
|
|
do_test (void)
|
|
{
|
|
iconv_t cd;
|
|
char in[] = "\x83\xd9";
|
|
char out[256];
|
|
char *inbuf;
|
|
size_t inbytesleft;
|
|
char *outbuf;
|
|
size_t outbytesleft;
|
|
size_t ret;
|
|
|
|
inbuf = in;
|
|
inbytesleft = sizeof(in) - 1;
|
|
outbuf = out;
|
|
outbytesleft = sizeof(out);
|
|
|
|
cd = iconv_open("utf-8", "cp932");
|
|
ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
|
|
iconv_close(cd);
|
|
|
|
printf("result: %ld %d %ld %d\n", ret, errno, inbytesleft, inbuf[0]);
|
|
|
|
/*
|
|
* result: -1 84 0 0 (84=EILSEQ)
|
|
*
|
|
* Error is returnd but inbuf is consumed.
|
|
*
|
|
* \x83\xd9 is valid shift-jis sequence but no character is assigned
|
|
* to it.
|
|
*/
|
|
|
|
return (ret != -1 || errno != EILSEQ
|
|
|| inbytesleft != 2 || inbuf[0] != in[0]);
|
|
}
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
#include "../test-skeleton.c"
|