More work on iconv test program
[yaz-moved-to-github.git] / retrieval / d1_marc.c
index e649b58..5c15601 100644 (file)
@@ -3,7 +3,7 @@
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
- * $Id: d1_marc.c,v 1.22 2002-08-17 07:56:59 adam Exp $
+ * $Id: d1_marc.c,v 1.24 2002-08-23 14:27:18 adam Exp $
  */
 
 
@@ -158,11 +158,17 @@ static char *get_data(data1_node *n, int *len)
     {
         if (n->which == DATA1N_data)
         {
+            int i;
             *len = n->u.data.len;
+
+            for (i = 0; i<*len; i++)
+                if (!d1_isspace(n->u.data.data[i]))
+                    break;
             while (*len && d1_isspace(n->u.data.data[*len - 1]))
                 (*len)--;
-            if (*len != 0)
-                return n->u.data.data;
+            *len = *len - i;
+            if (*len > 0)
+                return n->u.data.data + i;
         }
         if (n->which == DATA1N_tag)
             np = n->child;
@@ -228,11 +234,15 @@ static int nodetomarc(data1_handle dh,
        }
        if (selected && !field->u.tag.node_selected)
            continue;
+
+       subf = field->child;
+        if (!subf)
+            continue;
+
         len += 4 + p->length_data_entry + p->length_starting
             + p->length_implementation;
         base_address += 3 + p->length_data_entry + p->length_starting
             + p->length_implementation;
-       subf = field->child;
 
        if (subf->which == DATA1N_data)
             is00X = 1;
@@ -289,6 +299,8 @@ static int nodetomarc(data1_handle dh,
            continue;
 
        subf = field->child;
+        if (!subf)
+            continue;
 
         if (subf->which == DATA1N_data)
             is00X = 1;