+#ifdef HAVE_ICONV
+ if (ic_chck != (iconv_t)-1) {
+ char convbuf[1024];
+ char *in_buf = buf, *out_buf = convbuf;
+ size_t in_cnt = len, out_cnt = sizeof convbuf - 1;
+
+ iconv(ic_chck, NULL, 0, NULL, 0);
+ while (iconv(ic_chck, &in_buf,&in_cnt,
+ &out_buf,&out_cnt) == (size_t)-1) {
+ if (out_buf != convbuf) {
+ filtered_fwrite(convbuf, out_buf - convbuf, f);
+ out_buf = convbuf;
+ out_cnt = sizeof convbuf - 1;
+ }
+ if (errno == E2BIG)
+ continue;
+ fprintf(f, "\\%04o", *(uchar*)in_buf++);
+ in_cnt--;
+ }
+ if (out_buf != convbuf)
+ filtered_fwrite(convbuf, out_buf - convbuf, f);
+ } else
+#endif
+ filtered_fwrite(buf, len, f);