X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzrpn.c;h=766df2a261f8b74ff92827f09f8b7ad5f3c3fdf2;hb=6c2c89df968733e5c7dcae9ddc99b380672f3eb6;hp=c9a4ef29a2f616ca784d99ed081e89bb959a18fb;hpb=350d6eaf6f36faf17fcb2f1b80379b84496a82d6;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index c9a4ef2..766df2a 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: zrpn.c,v $ - * Revision 1.93 1999-06-17 14:38:40 adam + * Revision 1.94 1999-07-20 13:59:18 adam + * Fixed bug that occurred when phrases had 0 hits. + * + * Revision 1.93 1999/06/17 14:38:40 adam * Bug fix: Scan SEGV'ed when getting unknown use attribute. * * Revision 1.92 1999/05/26 07:49:13 adam @@ -526,6 +529,7 @@ static int term_pre (ZebraMaps zebra_maps, int reg_type, const char **src, return *s0; } +/* term_100: handle term, where trunc=none (no operators at all) */ static int term_100 (ZebraMaps zebra_maps, int reg_type, const char **src, char *dst, int space_split, char *dst_term) @@ -558,6 +562,7 @@ static int term_100 (ZebraMaps zebra_maps, int reg_type, return i; } +/* term_101: handle term, where trunc=Process # */ static int term_101 (ZebraMaps zebra_maps, int reg_type, const char **src, char *dst, int space_split, char *dst_term) @@ -599,7 +604,7 @@ static int term_101 (ZebraMaps zebra_maps, int reg_type, return i; } - +/* term_103: handle term, where trunc=re-2 (regular expressions) */ static int term_103 (ZebraMaps zebra_maps, int reg_type, const char **src, char *dst, int *errors, int space_split, char *dst_term) @@ -648,6 +653,7 @@ static int term_103 (ZebraMaps zebra_maps, int reg_type, const char **src, return i; } +/* term_103: handle term, where trunc=re-1 (regular expressions) */ static int term_102 (ZebraMaps zebra_maps, int reg_type, const char **src, char *dst, int space_split, char *dst_term) { @@ -1283,27 +1289,34 @@ static RSET rpn_prox (ZebraHandle zh, RSET *rset, int rset_no) more = (int *) xmalloc (sizeof(*more)*rset_no); buf = (struct it_key **) xmalloc (sizeof(*buf)*rset_no); + *prox_term = '\0'; for (i = 0; ino_rset_terms; j++) { const char *nflags = rset[i]->rset_terms[j]->flags; char *term = rset[i]->rset_terms[j]->name; int lterm = strlen(term); - if (length_prox_term) - prox_term[length_prox_term++] = ' '; - strcpy (prox_term + length_prox_term, term); - length_prox_term += lterm; + if (lterm + length_prox_term < sizeof(prox_term)-1) + { + if (length_prox_term) + prox_term[length_prox_term++] = ' '; + strcpy (prox_term + length_prox_term, term); + length_prox_term += lterm; + } if (min_nn > rset[i]->rset_terms[j]->nn) min_nn = rset[i]->rset_terms[j]->nn; flags = nflags; } } + for (i = 0; inn = 0; result = rset_create (rset_kind_null, &parms); } @@ -1323,7 +1337,8 @@ static RSET rpn_prox (ZebraHandle zh, RSET *rset, int rset_no) rset_temp_parms parms; RSFD rsfd_result; - parms.rset_term = rset_term_create (prox_term, -1, flags); + parms.rset_term = rset_term_create (prox_term, length_prox_term, + flags); parms.rset_term->nn = min_nn; parms.key_size = sizeof (struct it_key); parms.temp_path = res_get (zh->res, "setTmpDir"); @@ -2162,8 +2177,7 @@ static int scan_handle (char *name, const char *info, int pos, void *client) len_prefix = strlen(scan_info->prefix); if (memcmp (name, scan_info->prefix, len_prefix)) return 1; - if (pos > 0) - idx = scan_info->after - pos + scan_info->before; + if (pos > 0) idx = scan_info->after - pos + scan_info->before; else idx = - pos - 1; scan_info->list[idx].term = (char *)