X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fmarcdisp.c;h=a5084ce35a02b81b66b4101200cab5d713f60a6e;hp=e1c6b03d2d19e8900157780f490a0490765b08b4;hb=a5ac9b8b5662012c69c5e7e5287c5ffc0c7a1f25;hpb=3eb8be5cd44ecdbd68ec3ca8a54ec86691ff9a4d diff --git a/src/marcdisp.c b/src/marcdisp.c index e1c6b03..a5084ce 100644 --- a/src/marcdisp.c +++ b/src/marcdisp.c @@ -1,8 +1,6 @@ -/* - * Copyright (C) 1995-2007, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2008 Index Data * See the file LICENSE for details. - * - * $Id: marcdisp.c,v 1.52 2007-12-17 20:59:30 adam Exp $ */ /** @@ -20,6 +18,7 @@ #include #include +#include #include #include #include @@ -468,7 +467,7 @@ int yaz_marc_write_line(yaz_marc_t mt, WRBUF wr) the code is a single character .. However we've seen multibyte codes, so see how big it really is */ size_t using_code_len = - (identifier_length != 2) ? identifier_length - 1 + (identifier_length > 2) ? identifier_length - 1 : cdata_one_character(mt, s->code_data); @@ -617,7 +616,7 @@ static int yaz_marc_write_marcxml_ns1(yaz_marc_t mt, WRBUF wr, the code is a single character .. However we've seen multibyte codes, so see how big it really is */ size_t using_code_len = - (identifier_length != 2) ? identifier_length - 1 + (identifier_length > 2) ? identifier_length - 1 : cdata_one_character(mt, s->code_data); @@ -701,6 +700,8 @@ static int yaz_marc_write_marcxml_ns(yaz_marc_t mt, WRBUF wr, int yaz_marc_write_marcxml(yaz_marc_t mt, WRBUF wr) { + /* set leader 09 to 'a' for UNICODE */ + /* http://www.loc.gov/marc/bibliographic/ecbdldrd.html#mrcblea */ if (!mt->leader_spec) yaz_marc_modify_leader(mt, 9, "a"); return yaz_marc_write_marcxml_ns(mt, wr, "http://www.loc.gov/MARC21/slim", @@ -717,12 +718,12 @@ int yaz_marc_write_marcxchange(yaz_marc_t mt, WRBUF wr, } +#if YAZ_HAVE_XML2 int yaz_marc_write_xml(yaz_marc_t mt, xmlNode **root_ptr, const char *ns, const char *format, const char *type) { -#if YAZ_HAVE_XML2 struct yaz_marc_node *n; int identifier_length; const char *leader = 0; @@ -785,7 +786,7 @@ int yaz_marc_write_xml(yaz_marc_t mt, xmlNode **root_ptr, the code is a single character .. However we've seen multibyte codes, so see how big it really is */ size_t using_code_len = - (identifier_length != 2) ? identifier_length - 1 + (identifier_length > 2) ? identifier_length - 1 : cdata_one_character(mt, s->code_data); @@ -827,10 +828,8 @@ int yaz_marc_write_xml(yaz_marc_t mt, xmlNode **root_ptr, } wrbuf_destroy(wr_cdata); return 0; -#else - return -1; -#endif } +#endif int yaz_marc_write_iso2709(yaz_marc_t mt, WRBUF wr) { @@ -1008,6 +1007,11 @@ void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd) mt->iconv_cd = cd; } +yaz_iconv_t yaz_marc_get_iconv(yaz_marc_t mt) +{ + return mt->iconv_cd; +} + void yaz_marc_modify_leader(yaz_marc_t mt, size_t off, const char *str) { struct yaz_marc_node *n; @@ -1047,7 +1051,7 @@ static int marc_exec_leader(const char *leader_spec, char *leader, size_t size) no = sscanf(cp, "%d=%20[^,]%n", &pos, val, &no_read); if (no < 2 || no_read < 3) return -1; - if (pos < 0 || pos >= size) + if (pos < 0 || (size_t) pos >= size) return -1; if (*val == '\'')