36 lines
579 B
C
36 lines
579 B
C
#include "common.h"
|
|
|
|
int
|
|
rfc2047fmt(Fmt *fmt)
|
|
{
|
|
char *s, *p;
|
|
|
|
s = va_arg(fmt->args, char*);
|
|
if(s == nil)
|
|
return fmtstrcpy(fmt, "");
|
|
for(p=s; *p; p++)
|
|
if((uchar)*p >= 0x80)
|
|
goto hard;
|
|
return fmtstrcpy(fmt, s);
|
|
|
|
hard:
|
|
fmtprint(fmt, "=?utf-8?q?");
|
|
for(p = s; *p; p++){
|
|
if(*p == ' ')
|
|
fmtrune(fmt, '_');
|
|
else if(*p == '_' || *p == '\t' || *p == '=' || *p == '?' ||
|
|
(uchar)*p >= 0x80)
|
|
fmtprint(fmt, "=%.2uX", (uchar)*p);
|
|
else
|
|
fmtrune(fmt, (uchar)*p);
|
|
}
|
|
fmtprint(fmt, "?=");
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
mailfmtinstall(void)
|
|
{
|
|
fmtinstall('U', rfc2047fmt);
|
|
}
|