2007.
[idzebra-moved-to-github.git] / index / marcread.c
index 93abbc5..1cc7de2 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: marcread.c,v 1.3 2006-08-22 13:39:27 adam Exp $
-   Copyright (C) 1995-2006
+/* $Id: marcread.c,v 1.6 2007-01-15 15:10:16 adam Exp $
+   Copyright (C) 1995-2007
    Index Data ApS
 
 This file is part of the Zebra server.
@@ -116,7 +116,7 @@ static data1_node *grs_read_iso2709 (struct grs_read_info *p, int marc_xml)
     else
        res_top = data1_mk_tag (p->dh, p->mem, absynName, 0, res_root);
 
-    if ((marctab = data1_absyn_getmarctab(p->dh, res_root->u.root.absyn)))
+    if ((marctab = data1_absyn_getmarctab(p->dh, res_root)))
     {
        memcpy(marctab->leader, buf, 24);
         memcpy(marctab->implementation_codes, buf+6, 4);
@@ -706,7 +706,7 @@ static int is_empty(char *s)
 static void parse_data1_tree(struct grs_read_info *p, const char *mc_stmnt,
                             data1_node *root)
 {
-    data1_marctab *marctab = data1_absyn_getmarctab(p->dh, root->u.root.absyn);
+    data1_marctab *marctab = data1_absyn_getmarctab(p->dh, root);
     data1_node *top = root->child;
     data1_node *field;
     mc_context *c;
@@ -736,9 +736,12 @@ static void parse_data1_tree(struct grs_read_info *p, const char *mc_stmnt,
        yaz_log(YLOG_LOG,"parse_data1_tree(): try LEADER from {%d} to {%d} positions",
            pf->interval.start, pf->interval.end);
 #endif 
-       new = data1_mk_tag_n(p->dh, p->mem, mc_stmnt, strlen(mc_stmnt), 0, top);
-       data1_mk_text_n(p->dh, p->mem, marctab->leader+pf->interval.start,
-           pf->interval.end-pf->interval.start+1, new);
+        if (marctab)
+        {
+            new = data1_mk_tag_n(p->dh, p->mem, mc_stmnt, strlen(mc_stmnt), 0, top);
+            data1_mk_text_n(p->dh, p->mem, marctab->leader+pf->interval.start,
+                            pf->interval.end-pf->interval.start+1, new);
+        }
     }
     else
     {
@@ -787,7 +790,7 @@ data1_node *grs_read_marcxml(struct grs_read_info *p)
     if (!root)
        return 0;
        
-    for (e = data1_absyn_getelements(p->dh, root->u.root.absyn); e; e=e->next)
+    for (e = data1_absyn_getelements(p->dh, root); e; e=e->next)
     {
        data1_tag *tag = e->tag;
        
@@ -806,7 +809,7 @@ data1_node *grs_read_marc(struct grs_read_info *p)
     if (!root)
        return 0;
        
-    for (e = data1_absyn_getelements(p->dh, root->u.root.absyn); e; e=e->next)
+    for (e = data1_absyn_getelements(p->dh, root); e; e=e->next)
     {
        data1_tag *tag = e->tag;