Date: Sun, 11 Sep 2011 17:38:44 -0700 From: Tim Kientzle <kientzle@freebsd.org> To: FreeBSD-current Current <freebsd-current@freebsd.org> Subject: iconv not reporting errors? Message-ID: <F485CB54-88C7-4D5A-B3E8-AC5CF6DF226B@freebsd.org>
next in thread | raw e-mail | index | archive | help
I'm trying to use the iconv that's in FreeBSD-CURRENT and it's not = reporting errors the way I expect. To demonstrate, here's a test = program that tries to convert UTF-8 to KOI8-R. This should report an = error, since the UTF-8 string here "=C4=90=C3=92=C3=89=C3=97=C3=85=C3=94" = contains characters not available in KOI8-R. On FreeBSD-CURRENT (updated yesterday), the iconv() call returns 0, = consumes the entire input, and generates 9 characters "D`O'ExA^O". I = believe that the call should return 6 in this case, since each of the = six input characters were converted to "non-identical" characters in the = output. The term "non-identical" is used in the return value description of: http://pubs.opengroup.org/onlinepubs/007908799/xsh/iconv.html For comparison, I tried this on MacOS, where the iconv() call returns = -1, consumes no input, and generates no output. #include <iconv.h> #include <stdio.h> #include <string.h> int main(int argc, char **argv) { const char *input =3D = "\303\220\303\222\303\211\303\227\303\205\303\224"; const char *in =3D input; size_t insize =3D strlen(in); char outbuff[64]; char *out =3D outbuff; size_t outsize =3D sizeof(outbuff); iconv_t cd =3D iconv_open("KOI8-R", "UTF-8"); size_t s =3D iconv(cd, &in, &insize, &out, &outsize); *out =3D '\0'; printf("s =3D %d\n", (int)s); printf("insize =3D %d\n", (int)insize); printf("outsize =3D %d\n", (int)outsize); printf("%s", outbuff); return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F485CB54-88C7-4D5A-B3E8-AC5CF6DF226B>