diff -r a8003c55a83e rfc2047.c --- a/rfc2047.c Wed Mar 1 11:02:27 2006 +++ b/rfc2047.c Fri Mar 3 21:07:08 2006 @@ -618,6 +618,42 @@ #endif ptr = ptr->next; } +} + +static int skip_nl (char **s) +{ + BUFFER *b = NULL; + wchar_t wc; + size_t k, k2; + char scratch[MB_LEN_MAX + 1]; + char *p = *s; + mbstate_t mbstate1, mbstate2; + + if (!(b = mutt_buffer_init (b))) + return -1; + memset (&mbstate1, 0, sizeof (mbstate1)); + memset (&mbstate2, 0, sizeof (mbstate2)); + for (; (k = mbrtowc (&wc, p, MB_LEN_MAX, &mbstate1)); p += k) + { + if (k == (size_t)(-1) || k == (size_t)(-2)) + { + k = 1; + wc = '?'; + } +#if 0 + if (!IsWPrint (wc)) +#else + if (wc == '\n') +#endif + wc = '?'; + k2 = wcrtomb (scratch, wc, &mbstate2); + scratch[k2] = '\0'; + mutt_buffer_addstr (b, scratch); + } + FREE (s); + *s = b->data; + FREE (&b); + return 0; } static int rfc2047_decode_word (char *d, const char *s, size_t len) @@ -705,6 +741,7 @@ if (charset) mutt_convert_string (&d0, charset, Charset, M_ICONV_HOOK_FROM); + skip_nl (&d0); strfcpy (d, d0, len); FREE (&charset); FREE (&d0);