X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=charset.cpkg;h=b2b4d79663e97056d58b3721fe7c2cf880da1a02;hp=6934987449f18855c2c24fbf1e6e1dff3038f1bb;hb=4f1b1414371cc373f50ca79a888928635a3a3763;hpb=8f75834aeadb902879602a82a259f4d3bf9c569c diff --git a/charset.cpkg b/charset.cpkg index 6934987..b2b4d79 100644 --- a/charset.cpkg +++ b/charset.cpkg @@ -62,10 +62,13 @@ static char *charset_init(void) #ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset(PACKAGE, res); #endif + return m_strdup(res); +} - Charset_is_utf8 = charset_is_utf8(res); +static void charset_onchange(const char *cset) +{ + Charset_is_utf8 = charset_is_utf8(cset); CharsetReplacement = Charset_is_utf8 ? 0xfffd : '?'; - return m_strdup(res); } @package MCharset { @@ -91,7 +94,10 @@ static char *charset_init(void) ** .pp ** Character set your terminal uses to display and enter textual data. */ - string_t charset = charset_init(); + string_t charset = { + .init = charset_init(); + .onchange = charset_onchange($$); + }; /* ** .pp @@ -122,13 +128,13 @@ static char *charset_init(void) void charset_hook(rx_t local, const string_t alias) { rx_set_template(local, alias); - rx_list_append(&charset_hooks, local); + rx_list_add2(&charset_hooks, &local); RETURN(); }; void iconv_hook(rx_t local, const string_t alias) { rx_set_template(local, alias); - rx_list_append(&iconv_hooks, local); + rx_list_add2(&iconv_hooks, &local); RETURN(); }; }; @@ -203,8 +209,8 @@ int charset_is_us_ascii(const char *s) /* Like iconv_open, but canonicalises the charsets */ iconv_t mutt_iconv_open(const char *tocode, const char *fromcode, int flags) { - char to1[STRING]; - char from1[STRING]; + char to1[STRING], to2[STRING]; + char from1[STRING], from2[STRING]; char tmp[STRING]; iconv_t cd; @@ -225,14 +231,10 @@ iconv_t mutt_iconv_open(const char *tocode, const char *fromcode, int flags) if ((cd = iconv_open(to1, from1)) != MUTT_ICONV_ERROR) return cd; - { - char to2[STRING]; - char from2[STRING]; + if (rx_list_match2(iconv_hooks, to1, to2, sizeof(to2)) + && rx_list_match2(iconv_hooks, from1, from2, sizeof(from2))) + return iconv_open(to2, from2); - if (rx_list_match2(iconv_hooks, to1, to2, sizeof(to2)) - && rx_list_match2(iconv_hooks, from1, from2, sizeof(from2))) - return iconv_open(to2, from2); - } return MUTT_ICONV_ERROR; }