init_charsets();
CHARSET_MAP *mutt_get_translation(const char *_from, const char *_to){  char from_canon[SHORT_STRING];  char to_canon[SHORT_STRING];  char key[SHORT_STRING];  char *from, *to;  CHARSET *from_cs, *to_cs;  CHARSET_MAP *map;  if(!_from || !_to)    return NULL;    init_charsets();  canonical_charset(from_canon, sizeof(from_canon), _from);  canonical_charset(to_canon, sizeof(to_canon), _to);  if(!CharsetAliases || !(from = hash_find(CharsetAliases, from_canon)))    from = from_canon;  if(!CharsetAliases || !(to = hash_find(CharsetAliases, to_canon)))    to = to_canon;    /* quick check for the identity mapping */  if((from == to) || ((*from == *to) && !mutt_strcmp(from, to)))    return NULL;    snprintf(key, sizeof(key), "%s %s", from, to);  if((map = hash_find(Translations, key)) == NULL)  {    from_cs = mutt_get_charset(from);    to_cs   = mutt_get_charset(to);    if((map = build_translation(from_cs, to_cs)))      hash_insert(Translations, safe_strdup(key), map, 1);  }  return map;}