X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=ccl%2Fcclfind.c;h=a4d0ba1b06386c57163a2cf16617b6763b6cc86e;hb=7650dadee1e1a910677c8d305aa70dbbf38e79e6;hp=99cc3b5ee8e0434a8407f7a78dfa218f9c5f0305;hpb=88ce7f5c3713fbf4992763ae38c9fb79a5ccb551;p=yaz-moved-to-github.git diff --git a/ccl/cclfind.c b/ccl/cclfind.c index 99cc3b5..a4d0ba1 100644 --- a/ccl/cclfind.c +++ b/ccl/cclfind.c @@ -45,7 +45,15 @@ * Europagate, 1995 * * $Log: cclfind.c,v $ - * Revision 1.13 1999-12-22 13:13:32 adam + * 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. + * + * Revision 1.13 1999/12/22 13:13:32 adam * Search terms may include "operators" without causing error. * * Revision 1.12 1999/11/30 13:47:11 adam @@ -127,7 +135,6 @@ #include #include -#include #include #include @@ -185,7 +192,7 @@ static void strxcat (char *n, const char *src, int len) static char *copy_token_name (struct ccl_token *tp) { char *str = (char *)malloc (tp->len + 1); - assert (str); + ccl_assert (str); memcpy (str, tp->name, tp->len); str[tp->len] = '\0'; return str; @@ -200,7 +207,7 @@ static struct ccl_rpn_node *mk_node (int kind) { struct ccl_rpn_node *p; p = (struct ccl_rpn_node *)malloc (sizeof(*p)); - assert (p); + ccl_assert (p); p->kind = kind; return p; } @@ -266,7 +273,7 @@ static void add_attr (struct ccl_rpn_node *p, int type, int value) struct ccl_rpn_attr *n; n = (struct ccl_rpn_attr *)malloc (sizeof(*n)); - assert (n); + ccl_assert (n); n->type = type; n->value = value; n->next = p->u.t.attr_list; @@ -283,6 +290,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; @@ -310,8 +318,8 @@ 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)); - assert (qa); + qa = qa_tmp; + ccl_assert (qa); qa[0] = ccl_qual_search (cclp, "term", 4); qa[1] = NULL; } @@ -389,7 +397,7 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp, /* make the RPN token */ p->u.t.term = (char *)malloc (len); - assert (p->u.t.term); + ccl_assert (p->u.t.term); p->u.t.term[0] = '\0'; for (i = 0; iu.t.term, " "); + if (src_len) + { + int len = strlen(p->u.t.term); + if (len && + !strchr("-+", *src_str) && + !strchr("-+", p->u.t.term[len-1])) + { + strcat (p->u.t.term, " "); + } + } strxcat (p->u.t.term, src_str, src_len); ADVANCE; } @@ -413,7 +429,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; } @@ -424,7 +439,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; } @@ -435,7 +449,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; } @@ -484,7 +497,7 @@ static struct ccl_rpn_node *qualifiers (CCL_parser cclp, struct ccl_token *la, for (i=0; qa[i]; i++) no++; ap = (struct ccl_rpn_attr **)malloc ((no+1) * sizeof(*ap)); - assert (ap); + ccl_assert (ap); for (i = 0; cclp->look_token != la; i++) { ap[i] = ccl_qual_search (cclp, cclp->look_token->name,