X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=ccl%2Fcclqual.c;h=c19dede86d15964b6dc07201aef3b9aa680dee91;hp=2787a7baf381baa48e36af6cc920d4f3e9765492;hb=448e7f2a48f6485a8d452c75420524fb37453bc1;hpb=3888e88cde70f36851544ab7acc04e0943470ec6 diff --git a/ccl/cclqual.c b/ccl/cclqual.c index 2787a7b..c19dede 100644 --- a/ccl/cclqual.c +++ b/ccl/cclqual.c @@ -45,7 +45,39 @@ * Europagate, 1995 * * $Log: cclqual.c,v $ - * Revision 1.5 1996-10-11 15:00:25 adam + * Revision 1.14 2000-11-16 09:58:02 adam + * Implemented local AttributeSet setting for CCL field maps. + * + * Revision 1.13 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.12 1999/11/30 13:47:11 adam + * Improved installation. Moved header files to include/yaz. + * + * Revision 1.11 1999/03/31 11:15:37 adam + * Fixed memory leaks in ccl_find_str and ccl_qual_rm. + * + * Revision 1.10 1998/07/07 15:49:40 adam + * Added braces to avoid warning. + * + * Revision 1.9 1998/02/11 11:53:33 adam + * Changed code so that it compiles as C++. + * + * Revision 1.8 1997/09/29 08:56:38 adam + * Changed CCL parser to be thread safe. New type, CCL_parser, declared + * and a create/destructers ccl_parser_create/ccl_parser/destory has + * been added. + * + * Revision 1.7 1997/09/01 08:48:12 adam + * New windows NT/95 port using MSV5.0. Only a few changes made + * to avoid warnings. + * + * Revision 1.6 1997/04/30 08:52:07 quinn + * Null + * + * Revision 1.5 1996/10/11 15:00:25 adam * CCL parser from Europagate Email gateway 1.0. * * Revision 1.9 1995/05/16 09:39:27 adam @@ -80,10 +112,9 @@ #include #include -#include #include -#include +#include /* Definition of CCL_bibset pointer */ struct ccl_qualifiers { @@ -99,25 +130,27 @@ struct ccl_qualifiers { * pairs: Attributes. pairs[0] first type, pair[1] first value, * ... pair[2*no-2] last type, pair[2*no-1] last value. */ -void ccl_qual_add (CCL_bibset b, const char *name, int no, int *pairs) +void ccl_qual_add_set (CCL_bibset b, const char *name, int no, int *pairs, + char **attsets) { struct ccl_qualifier *q; struct ccl_rpn_attr **attrp; - assert (b); + ccl_assert (b); for (q = b->list; q; q = q->next) if (!strcmp (name, q->name)) break; if (!q) { - struct ccl_qualifier *new_qual = malloc (sizeof(*new_qual)); - assert (new_qual); + struct ccl_qualifier *new_qual = + (struct ccl_qualifier *)malloc (sizeof(*new_qual)); + ccl_assert (new_qual); new_qual->next = b->list; b->list = new_qual; - new_qual->name = malloc (strlen(name)+1); - assert (new_qual->name); + new_qual->name = (char *)malloc (strlen(name)+1); + ccl_assert (new_qual->name); strcpy (new_qual->name, name); attrp = &new_qual->attr_list; } @@ -131,8 +164,9 @@ void ccl_qual_add (CCL_bibset b, const char *name, int no, int *pairs) { struct ccl_rpn_attr *attr; - attr = malloc (sizeof(*attr)); - assert (attr); + attr = (struct ccl_rpn_attr *)malloc (sizeof(*attr)); + ccl_assert (attr); + attr->set = *attsets++; attr->type = *pairs++; attr->value = *pairs++; *attrp = attr; @@ -147,8 +181,8 @@ void ccl_qual_add (CCL_bibset b, const char *name, int no, int *pairs) */ CCL_bibset ccl_qual_mk (void) { - CCL_bibset b = malloc (sizeof(*b)); - assert (b); + CCL_bibset b = (CCL_bibset)malloc (sizeof(*b)); + ccl_assert (b); b->list = NULL; return b; } @@ -170,9 +204,12 @@ void ccl_qual_rm (CCL_bibset *b) for (attr = q->attr_list; attr; attr = attr1) { attr1 = attr->next; + if (attr->set) + free (attr->set); free (attr); } q1 = q->next; + free (q->name); free (q); } free (*b); @@ -186,14 +223,18 @@ void ccl_qual_rm (CCL_bibset *b) * len: Length of name. * return: Attribute info. NULL if not found. */ -struct ccl_rpn_attr *ccl_qual_search (CCL_bibset b, const char *name, int len) +struct ccl_rpn_attr *ccl_qual_search (CCL_parser cclp, + const char *name, size_t len) { struct ccl_qualifier *q; - assert (b); - for (q = b->list; q; q = q->next) + ccl_assert (cclp); + if (!cclp->bibset) + return NULL; + for (q = cclp->bibset->list; q; q = q->next) if (strlen(q->name) == len) - if (ccl_case_sensitive) + { + if (cclp->ccl_case_sensitive) { if (!memcmp (name, q->name, len)) return q->attr_list; @@ -203,6 +244,7 @@ struct ccl_rpn_attr *ccl_qual_search (CCL_bibset b, const char *name, int len) if (!ccl_memicmp (name, q->name, len)) return q->attr_list; } + } return NULL; }