{
return Charset_is_utf8 ? 0xfffd : '?';
}
+
+int mutt_filter_unprintable (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 = replacement_char();
+ }
+ if (!IsWPrint (wc))
+ wc = '?';
+ k2 = wcrtomb (scratch, wc, &mbstate2);
+ scratch[k2] = '\0';
+ mutt_buffer_addstr (b, scratch);
+ }
+ FREE (s); /* __FREE_CHECKED__ */
+ *s = b->data ? b->data : safe_calloc (1, 1);
+ FREE (&b);
+ return 0;
+}
+
void mutt_edit_content_type (HEADER *, BODY *, FILE *);
void mutt_edit_file (const char *, const char *);
void mutt_edit_headers (const char *, const char *, HEADER *, char *, size_t);
+int mutt_filter_unprintable (char **);
void mutt_curses_error (const char *, ...);
void mutt_curses_message (const char *, ...);
void mutt_enter_command (void);
if (charset)
mutt_convert_string (&d0, charset, Charset, M_ICONV_HOOK_FROM);
+ mutt_filter_unprintable (&d0);
strfcpy (d, d0, len);
FREE (&charset);
FREE (&d0);
s = rfc2231_get_charset (p->value, charset, sizeof (charset));
rfc2231_decode_one (p->value, s);
mutt_convert_string (&p->value, charset, Charset, M_ICONV_HOOK_FROM);
+ mutt_filter_unprintable (&p->value);
*last = p;
last = &p->next;