diff options
Diffstat (limited to 'mh')
-rw-r--r-- | mh/mh_format.c | 32 | ||||
-rw-r--r-- | mh/mh_init.c | 33 | ||||
-rw-r--r-- | mh/mh_list.c | 9 | ||||
-rw-r--r-- | mh/mh_stream.c | 2 |
4 files changed, 44 insertions, 32 deletions
diff --git a/mh/mh_format.c b/mh/mh_format.c index fdf995cb6..36afd2035 100644 --- a/mh/mh_format.c +++ b/mh/mh_format.c @@ -1822,40 +1822,12 @@ builtin_isreply (struct mh_machine *mach) static void decode_string (strobj_t *obj) { - char *charset = NULL; char *tmp; - int rc; - + if (strobj_is_null (obj)) return; - charset = mh_global_profile_get ("Charset", NULL); - if (!charset) - return; - if (strcasecmp (charset, "auto") == 0) - { - /* Try to deduce the charset from LC_ALL variable */ - - tmp = getenv ("LC_ALL"); - if (tmp) - { - char *sp; - char *lang; - char *terr; - lang = strtok_r (tmp, "_", &sp); - terr = strtok_r (NULL, ".", &sp); - charset = strtok_r (NULL, "@", &sp); - - if (!charset) - charset = mu_charset_lookup (lang, terr); - } - } - - if (!charset) - return; - - rc = rfc2047_decode (charset, strobj_ptr (obj), &tmp); - if (!rc) + if (mh_decode_2047 (strobj_ptr (obj), &tmp) == 0) { strobj_free (obj); strobj_create (obj, tmp); diff --git a/mh/mh_init.c b/mh/mh_init.c index 4d49be31a..db011fdbd 100644 --- a/mh/mh_init.c +++ b/mh/mh_init.c @@ -806,3 +806,36 @@ mh_set_reply_regex (const char *str) err ? ": " : "", err ? err : ""); } + +int +mh_decode_2047 (char *text, char **decoded_text) +{ + char *charset = mh_global_profile_get ("Charset", NULL); + + if (!charset) + return 1; + if (strcasecmp (charset, "auto") == 0) + { + /* Try to deduce the charset from LC_ALL variable */ + + char *tmp = getenv ("LC_ALL"); + if (tmp) + { + char *sp; + char *lang; + char *terr; + + lang = strtok_r (tmp, "_", &sp); + terr = strtok_r (NULL, ".", &sp); + charset = strtok_r (NULL, "@", &sp); + + if (!charset) + charset = mu_charset_lookup (lang, terr); + } + } + + if (!charset) + return 1; + + return rfc2047_decode (charset, text, decoded_text); +} diff --git a/mh/mh_list.c b/mh/mh_list.c index eecdc2eb3..962a08b21 100644 --- a/mh/mh_list.c +++ b/mh/mh_list.c @@ -408,7 +408,8 @@ static mhl_variable_t vartab[] = { { B_NEWLINE, "newline", dt_flag }, { B_ADDRFIELD, "addrfield", dt_flag }, { B_DATEFIELD, "datefield", dt_flag }, - + { B_DECODE, "decode", dt_flag }, + /* String variables */ { S_OVERFLOWTEXT, "overflowtext", dt_string }, { S_COMPONENT, "component", dt_string }, @@ -620,6 +621,12 @@ print_header_value (struct eval_env *env, char *val) val = p; } + if (env->bvar[B_DECODE]) + { + if (mh_decode_2047 (val, &p) == 0) + val = p; + } + if (env->bvar[B_UPPERCASE]) { for (p = val; *p; p++) diff --git a/mh/mh_stream.c b/mh/mh_stream.c index 8f7e05750..2f18b584a 100644 --- a/mh/mh_stream.c +++ b/mh/mh_stream.c @@ -206,7 +206,7 @@ restore_envelope (stream_t str, struct _mhdraft_message **pmenv) char *env_from = NULL; char *env_date = NULL; int rc; - char buffer[80]; + char buffer[128]; size_t len; off_t body_start, body_end; |