*/
#include <h/mh.h>
+#include <h/utils.h>
#ifdef HAVE_ICONV
# include <iconv.h>
# include <errno.h>
/* .. it can't. We'll use iconv then. */
*pp = '\0';
cd = iconv_open(get_charset(), startofmime);
- fromutf8 = !strcasecmp(startofmime, "UTF-8");
+ fromutf8 = !mh_strcasecmp(startofmime, "UTF-8");
*pp = '?';
if (cd == (iconv_t)-1) continue;
use_iconv = 1;
}
#ifdef HAVE_ICONV
+ /*
+ * empty encoded text. This ensures that we don't
+ * malloc 0 bytes but skip on to the end
+ */
+ if (endofmime == startofmime && use_iconv) {
+ use_iconv = 0;
+ iconv_close(cd);
+ }
+
if (use_iconv) {
saveq = q;
savedstlen = dstlen;
- if (!(q = convbuf = (char *)malloc(endofmime - startofmime)))
- continue;
+ q = convbuf = (char *) mh_xmalloc(endofmime - startofmime);
}
/* ADDCHR2 is for adding characters when q is or might be convbuf:
* in this case on buffer-full we want to run iconv before returning.