X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcqltransform.c;h=29ff07ad5a0541c17c8a655702bd06386bf96528;hp=104c02bafaa6984154246d6eec2a5772859a6a50;hb=4c176312acdc3444c9afc820f76a393e64668e52;hpb=00106dc85fcaa3b02f9a0d471ea90a594bf3a175 diff --git a/src/cqltransform.c b/src/cqltransform.c index 104c02b..29ff07a 100644 --- a/src/cqltransform.c +++ b/src/cqltransform.c @@ -1,5 +1,5 @@ -/* $Id: cqltransform.c,v 1.8 2004-03-15 21:39:06 adam Exp $ - Copyright (C) 2002-2004 +/* $Id: cqltransform.c,v 1.13 2005-01-15 19:47:11 adam Exp $ + Copyright (C) 1995-2005, Index Data ApS Index Data Aps This file is part of the YAZ toolkit. @@ -7,6 +7,11 @@ This file is part of the YAZ toolkit. See the file LICENSE. */ +/** + * \file cqltransform.c + * \brief Implements CQL transform (CQL to RPN conversion). + */ + #include #include #include @@ -208,14 +213,14 @@ int cql_pr_attr(cql_transform_t ct, const char *category, * characters starting at `term', or a null pointer of there are * none -- like memchr(). */ -static char *wcchar(const char *term, int length) +static const char *wcchar(const char *term, int length) { - char *best = 0; - char *current; + const char *best = 0; + const char *current; char *whichp; for (whichp = "*?"; *whichp != '\0'; whichp++) { - current = memchr(term, *whichp, length); + current = (const char *) memchr(term, *whichp, length); if (current != 0 && (best == 0 || current < best)) best = current; } @@ -302,7 +307,7 @@ void emit_term(cql_transform_t ct, char *mem; cql_pr_attr(ct, "truncation", "z3958", 0, pr, client_data, 28); - mem = xmalloc(length+1); + mem = (char *) xmalloc(length+1); for (i = 0; i < length; i++) { if (term[i] == '*') mem[i] = '?'; else if (term[i] == '?') mem[i] = '#'; @@ -312,16 +317,9 @@ void emit_term(cql_transform_t ct, term = mem; } else { - /* No masking characters. If there's no "truncation.none" - * configuration element, that's an error which we - * indicate (rather tangentially) as 30 "Too many masking - * characters in term". 28 would be equally meaningful - * (or meaningless) but using a different value allows us - * to differentiate between this case and the previous - * one. - */ + /* No masking characters. Use "truncation.none" if given. */ cql_pr_attr(ct, "truncation", "none", 0, - pr, client_data, 30); + pr, client_data, 0); } } @@ -457,6 +455,7 @@ int cql_transform(cql_transform_t ct, void *client_data) { struct cql_prop_entry *e; + NMEM nmem = nmem_create(); ct->error = 0; if (ct->addinfo) @@ -466,11 +465,12 @@ int cql_transform(cql_transform_t ct, for (e = ct->entry; e ; e = e->next) { if (!memcmp(e->pattern, "set.", 4)) - cql_apply_prefix(cn, e->pattern+4, e->value); + cql_apply_prefix(nmem, cn, e->pattern+4, e->value); else if (!strcmp(e->pattern, "set")) - cql_apply_prefix(cn, 0, e->value); + cql_apply_prefix(nmem, cn, 0, e->value); } cql_transform_r (ct, cn, pr, client_data); + nmem_destroy(nmem); return ct->error; }