X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsiconv.c;h=7b2bf0fdbc8c6b6f4b3265bf68e2e37dba7afe96;hp=bee184bf58c519061fd0d984562e981043571e4c;hb=922617826ecc28cbdcbc5e6d5037843c7985a408;hpb=b4121b5416890fc21c34c762493161382e30a756 diff --git a/src/siconv.c b/src/siconv.c index bee184b..7b2bf0f 100644 --- a/src/siconv.c +++ b/src/siconv.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: siconv.c,v 1.22 2006-04-24 23:21:26 adam Exp $ + * $Id: siconv.c,v 1.23 2006-05-09 21:37:02 adam Exp $ */ /** * \file siconv.c @@ -785,9 +785,9 @@ static size_t flush_combos(yaz_iconv_t cd, return 0; } -static size_t yaz_write_marc8(yaz_iconv_t cd, unsigned long x, - char **outbuf, size_t *outbytesleft, - int last) +static size_t yaz_write_marc8_2(yaz_iconv_t cd, unsigned long x, + char **outbuf, size_t *outbytesleft, + int last) { int comb = 0; const char *page_chr = 0; @@ -837,6 +837,41 @@ static size_t yaz_write_marc8(yaz_iconv_t cd, unsigned long x, return 0; } +static size_t yaz_write_marc8(yaz_iconv_t cd, unsigned long x, + char **outbuf, size_t *outbytesleft, + int last) +{ + int i; + for (i = 0; latin1_comb[i].x1; i++) + { + if (x == latin1_comb[i].y) + { + size_t r ; + /* save the output pointers .. */ + char *outbuf0 = *outbuf; + size_t outbytesleft0 = *outbytesleft; + int last_ch = cd->write_marc8_last; + + r = yaz_write_marc8_2(cd, latin1_comb[i].x1, + outbuf, outbytesleft, 0); + if (r) + return r; + r = yaz_write_marc8_2(cd, latin1_comb[i].x2, + outbuf, outbytesleft, last); + if (r && cd->my_errno == YAZ_ICONV_E2BIG) + { + /* not enough room. reset output to original values */ + *outbuf = outbuf0; + *outbytesleft = outbytesleft0; + cd->write_marc8_last = last_ch; + } + return r; + } + } + return yaz_write_marc8_2(cd, x, outbuf, outbytesleft, last); +} + + #if HAVE_WCHAR_H static size_t yaz_write_wchar_t (yaz_iconv_t cd, unsigned long x, char **outbuf, size_t *outbytesleft,