+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);
+}
+
+