-/* $Id: rectext.c,v 1.26 2005-03-31 12:42:07 adam Exp $
+/* $Id: rectext.c,v 1.31 2006-05-10 08:13:30 adam Exp $
Copyright (C) 1995-2005
Index Data ApS
return tinfo;
}
-static void filter_config(void *clientData, Res res, const char *args)
+static ZEBRA_RES filter_config(void *clientData, Res res, const char *args)
{
-
+ struct filter_info *tinfo = (struct filter_info*) clientData;
+ xfree(tinfo->sep);
+ tinfo->sep = 0;
+ if (args && *args)
+ tinfo->sep = xstrdup(args);
+ return ZEBRA_OK;
}
static void filter_destroy (void *clientData)
return fi;
}
-static int buf_read (struct filter_info *tinfo, struct buf_info *fi, char *dst)
+static int buf_getchar (struct filter_info *tinfo, struct buf_info *fi, char *dst)
{
if (fi->offset >= fi->max)
{
RecWord recWord;
int r;
struct buf_info *fi = buf_open (p);
+ int no_read = 0;
#if 0
yaz_log(YLOG_LOG, "filter_extract off=%ld",
(long) (*fi->p->tellf)(fi->p->fh));
#endif
- xfree(tinfo->sep);
- tinfo->sep = 0;
(*p->init)(p, &recWord);
- recWord.reg_type = 'w';
do
{
int i = 0;
- r = buf_read (tinfo, fi, w);
+ r = buf_getchar (tinfo, fi, w);
while (r > 0 && i < 511 && w[i] != '\n' && w[i] != '\r')
{
i++;
- r = buf_read (tinfo, fi, w + i);
+ r = buf_getchar (tinfo, fi, w + i);
}
if (i)
{
+ no_read += i;
recWord.term_buf = w;
recWord.term_len = i;
(*p->tokenAdd)(&recWord);
}
} while (r > 0);
buf_close (fi);
+ if (no_read == 0)
+ return RECCTRL_EXTRACT_EOF;
return RECCTRL_EXTRACT_OK;
}
&filter_type,
0,
};
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+