- if (!mutt_is_us_ascii (charset))
- encode = 1;
-
- for (s = d, slen = dlen; slen; s++, slen--)
- if (*s < 0x20 || *s >= 0x7f)
- encode = 1, ++ext;
- else if (strchr (MimeSpecials, *s) || strchr ("*'%", *s))
- ++ext;
-
- if (encode) {
- e = p_new(char, dlen + 2 * ext + m_strlen(charset) + 3);
- sprintf (e, "%s''", charset); /* __SPRINTF_CHECKED__ */
- t = e + m_strlen(e);
- for (s = d, slen = dlen; slen; s++, slen--)
- if (*s < 0x20 || *s >= 0x7f ||
- strchr (MimeSpecials, *s) || strchr ("*'%", *s)) {
- sprintf (t, "%%%02X", (unsigned char) *s);
- t += 3;
- }
- else
- *t++ = *s;
- *t = '\0';
-
- if (d != *pd)
- p_delete(&d);
- p_delete(pd);
- *pd = e;