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