X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fsiconvtst.c;h=bc394b8523a309c83ed1af957a9616b99bad8e9b;hb=cdb4e1fb73e8204d87a63354e6e65e18aa45f141;hp=088fc9356c1d734b060ec59198fe0babbb67ef36;hpb=48abc88bc981af496e660e8f8a7a4aa678781623;p=yaz-moved-to-github.git diff --git a/util/siconvtst.c b/util/siconvtst.c index 088fc93..bc394b8 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.2 2002-08-27 14:14:01 adam Exp $ + * $Id: siconvtst.c,v 1.7 2002-12-16 13:13:53 adam Exp $ */ #if HAVE_CONFIG_H @@ -15,53 +15,84 @@ #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, int verbose) { - 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; } } + if (verbose > 1) + { + fprintf (stderr, "yaz_iconv: inbytesleft=%d outbytesleft=%d\n", + inbytesleft, outbytesleft); + + } 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