- /* not enough room. reset output to original values */
- *outbuf = outbuf0;
- *outbytesleft = outbytesleft0;
- cd->write_marc8_last = last_ch;
- cd->write_marc8_lpage = lpage;
+ size_t r ;
+ /* save the output pointers .. */
+ char *outbuf0 = *outbuf;
+ size_t outbytesleft0 = *outbytesleft;
+ int last_ch = cd->write_marc8_last;
+ int ncr = cd->write_marc8_ncr;
+ const char *lpage = cd->write_marc8_lpage;
+
+ r = yaz_write_marc8_2(cd, latin1_comb[i].x1,
+ outbuf, outbytesleft, loss_mode);
+ if (r)
+ return r;
+ r = yaz_write_marc8_2(cd, latin1_comb[i].x2,
+ outbuf, outbytesleft, loss_mode);
+ 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;
+ cd->write_marc8_ncr = ncr;
+ cd->write_marc8_lpage = lpage;
+ }
+ return r;