Fix null ptr reference for freeReplyObject YAZ-773
[yaz-moved-to-github.git] / src / marcdisp.c
index 78244a0..3271889 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2013 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 
@@ -257,7 +257,7 @@ static int element_name_append_attribute_value(
     /* TODO Map special codes to something possible for XML ELEMENT names */
 
     int encode = 0;
-    int index = 0;
+    size_t index = 0;
     int success = 0;
     for (index = 0; index < code_len; index++)
     {
@@ -1266,19 +1266,21 @@ int yaz_marc_write_json(yaz_marc_t mt, WRBUF w)
     for (n = mt->nodes; n; n = n->next)
     {
         struct yaz_marc_subfield *s;
-        int i;
         const char *sep = "";
         switch (n->which)
         {
+        case YAZ_MARC_LEADER:
+        case YAZ_MARC_COMMENT:
+            break;
         case YAZ_MARC_CONTROLFIELD:
             if (first)
                 first = 0;
             else
                 wrbuf_puts(w, ",\n");
             wrbuf_puts(w, "\t\t{\n\t\t\t\"");
-            wrbuf_json_puts(w, n->u.controlfield.tag);
+            wrbuf_iconv_json_puts(w, mt->iconv_cd, n->u.controlfield.tag);
             wrbuf_puts(w, "\":\"");
-            wrbuf_json_puts(w, n->u.controlfield.data);
+            wrbuf_iconv_json_puts(w, mt->iconv_cd, n->u.controlfield.data);
             wrbuf_puts(w, "\"\n\t\t}");
             break;
         case YAZ_MARC_DATAFIELD:
@@ -1297,9 +1299,11 @@ int yaz_marc_write_json(yaz_marc_t mt, WRBUF w)
                 wrbuf_puts(w, sep);
                 sep = ",\n";
                 wrbuf_puts(w, "\t\t\t\t\t{\n\t\t\t\t\t\t\"");
-                wrbuf_json_write(w, s->code_data, using_code_len);
+                wrbuf_iconv_json_write(w, mt->iconv_cd,
+                                       s->code_data, using_code_len);
                 wrbuf_puts(w, "\":\"");
-                wrbuf_json_puts(w, s->code_data + using_code_len);
+                wrbuf_iconv_json_puts(w, mt->iconv_cd,
+                                      s->code_data + using_code_len);
                 wrbuf_puts(w, "\"\n\t\t\t\t\t}");
             }
             wrbuf_puts(w, "\n\t\t\t\t]");
@@ -1308,8 +1312,7 @@ int yaz_marc_write_json(yaz_marc_t mt, WRBUF w)
                 int i;
                 for (i = 0; n->u.datafield.indicator[i]; i++)
                 {
-                    wrbuf_puts(w, ",\n");
-                    wrbuf_printf(w, "\t\t\t\t\"ind%d\":\"%c\"", i + 1,
+                    wrbuf_printf(w, ",\n\t\t\t\t\"ind%d\":\"%c\"", i + 1,
                                  n->u.datafield.indicator[i]);
                 }
             }
@@ -1320,6 +1323,7 @@ int yaz_marc_write_json(yaz_marc_t mt, WRBUF w)
     }
     wrbuf_puts(w, "\n\t]\n");
     wrbuf_puts(w, "}\n");
+    return 0;
 }
 
 int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)