X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=ccl%2Fcclqual.c;fp=ccl%2Fcclqual.c;h=b0ec3f2b13ff41ea42eb0aefbc11f22cded8f370;hp=577c330ae1924326c53e9dd6b702aa5c13af3ca5;hb=79135288365437a3b1ee89ba36059dcec9f52a70;hpb=4fa3973d89505116482232547bdeede84675f535 diff --git a/ccl/cclqual.c b/ccl/cclqual.c index 577c330..b0ec3f2 100644 --- a/ccl/cclqual.c +++ b/ccl/cclqual.c @@ -44,7 +44,7 @@ /* CCL qualifiers * Europagate, 1995 * - * $Id: cclqual.c,v 1.18 2003-06-19 19:51:40 adam Exp $ + * $Id: cclqual.c,v 1.19 2003-06-23 10:22:21 adam Exp $ * * Old Europagate Log: * @@ -193,7 +193,9 @@ void ccl_qual_add_combi (CCL_bibset b, const char *n, const char *names) * 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_set (CCL_bibset b, const char *name, int no, int *pairs, + +void ccl_qual_add_set (CCL_bibset b, const char *name, int no, + int *type_ar, int *value_ar, char **svalue_ar, char **attsets) { struct ccl_qualifier *q; @@ -220,7 +222,7 @@ void ccl_qual_add_set (CCL_bibset b, const char *name, int no, int *pairs, } else { - if (q->sub) + if (q->sub) /* suspect.. */ xfree (q->sub); attrp = &q->attr_list; while (*attrp) @@ -233,8 +235,19 @@ void ccl_qual_add_set (CCL_bibset b, const char *name, int no, int *pairs, attr = (struct ccl_rpn_attr *)xmalloc (sizeof(*attr)); ccl_assert (attr); attr->set = *attsets++; - attr->type = *pairs++; - attr->value = *pairs++; + attr->type = *type_ar++; + if (*svalue_ar) + { + attr->kind = CCL_RPN_ATTR_STRING; + attr->value.str = *svalue_ar; + } + else + { + attr->kind = CCL_RPN_ATTR_NUMERIC; + attr->value.numeric = *value_ar; + } + svalue_ar++; + value_ar++; *attrp = attr; attrp = &attr->next; } @@ -273,7 +286,9 @@ void ccl_qual_rm (CCL_bibset *b) { attr1 = attr->next; if (attr->set) - xfree (attr->set); + xfree(attr->set); + if (attr->kind == CCL_RPN_ATTR_STRING) + xfree(attr->value.str); xfree (attr); } q1 = q->next;