111{
112 static const char hex[] = "0123456789ABCDEF";
113 char *s0 = res;
114
115 memcpy(res, "=?", 2);
116 res += 2;
117 memcpy(res, tocode, strlen(tocode));
118 res += strlen(tocode);
119 memcpy(res, "?Q?", 3);
120 res += 3;
121 while (srclen--)
122 {
123 unsigned char c = *src++;
124 if (c == ' ')
125 {
126 *res++ = '_';
127 }
128 else if ((c >= 0x7f) || (c < 0x20) || (c ==
'_') || strchr(
RFC2047Specials, c))
129 {
130 *res++ = '=';
131 *res++ = hex[(c & 0xf0) >> 4];
132 *res++ = hex[c & 0x0f];
133 }
134 else
135 {
136 *res++ = c;
137 }
138 }
139 memcpy(res, "?=", 2);
140 res += 2;
141 return res - s0;
142}
static const char RFC2047Specials[]