X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=ccl%2Fcclfind.c;h=ba12079846fb8b2047839f74bddd24c9df630336;hb=45f8f517ebe10930067907c19a56557afd779826;hp=812d1244d6b1977909e4a04f196c812e0b496698;hpb=c126b2a625462f95475f00efdfdf9ce41a0e9c79;p=yaz-moved-to-github.git diff --git a/ccl/cclfind.c b/ccl/cclfind.c index 812d124..ba12079 100644 --- a/ccl/cclfind.c +++ b/ccl/cclfind.c @@ -45,7 +45,17 @@ * Europagate, 1995 * * $Log: cclfind.c,v $ - * Revision 1.14 2000-01-31 13:15:21 adam + * Revision 1.17 2000-05-01 09:36:50 adam + * Range operator only treated in ordered ranges so that minus (-) can be + * used for, say, the and-not operator. + * + * Revision 1.16 2000/03/14 09:06:11 adam + * Added POSIX threads support for frontend server. + * + * Revision 1.15 2000/02/24 23:49:13 adam + * Fixed memory allocation problem. + * + * Revision 1.14 2000/01/31 13:15:21 adam * Removed uses of assert(3). Cleanup of ODR. CCL parser update so * that some characters are not surrounded by spaces in resulting term. * ILL-code updates. @@ -130,7 +140,6 @@ * */ -#include #include #include @@ -287,6 +296,7 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp, struct ccl_rpn_attr **qa, int *term_list) { + struct ccl_rpn_attr *qa_tmp[2]; struct ccl_rpn_node *p; struct ccl_token *lookahead = cclp->look_token; int len = 0; @@ -314,7 +324,7 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp, { /* no qualifier(s) applied. Use 'term' if it is defined */ - qa = (struct ccl_rpn_attr **)malloc (2*sizeof(*qa)); + qa = qa_tmp; ccl_assert (qa); qa[0] = ccl_qual_search (cclp, "term", 4); qa[1] = NULL; @@ -425,7 +435,6 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp, if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_BOTH)) { cclp->error_code = CCL_ERR_TRUNC_NOT_BOTH; - free (qa); ccl_rpn_delete (p); return NULL; } @@ -436,7 +445,6 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp, if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_RIGHT)) { cclp->error_code = CCL_ERR_TRUNC_NOT_RIGHT; - free (qa); ccl_rpn_delete (p); return NULL; } @@ -447,7 +455,6 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp, if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_LEFT)) { cclp->error_code = CCL_ERR_TRUNC_NOT_LEFT; - free (qa); ccl_rpn_delete (p); return NULL; } @@ -576,7 +583,8 @@ static struct ccl_rpn_node *qualifiers (CCL_parser cclp, struct ccl_token *la, ADVANCE; /* skip relation */ if (KIND == CCL_TOK_TERM && - cclp->look_token->next->kind == CCL_TOK_MINUS) + cclp->look_token->next->len == 1 && + cclp->look_token->next->name[0] == '-') { struct ccl_rpn_node *p1; if (!(p1 = search_term (cclp, ap))) @@ -610,7 +618,8 @@ static struct ccl_rpn_node *qualifiers (CCL_parser cclp, struct ccl_token *la, return p1; } } - else if (KIND == CCL_TOK_MINUS) /* = - term ? */ + else if (cclp->look_token->len == 1 && + cclp->look_token->name[0] == '"') /* = - term ? */ { ADVANCE; if (!(p = search_term (cclp, ap))) @@ -668,8 +677,7 @@ static struct ccl_rpn_node *search_terms (CCL_parser cclp, struct ccl_rpn_attr **qa) { static int list[] = { - CCL_TOK_TERM, CCL_TOK_COMMA,CCL_TOK_EQ, - CCL_TOK_REL, CCL_TOK_MINUS, -1}; + CCL_TOK_TERM, CCL_TOK_COMMA,CCL_TOK_EQ, CCL_TOK_REL, -1}; struct ccl_rpn_node *p1, *p2, *pn; p1 = search_term_x (cclp, qa, list); if (!p1)