X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=util%2Fsiconvtst.c;h=072997be3a3dfc0b0b9426e09e06a5fb5850f113;hb=9841cfd6e74acdc325bf5158fddf0b3cc2d82fab;hp=c06befe6405cdc2c90320b96ba5690a3fa91cac7;hpb=7dec30565506b5ecdd449866ebabe67bd816fc59;p=yaz-moved-to-github.git diff --git a/util/siconvtst.c b/util/siconvtst.c index c06befe..072997b 100644 --- a/util/siconvtst.c +++ b/util/siconvtst.c @@ -2,7 +2,7 @@ * Copyright (c) 1997-2002, Index Data * See the file LICENSE for details. * - * $Id: siconvtst.c,v 1.1 2002-08-27 14:02:13 adam Exp $ + * $Id: siconvtst.c,v 1.6 2002-12-10 10:59:28 adam Exp $ */ #if HAVE_CONFIG_H @@ -15,53 +15,78 @@ #include -#define CHUNK 8 +#define CHUNK_IN 64 +#define CHUNK_OUT 64 -static void convert (FILE *inf, yaz_iconv_t cd) +void convert (FILE *inf, yaz_iconv_t cd) { - char inbuf0[CHUNK], *inbuf = inbuf0; - char outbuf0[CHUNK], *outbuf = outbuf0; - size_t outbytesleft = CHUNK; - size_t inbytesleft = CHUNK; + char inbuf0[CHUNK_IN], *inbuf = inbuf0; + char outbuf0[CHUNK_OUT], *outbuf = outbuf0; + size_t inbytesleft = CHUNK_IN; + size_t outbytesleft = CHUNK_OUT; + int mustread = 1; while (1) { - size_t r = fread (inbuf, 1, inbytesleft, inf); - if (inbytesleft != r) + size_t r; + if (mustread) { - if (ferror(inf)) + r = fread (inbuf, 1, inbytesleft, inf); + if (inbytesleft != r) { - fprintf (stderr, "yaziconv: error reading file\n"); - exit (6); - } - if (r == 0) - { - if (outbuf != outbuf0) - fwrite (outbuf0, 1, outbuf - outbuf0, stdout); - break; + if (ferror(inf)) + { + fprintf (stderr, "yaziconv: error reading file\n"); + exit (6); + } + if (r == 0) + { + if (outbuf != outbuf0) + fwrite (outbuf0, 1, outbuf - outbuf0, stdout); + break; + } + inbytesleft = r; } } r = yaz_iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t)(-1)) { - if (yaz_iconv_error(cd) == YAZ_ICONV_EILSEQ) + int e = yaz_iconv_error(cd); + if (e == YAZ_ICONV_EILSEQ) { fprintf (stderr, "invalid sequence\n"); return ; } - - if (yaz_iconv_error(cd) == EINVAL) /* incomplete input */ + else if (e == YAZ_ICONV_EINVAL) /* incomplete input */ { size_t i; for (i = 0; i