X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fsiconvtst.c;h=9f7038ece3b62d255e79c8ebf4be86812068a17b;hb=a84b343fd22845cbd7bea563e77250a84e48463b;hp=c06befe6405cdc2c90320b96ba5690a3fa91cac7;hpb=7dec30565506b5ecdd449866ebabe67bd816fc59;p=yaz-moved-to-github.git diff --git a/util/siconvtst.c b/util/siconvtst.c index c06befe..9f7038e 100644 --- a/util/siconvtst.c +++ b/util/siconvtst.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1997-2002, Index Data + * Copyright (c) 1997-2003, 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.8 2003-01-06 08:20:28 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