Added destroy element to data1_node.
[yaz-moved-to-github.git] / retrieval / d1_read.c
index c951c97..e164202 100644 (file)
@@ -4,7 +4,23 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: d1_read.c,v $
- * Revision 1.1  1995-11-01 11:56:09  quinn
+ * Revision 1.6  1995-12-12 16:37:08  quinn
+ * Added destroy element to data1_node.
+ *
+ * Revision 1.5  1995/12/11  15:22:37  quinn
+ * Added last_child field to the node.
+ * Rewrote schema-mapping.
+ *
+ * Revision 1.4  1995/11/13  09:27:36  quinn
+ * Fiddling with the variant stuff.
+ *
+ * Revision 1.3  1995/11/01  16:34:57  quinn
+ * Making data1 look for tables in data1_tabpath
+ *
+ * Revision 1.2  1995/11/01  13:54:48  quinn
+ * Minor adjustments
+ *
+ * Revision 1.1  1995/11/01  11:56:09  quinn
  * Added Retrieval (data management) functions en masse.
  *
  * Revision 1.14  1995/10/30  12:40:55  quinn
 
 #include <xmalloc.h>
 #include <log.h>
-#include "data1.h"
+#include <data1.h>
+
+char *data1_tabpath = 0; /* global path for tables */
+
+void data1_set_tabpath(char *p)
+{ data1_tabpath = p; }
 
 static data1_node *freelist = 0;
 
@@ -83,8 +104,9 @@ data1_node *data1_mk_node(void)
     else
        if (!(r = xmalloc(sizeof(*r))))
            abort();
-    r->next = r->child = r->parent = 0;
+    r->next = r->child = r->last_child = r->parent = 0;
     r->num_children = 0;
+    r->destroy = 0;
     return r;
 }
 
@@ -104,6 +126,8 @@ void data1_free_tree(data1_node *t)
        data1_free_tree(p);
        p = pn;
     }
+    if (t->destroy)
+       (*t->destroy)(t);
     fr_node(t);
 }
 
@@ -122,6 +146,8 @@ data1_node *data1_insert_taggeddata(data1_node *root, data1_node *at,
     tagn->line = -1;
     tagn->u.tag.tag = 0;
     tagn->u.tag.node_selected = 0;
+    tagn->u.tag.make_variantlist = 0;
+    tagn->u.tag.no_data_requested = 0;
     if (!(tagn->u.tag.element = data1_getelementbytagname(root->u.root.absyn,
        0, tagname)))
     {
@@ -280,7 +306,7 @@ data1_node *data1_read_node(char **buf, data1_node *parent, int *line,
                *buf = t + 1;
            }
        }
-       else /* acquire our element in the abstract syntax */
+       else /* tag.. acquire our element in the abstract syntax */
        {
            data1_node *partag = get_parent_tag(parent);
            data1_element *e = 0;
@@ -312,6 +338,8 @@ data1_node *data1_read_node(char **buf, data1_node *parent, int *line,
            res->u.tag.element = elem;
            res->u.tag.tag = tag;
            res->u.tag.node_selected = 0;
+           res->u.tag.make_variantlist = 0;
+           res->u.tag.no_data_requested = 0;
            res->root = parent->root;
            *buf = t + 1;
        }
@@ -325,6 +353,7 @@ data1_node *data1_read_node(char **buf, data1_node *parent, int *line,
         */
        while ((*pp = data1_read_node(buf, res, line, absyn)))
        {
+           res->last_child = *pp;
            res->num_children++;
            pp = &(*pp)->next;
        }
@@ -414,7 +443,7 @@ data1_node *data1_read_record(int (*rf)(int, char *, size_t), int fd)
        abort();
     for (;;)
     {
-       if (rd + 4096 > size && !(buf = realloc(buf, size *= 2)))
+       if (rd + 4096 > size && !(buf =xrealloc(buf, size *= 2)))
            abort();
        if ((res = (*rf)(fd, buf + rd, 4096)) <= 0)
        {