Re-implemented the element name encoding as Adams suggestion: <e tag="value"> when...
[yaz-moved-to-github.git] / src / cqltransform.c
index dbdd8aa..de777d0 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2008 Index Data
+ * Copyright (C) 1995-2010 Index Data
  * See the file LICENSE for details.
  */
 
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
-#include <yaz/cql.h>
+#include <yaz/rpn2cql.h>
 #include <yaz/xmalloc.h>
 #include <yaz/diagsrw.h>
 #include <yaz/tokenizer.h>
 #include <yaz/wrbuf.h>
 #include <yaz/z-core.h>
+#include <yaz/matchstr.h>
 #include <yaz/oid_db.h>
 #include <yaz/log.h>
 
@@ -78,7 +79,7 @@ static int cql_transform_parse_tok_line(cql_transform_t ct,
         const char *value_str = 0;
         /* attset type=value  OR  type=value */
         
-        elem = nmem_malloc(ct->nmem, sizeof(*elem));
+        elem = (Z_AttributeElement *) nmem_malloc(ct->nmem, sizeof(*elem));
         elem->attributeSet = 0;
         ae[ae_num] = elem;
         wrbuf_puts(ct->w, yaz_tok_parse_string(tp));
@@ -106,7 +107,7 @@ static int cql_transform_parse_tok_line(cql_transform_t ct,
             t = yaz_tok_move(tp);
         }
         elem->attributeType = nmem_intdup(ct->nmem, 0);
-        if (sscanf(wrbuf_cstr(type_str), "%d", elem->attributeType)
+        if (sscanf(wrbuf_cstr(type_str), ODR_INT_PRINTF, elem->attributeType)
             != 1)
         {
             wrbuf_destroy(type_str);
@@ -143,7 +144,8 @@ static int cql_transform_parse_tok_line(cql_transform_t ct,
         }
         else
         {
-            Z_ComplexAttribute *ca = nmem_malloc(ct->nmem, sizeof(*ca));
+            Z_ComplexAttribute *ca = (Z_ComplexAttribute *)
+                nmem_malloc(ct->nmem, sizeof(*ca));
             elem->which = Z_AttributeValue_complex;
             elem->value.complex = ca;
             ca->num_list = 1;
@@ -176,7 +178,7 @@ static int cql_transform_parse_tok_line(cql_transform_t ct,
             (*pp)->attr_list.attributes = 0;
         else
         {
-            (*pp)->attr_list.attributes =
+            (*pp)->attr_list.attributes = (Z_AttributeElement **)
                 nmem_malloc(ct->nmem,
                             ae_num * sizeof(Z_AttributeElement *));
             memcpy((*pp)->attr_list.attributes, ae, 
@@ -348,7 +350,7 @@ const char *cql_lookup_reverse(cql_transform_t ct,
                     
             }
             if (i == e->attr_list.num_attributes)
-                return e->pattern;
+                return e->pattern + clen;
         }
     }
     return 0;
@@ -433,7 +435,7 @@ int cql_pr_attr_uri(cql_transform_t ct, const char *category,
             int i;
             while (*cp1 && *cp1 != ' ')
                 cp1++;
-            if (cp1 - cp0 >= sizeof(buf))
+            if (cp1 - cp0 >= (ptrdiff_t) sizeof(buf))
                 break;
             memcpy(buf, cp0, cp1 - cp0);
             buf[cp1-cp0] = 0;
@@ -949,6 +951,7 @@ void cql_transform_set_error(cql_transform_t ct, int error, const char *addinfo)
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab