X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcqltransform.c;h=29ff07ad5a0541c17c8a655702bd06386bf96528;hp=00305f7abab407a5e2147bf52e60d75afa9177d9;hb=4c176312acdc3444c9afc820f76a393e64668e52;hpb=33bfb14559d5991bf34f99be507a89ffefe41632 diff --git a/src/cqltransform.c b/src/cqltransform.c index 00305f7..29ff07a 100644 --- a/src/cqltransform.c +++ b/src/cqltransform.c @@ -1,5 +1,5 @@ -/* $Id: cqltransform.c,v 1.9 2004-05-25 14:06:15 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] = '#'; @@ -450,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) @@ -459,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; }