X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fcqlutil.c;h=577844e9ca715338fc96a2c151a33510d83b1cf9;hb=5c3d2d2ab097e4bb59ba5718a396b020a2d302c0;hp=206132527d97e59b24b775fe965b0689f0d543ec;hpb=f53079fadcadb1eeef45e1e6d254801d984d6068;p=yaz-moved-to-github.git diff --git a/src/cqlutil.c b/src/cqlutil.c index 2061325..577844e 100644 --- a/src/cqlutil.c +++ b/src/cqlutil.c @@ -1,4 +1,4 @@ -/* $Id: cqlutil.c,v 1.5 2004-10-03 22:34:07 adam Exp $ +/* $Id: cqlutil.c,v 1.6 2004-11-01 20:13:02 adam Exp $ Copyright (C) 2002-2004 Index Data Aps @@ -15,7 +15,6 @@ See the file LICENSE for details. #include #include -#include #include void cql_fputs(const char *buf, void *client_data) @@ -24,7 +23,7 @@ void cql_fputs(const char *buf, void *client_data) fputs(buf, f); } -struct cql_node *cql_node_dup (struct cql_node *cp) +struct cql_node *cql_node_dup (NMEM nmem, struct cql_node *cp) { struct cql_node *cn = 0; @@ -33,51 +32,52 @@ struct cql_node *cql_node_dup (struct cql_node *cp) switch (cp->which) { case CQL_NODE_ST: - cn = cql_node_mk_sc(cp->u.st.index, + cn = cql_node_mk_sc(nmem, cp->u.st.index, cp->u.st.relation, cp->u.st.term); - cn->u.st.modifiers = cql_node_dup(cp->u.st.modifiers); + cn->u.st.modifiers = cql_node_dup(nmem, cp->u.st.modifiers); cn->u.st.index_uri = cp->u.st.index_uri ? - xstrdup(cp->u.st.index_uri) : 0; + nmem_strdup(nmem, cp->u.st.index_uri) : 0; cn->u.st.relation_uri = cp->u.st.relation_uri ? - xstrdup(cp->u.st.relation_uri) : 0; + nmem_strdup(nmem, cp->u.st.relation_uri) : 0; break; case CQL_NODE_BOOL: - cn = cql_node_mk_boolean(cp->u.boolean.value); - cn->u.boolean.left = cql_node_dup(cp->u.boolean.left); - cn->u.boolean.right = cql_node_dup(cp->u.boolean.right); + cn = cql_node_mk_boolean(nmem, cp->u.boolean.value); + cn->u.boolean.left = cql_node_dup(nmem, cp->u.boolean.left); + cn->u.boolean.right = cql_node_dup(nmem, cp->u.boolean.right); } return cn; } -struct cql_node *cql_node_mk_sc(const char *index, +struct cql_node *cql_node_mk_sc(NMEM nmem, + const char *index, const char *relation, const char *term) { - struct cql_node *p = (struct cql_node *) xmalloc(sizeof(*p)); + struct cql_node *p = (struct cql_node *) nmem_malloc(nmem, sizeof(*p)); p->which = CQL_NODE_ST; p->u.st.index = 0; if (index) - p->u.st.index = xstrdup(index); + p->u.st.index = nmem_strdup(nmem, index); p->u.st.index_uri = 0; p->u.st.term = 0; if (term) - p->u.st.term = xstrdup(term); + p->u.st.term = nmem_strdup(nmem, term); p->u.st.relation = 0; if (relation) - p->u.st.relation = xstrdup(relation); + p->u.st.relation = nmem_strdup(nmem, relation); p->u.st.relation_uri = 0; p->u.st.modifiers = 0; return p; } -struct cql_node *cql_node_mk_boolean(const char *op) +struct cql_node *cql_node_mk_boolean(NMEM nmem, const char *op) { - struct cql_node *p = (struct cql_node *) xmalloc(sizeof(*p)); + struct cql_node *p = (struct cql_node *) nmem_malloc(nmem, sizeof(*p)); p->which = CQL_NODE_BOOL; p->u.boolean.value = 0; if (op) - p->u.boolean.value = xstrdup(op); + p->u.boolean.value = nmem_strdup(nmem, op); p->u.boolean.left = 0; p->u.boolean.right = 0; p->u.boolean.modifiers = 0; @@ -89,7 +89,8 @@ const char *cql_uri() return "info:srw/cql-context-set/1/cql-v1.1"; } -struct cql_node *cql_apply_prefix(struct cql_node *n, const char *prefix, +struct cql_node *cql_apply_prefix(NMEM nmem, + struct cql_node *n, const char *prefix, const char *uri) { if (n->which == CQL_NODE_ST) @@ -101,14 +102,13 @@ struct cql_node *cql_apply_prefix(struct cql_node *n, const char *prefix, strlen(prefix) == (size_t) (cp - n->u.st.index) && !memcmp(n->u.st.index, prefix, strlen(prefix))) { - char *nval = xstrdup(cp+1); - n->u.st.index_uri = xstrdup(uri); - xfree (n->u.st.index); + char *nval = nmem_strdup(nmem, cp+1); + n->u.st.index_uri = nmem_strdup(nmem, uri); n->u.st.index = nval; } else if (!prefix && !cp) { - n->u.st.index_uri = xstrdup(uri); + n->u.st.index_uri = nmem_strdup(nmem, uri); } } if (!n->u.st.relation_uri && n->u.st.relation) @@ -118,17 +118,16 @@ struct cql_node *cql_apply_prefix(struct cql_node *n, const char *prefix, strlen(prefix) == (size_t)(cp - n->u.st.relation) && !memcmp(n->u.st.relation, prefix, strlen(prefix))) { - char *nval = xstrdup(cp+1); - n->u.st.relation_uri = xstrdup(uri); - xfree (n->u.st.relation); + char *nval = nmem_strdup(nmem, cp+1); + n->u.st.relation_uri = nmem_strdup(nmem, uri); n->u.st.relation = nval; } } } else if (n->which == CQL_NODE_BOOL) { - cql_apply_prefix(n->u.boolean.left, prefix, uri); - cql_apply_prefix(n->u.boolean.right, prefix, uri); + cql_apply_prefix(nmem, n->u.boolean.left, prefix, uri); + cql_apply_prefix(nmem, n->u.boolean.right, prefix, uri); } return n; } @@ -140,18 +139,11 @@ void cql_node_destroy(struct cql_node *cn) switch (cn->which) { case CQL_NODE_ST: - xfree (cn->u.st.index); - xfree (cn->u.st.relation); - xfree (cn->u.st.term); - xfree (cn->u.st.index_uri); - xfree (cn->u.st.relation_uri); cql_node_destroy(cn->u.st.modifiers); break; case CQL_NODE_BOOL: - xfree (cn->u.boolean.value); cql_node_destroy(cn->u.boolean.left); cql_node_destroy(cn->u.boolean.right); cql_node_destroy(cn->u.boolean.modifiers); } - xfree (cn); }