diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-12 17:15:03 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-12 17:15:03 +0100 |
commit | 963cfc9a6f6e721f52aa949e6d1af0c3e8dc2ecc (patch) | |
tree | 749b74875dbc49bcf6ed0776648b8f0ef9417407 /sys/src/cmd/upas/common/fmt.c | |
parent | 8177d20fb2709ba9290dfd41308b8e5bee4e00f8 (diff) |
merging erik quanstros nupas
Diffstat (limited to 'sys/src/cmd/upas/common/fmt.c')
-rw-r--r-- | sys/src/cmd/upas/common/fmt.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/sys/src/cmd/upas/common/fmt.c b/sys/src/cmd/upas/common/fmt.c new file mode 100644 index 000000000..e159ad269 --- /dev/null +++ b/sys/src/cmd/upas/common/fmt.c @@ -0,0 +1,35 @@ +#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); +} |