data1_concat_text didnt set last_child right in all cases
[idzebra-moved-to-github.git] / data1 / d1_read.c
index 9630dff..6e179d9 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: d1_read.c,v 1.2 2002-10-22 13:19:50 adam Exp $
-   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+/* $Id: d1_read.c,v 1.5 2003-09-08 10:26:51 adam Exp $
+   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003
    Index Data Aps
 
 This file is part of the Zebra server.
@@ -322,7 +322,7 @@ data1_node *data1_search_tag (data1_handle dh, data1_node *n,
     }
     for (; n; n = n->next)
        if (n->which == DATA1N_tag && n->u.tag.tag &&
-           !yaz_matchstr (tag, n->u.tag.tag))
+           !yaz_matchstr (n->u.tag.tag, tag))
        {
            return n;
        }
@@ -1097,7 +1097,7 @@ int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
                   const char *tocode, 
                   const char *fromcode)
 {
-    if (strcmp (tocode, fromcode))
+    if (yaz_matchstr (tocode, fromcode))
     {
         WRBUF wrbuf = wrbuf_alloc();
         yaz_iconv_t t = yaz_iconv_open (tocode, fromcode);
@@ -1109,3 +1109,33 @@ int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
     }
     return 0;
 }
+
+void data1_concat_text(data1_handle dh, NMEM m, data1_node *n)
+{
+    for (; n; n = n->next)
+    {
+        if (n->which == DATA1N_data && n->next && 
+            n->next->which == DATA1N_data)
+        {
+            int sz = 0;
+            int off = 0;
+            char *ndata;
+            data1_node *np;
+            for (np = n; np && np->which == DATA1N_data; np=np->next)
+                sz += np->u.data.len;
+            ndata = nmem_malloc(m, sz);
+            for (np = n; np && np->which == DATA1N_data; np=np->next)
+            {
+                memcpy(ndata+off, np->u.data.data, np->u.data.len);
+                off += np->u.data.len;
+            }
+            n->u.data.data = ndata;
+            n->u.data.len = sz;
+            n->next = np;
+           if (!np && n->parent)
+               n->parent->last_child = n;
+               
+        }
+        data1_concat_text(dh, m, n->child);
+    }
+}