* Copyright (c) 1997-2002, Index Data
* See the file LICENSE for details.
*
- * $Id: siconvtst.c,v 1.3 2002-08-27 21:45:28 adam Exp $
+ * $Id: siconvtst.c,v 1.6 2002-12-10 10:59:28 adam Exp $
*/
#if HAVE_CONFIG_H
#include <yaz/yaz-util.h>
-#define CHUNK 8
+#define CHUNK_IN 64
+#define CHUNK_OUT 64
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 i;
for (i = 0; i<inbytesleft; i++)
inbuf0[i] = inbuf[i];
- inbuf = inbuf0 + i;
- inbytesleft = CHUNK - inbytesleft;
- mustread = 1;
+
+ r = fread(inbuf0 + i, 1, CHUNK_IN - i, inf);
+ if (r != CHUNK_IN - i)
+ {
+ if (ferror(inf))
+ {
+ fprintf (stderr, "yaziconv: error reading file\n");
+ exit(6);
+ }
+ }
+ if (r == 0)
+ {
+ fprintf (stderr, "invalid sequence\n");
+ return ;
+ }
+ inbytesleft += r;
+ inbuf = inbuf0;
+ mustread = 0;
}
else if (e == YAZ_ICONV_E2BIG) /* no more output space */
{
fwrite (outbuf0, 1, outbuf - outbuf0, stdout);
outbuf = outbuf0;
- outbytesleft = CHUNK;
+ outbytesleft = CHUNK_OUT;
mustread = 0;
}
else
else
{
inbuf = inbuf0;
- inbytesleft = CHUNK;
+ inbytesleft = CHUNK_IN;
fwrite (outbuf0, 1, outbuf - outbuf0, stdout);
outbuf = outbuf0;
- outbytesleft = CHUNK;
+ outbytesleft = CHUNK_OUT;
mustread = 1;
}
int main (int argc, char **argv)
{
int ret;
+ int verbose = 0;
char *from = 0;
char *to = 0;
char *arg;
yaz_iconv_t cd;
FILE *inf = stdin;
- while ((ret = options ("f:t:", argv, argc, &arg)) != -2)
+ while ((ret = options ("vf:t:", argv, argc, &arg)) != -2)
{
switch (ret)
{
case 't':
to = arg;
break;
+ case 'v':
+ verbose++;
+ break;
default:
fprintf (stderr, "yaziconv: Usage\n"
- "siconv -f encoding -t encoding [file]\n");
+ "siconv -f encoding -t encoding [-v] [file]\n");
exit(1);
}
}
fprintf (stderr, "yaziconv: unsupported encoding\n");
exit (5);
}
-
+ else
+ {
+ if (verbose)
+ {
+ fprintf (stderr, "yaziconv: using %s\n",
+ yaz_iconv_isbuiltin(cd) ? "YAZ" : "iconv");
+ }
+ }
convert (inf, cd);
yaz_iconv_close (cd);
+ return 0;
}