X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmarcdisp.c;h=0dd8aaa2d80521d79b293ed4aea29635de68ac2e;hb=3b792849c676d96918850e2f1e0af87a75278501;hp=6544559a2338a2dc01cb2190c8fc01dc5f8930c5;hpb=401da56d4a26f687cd42024bdef6f29a29bb7663;p=yaz-moved-to-github.git diff --git a/src/marcdisp.c b/src/marcdisp.c index 6544559..0dd8aaa 100644 --- a/src/marcdisp.c +++ b/src/marcdisp.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: marcdisp.c,v 1.48 2007-03-19 14:40:07 adam Exp $ + * $Id: marcdisp.c,v 1.51 2007-09-20 17:22:45 adam Exp $ */ /** @@ -128,15 +128,7 @@ NMEM yaz_marc_get_nmem(yaz_marc_t mt) static void marc_iconv_reset(yaz_marc_t mt, WRBUF wr) { - if (mt->iconv_cd) - { - char outbuf[12]; - size_t outbytesleft = sizeof(outbuf); - char *outp = outbuf; - size_t r = yaz_iconv(mt->iconv_cd, 0, 0, &outp, &outbytesleft); - if (r != (size_t) (-1)) - wrbuf_write(wr, outbuf, outp - outbuf); - } + wrbuf_iconv_reset(wr, mt->iconv_cd); } static int marc_exec_leader(const char *leader_spec, char *leader, @@ -145,7 +137,8 @@ static int marc_exec_leader(const char *leader_spec, char *leader, static struct yaz_marc_node *yaz_marc_add_node(yaz_marc_t mt) { - struct yaz_marc_node *n = nmem_malloc(mt->nmem, sizeof(*n)); + struct yaz_marc_node *n = (struct yaz_marc_node *) + nmem_malloc(mt->nmem, sizeof(*n)); n->next = 0; *mt->nodes_pp = n; mt->nodes_pp = &n->next; @@ -264,7 +257,8 @@ void yaz_marc_add_subfield(yaz_marc_t mt, if (mt->subfield_pp) { - struct yaz_marc_subfield *n = nmem_malloc(mt->nmem, sizeof(*n)); + struct yaz_marc_subfield *n = (struct yaz_marc_subfield *) + nmem_malloc(mt->nmem, sizeof(*n)); n->code_data = nmem_strdupn(mt->nmem, code_data, code_data_len); n->next = 0; /* mark subfield_pp to point to this one, so we append here next */ @@ -491,6 +485,7 @@ int yaz_marc_write_line(yaz_marc_t mt, WRBUF wr) wrbuf_puts(wr, "("); wrbuf_iconv_write(wr, mt->iconv_cd, n->u.comment, strlen(n->u.comment)); + marc_iconv_reset(mt, wr); wrbuf_puts(wr, ")\n"); break; case YAZ_MARC_LEADER: @@ -604,7 +599,9 @@ static int yaz_marc_write_marcxml_ns1(yaz_marc_t mt, WRBUF wr, wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.controlfield.tag, strlen(n->u.controlfield.tag)); wrbuf_iconv_puts(wr, mt->iconv_cd, "\">"); - wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data); + wrbuf_iconv_write_cdata(wr, mt->iconv_cd, + n->u.controlfield.data, + strlen(n->u.controlfield.data)); marc_iconv_reset(mt, wr); wrbuf_iconv_puts(wr, mt->iconv_cd, ""); @@ -847,6 +844,7 @@ int yaz_marc_write_iso2709(yaz_marc_t mt, WRBUF wr) } /* write dummy FS (makes MARC-8 to become ASCII) */ wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' '); + marc_iconv_reset(mt, wr_data_tmp); data_length += wrbuf_len(wr_data_tmp); break; case YAZ_MARC_CONTROLFIELD: @@ -857,6 +855,7 @@ int yaz_marc_write_iso2709(yaz_marc_t mt, WRBUF wr) n->u.controlfield.data); marc_iconv_reset(mt, wr_data_tmp); wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');/* field sep */ + marc_iconv_reset(mt, wr_data_tmp); data_length += wrbuf_len(wr_data_tmp); break; case YAZ_MARC_COMMENT: