X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzrpn.c;h=99da03be1f91c6e32174027f474a70795c3cdff4;hb=2a6f64379961f30bfe6376964ce279ab5242da1f;hp=6e11e9be6ccf9a0bb878be7acc15ccf43321e114;hpb=e35491873c74b8dbba42ad427b12ef872d1e11a6;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index 6e11e9b..99da03b 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,5 +1,5 @@ -/* $Id: zrpn.c,v 1.134 2003-09-05 10:51:17 adam Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 +/* $Id: zrpn.c,v 1.136 2004-01-22 11:27:21 adam Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps This file is part of the Zebra server. @@ -966,7 +966,7 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, { /* set was found, but value wasn't defined */ char val_str[32]; - sprintf (val_str, "%d", use_value); + sprintf (val_str, "%d 1", use_value); errCode = 114; errString = nmem_strdup (stream, val_str); } @@ -1011,10 +1011,14 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, } if (!prefix_len) { +#if 1 + bases_ok++; +#else char val_str[32]; - sprintf (val_str, "%d", use_value); + sprintf (val_str, "%d 2", use_value); errCode = 114; errString = nmem_strdup (stream, val_str); +#endif continue; } bases_ok++; /* this has OK attributes */ @@ -2312,18 +2316,25 @@ static RSET rpn_search_xpath (ZebraHandle zh, xpath[level].predicate->which == XPATH_PREDICATE_RELATION && xpath[level].predicate->u.relation.name[0]) { - char predicate_str[128]; - - strcpy (predicate_str, - xpath[level].predicate->u.relation.name+1); + WRBUF wbuf = wrbuf_alloc(); + wrbuf_puts(wbuf, xpath[level].predicate->u.relation.name+1); if (xpath[level].predicate->u.relation.value) { - strcat (predicate_str, "="); - strcat (predicate_str, - xpath[level].predicate->u.relation.value); + const char *cp = xpath[level].predicate->u.relation.value; + wrbuf_putc(wbuf, '='); + + while (*cp) + { + if (strchr(REGEX_CHARS, *cp)) + wrbuf_putc(wbuf, '\\'); + wrbuf_putc(wbuf, *cp); + cp++; + } } + wrbuf_puts(wbuf, ""); rset_attr = xpath_trunc ( - zh, stream, '0', predicate_str, 3, curAttributeSet); + zh, stream, '0', wrbuf_buf(wbuf), 3, curAttributeSet); + wrbuf_free(wbuf, 1); } else {