-/* $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.
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] = '#';
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);
}
}
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;
}