-/* $Id: cqltransform.c,v 1.9 2004-05-25 14:06:15 adam Exp $
+/* $Id: cqltransform.c,v 1.12 2004-11-01 20:13:02 adam Exp $
Copyright (C) 2002-2004
Index Data Aps
See the file LICENSE.
*/
+/**
+ * \file cqltransform.c
+ * \brief Implements CQL transform (CQL to RPN conversion).
+ */
+
#include <stdlib.h>
#include <string.h>
#include <yaz/cql.h>
* 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;
}
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] = '#';
void *client_data)
{
struct cql_prop_entry *e;
+ NMEM nmem = nmem_create();
ct->error = 0;
if (ct->addinfo)
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;
}