char *mutt_choose_charset (const char *fromcode, const char *charsets,
char *u, size_t ulen, char **d, size_t *dlen)
{
+ char canonical_buff[LONG_STRING];
char *e = 0, *tocode = 0;
size_t elen = 0, bestn = 0;
const char *p, *q;
*d = e;
if (dlen)
*dlen = elen;
+
+ mutt_canonical_charset (canonical_buff, sizeof (canonical_buff), tocode);
+ mutt_str_replace (&tocode, canonical_buff);
}
return tocode;
}
if (cd1 == (iconv_t)(-1))
return -1;
- cd = safe_malloc (ncodes * sizeof (iconv_t));
- score = safe_malloc (ncodes * sizeof (size_t));
- states = safe_malloc (ncodes * sizeof (CONTENT_STATE));
- infos = safe_malloc (ncodes * sizeof (CONTENT));
-
- memset (score, 0, ncodes * sizeof (size_t));
- memset (states, 0, ncodes * sizeof (CONTENT_STATE));
- memset (infos, 0, ncodes * sizeof (CONTENT));
+ cd = safe_malloc (ncodes * sizeof (iconv_t));
+ score = safe_calloc (1, ncodes * sizeof (size_t));
+ states = safe_calloc (1, ncodes * sizeof (CONTENT_STATE));
+ infos = safe_calloc (1, ncodes * sizeof (CONTENT));
+
for (i = 0; i < ncodes; i++)
if (strcasecmp (tocodes[i], "UTF-8"))
cd[i] = mutt_iconv_open (tocodes[i], "UTF-8", 0);
if (!chs)
{
mutt_canonical_charset (chsbuf, sizeof (chsbuf), tocode);
- mutt_set_parameter ("charset", tocode, &b->parameter);
+ mutt_set_parameter ("charset", chsbuf, &b->parameter);
}
safe_free ((void **) &tocode);
safe_fclose (&fp);