X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fsafari.c;h=7ad9a5ed2750de0e23c707fb0c5853b6494dd93a;hb=c19bdb08393eb7b97f7783cb576f223b4fc505ed;hp=8327bdab6fa746f9f3b517f4427aed084eb96537;hpb=deb0cef3d4d19dc6508b2fed71711b3fb1be26a2;p=idzebra-moved-to-github.git diff --git a/index/safari.c b/index/safari.c index 8327bda..7ad9a5e 100644 --- a/index/safari.c +++ b/index/safari.c @@ -1,5 +1,5 @@ -/* $Id: safari.c,v 1.3 2006-08-16 13:16:36 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: safari.c,v 1.10 2007-10-29 16:57:53 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -20,7 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - +#include #include #include #include @@ -81,7 +81,7 @@ static int fi_getchar(struct fi_info *fi, char *dst) { if (fi->max <= 0) return 0; - fi->max = (*fi->p->readf)(fi->p->fh, fi->buf, 4096); + fi->max = fi->p->stream->readf(fi->p->stream, fi->buf, 4096); fi->offset = 0; if (fi->max <= 0) return 0; @@ -127,21 +127,29 @@ static int filter_extract(void *clientData, struct recExtractCtrl *p) (*p->init)(p, &recWord); if (!fi_gets(fi, line, sizeof(line)-1)) - return RECCTRL_EXTRACT_ERROR_GENERIC; + return RECCTRL_EXTRACT_EOF; sscanf(line, "%255s", p->match_criteria); - recWord.index_type = '0'; while (fi_gets(fi, line, sizeof(line)-1)) { int nor = 0; char field[40]; - char *cp; + const char *cp = line; + char type_cstr[2]; #if 0 yaz_log(YLOG_LOG, "safari line: %s", line); #endif + type_cstr[1] = '\0'; + if (*cp >= '0' && *cp <= '9') + type_cstr[0] = '0'; /* the default is 0 (raw) */ + else + type_cstr[0] = *cp++; /* type given */ + type_cstr[1] = '\0'; + + recWord.index_type = type_cstr; if (tinfo->segments) { - if (sscanf(line, ZINT_FORMAT " " ZINT_FORMAT " " ZINT_FORMAT + if (sscanf(cp, ZINT_FORMAT " " ZINT_FORMAT " " ZINT_FORMAT ZINT_FORMAT " %39s %n", &recWord.record_id, &recWord.section_id, &recWord.segment, @@ -154,7 +162,7 @@ static int filter_extract(void *clientData, struct recExtractCtrl *p) } else { - if (sscanf(line, ZINT_FORMAT " " ZINT_FORMAT " " ZINT_FORMAT " %39s %n", + if (sscanf(cp, ZINT_FORMAT " " ZINT_FORMAT " " ZINT_FORMAT " %39s %n", &recWord.record_id, &recWord.section_id, &recWord.seqno, field, &nor) < 4) { @@ -162,7 +170,7 @@ static int filter_extract(void *clientData, struct recExtractCtrl *p) return RECCTRL_EXTRACT_ERROR_GENERIC; } } - for (cp = line + nor; *cp == ' '; cp++) + for (cp = cp + nor; *cp == ' '; cp++) ; recWord.index_name = field; recWord.term_buf = cp; @@ -236,7 +244,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) } if (!make_body) break; - r = (*p->readf)(p->fh, filter_buf + filter_ptr, 4096); + r = p->stream->readf(p->stream, filter_buf + filter_ptr, 4096); if (r <= 0) break; filter_ptr += r; @@ -262,7 +270,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) filter_ptr = p-filter_buf; } } - p->output_format = VAL_SUTRS; + p->output_format = yaz_oid_recsyn_sutrs; p->rec_buf = filter_buf; p->rec_len = filter_ptr; return 0;