}
/* flush the iconv conversion */
- camel_iconv (priv->ic, NULL, NULL, &outbuf, &outleft);
+ while (camel_iconv (priv->ic, NULL, NULL, &outbuf, &outleft) == (gsize) -1) {
+ if (errno != E2BIG)
+ break;
+
+ converted = outbuf - mime_filter->outbuf;
+ camel_mime_filter_set_size (mime_filter, mime_filter->outsize + 16, TRUE);
+ outbuf = mime_filter->outbuf + converted;
+ outleft = mime_filter->outsize - converted;
+ }
*out = mime_filter->outbuf;
*outlen = mime_filter->outsize - outleft;
*/
/* flush the iconv conversion */
- iconv (cd, NULL, NULL, &outbuf, &outleft);
+ while (iconv (cd, NULL, NULL, &outbuf, &outleft) == (gsize) -1) {
+ if (errno != E2BIG)
+ break;
+
+ outlen += 16;
+ converted = outbuf - out;
+ out = g_realloc (out, outlen + 4);
+ outleft = outlen - converted;
+ outbuf = out + converted;
+ }
/* Note: not all charsets can be nul-terminated with a single
* nul byte. UCS2, for example, needs 2 nul bytes and UCS4