105{
106 static const char hex[] = "0123456789ABCDEF";
107 char *s0 = res;
108
109 memcpy(res, "=?", 2);
110 res += 2;
111 memcpy(res, tocode, strlen(tocode));
112 res += strlen(tocode);
113 memcpy(res, "?Q?", 3);
114 res += 3;
115 while (srclen--)
116 {
117 unsigned char c = *src++;
118 if (c == ' ')
119 {
120 *res++ = '_';
121 }
122 else if ((c >= 0x7f) || (c < 0x20) || (c ==
'_') || strchr(
MimeSpecials, c))
123 {
124 *res++ = '=';
125 *res++ = hex[(c & 0xf0) >> 4];
126 *res++ = hex[c & 0x0f];
127 }
128 else
129 {
130 *res++ = c;
131 }
132 }
133 memcpy(res, "?=", 2);
134 res += 2;
135 return res - s0;
136}
const char MimeSpecials[]
Characters that need special treatment in MIME.