diff options
author | Leah Neukirchen <leah@vuxu.org> | 2018-05-23 16:24:48 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2018-05-23 16:24:48 +0200 |
commit | bcd258a8c87234d3c8b606dfeb608155e3d23a0d (patch) | |
tree | 4191431fdff8f4acaef62685ca27f0ad75fc9a88 | |
parent | b4df5b006b330c404a05a5dff0359f09cd2b4dde (diff) | |
download | mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.tar.gz mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.tar.xz mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.zip |
maddr, mhdr: requote display names when needed
-rw-r--r-- | maddr.c | 31 | ||||
-rw-r--r-- | mhdr.c | 31 |
2 files changed, 56 insertions, 6 deletions
diff --git a/maddr.c b/maddr.c index d8ac123..3e43eca 100644 --- a/maddr.c +++ b/maddr.c @@ -14,6 +14,29 @@ static char defaulthflags[] = "from:sender:reply-to:to:cc:bcc:" static char *hflag = defaulthflags; void +print_quoted(char *s) +{ + char *t; + + for (t = s; *t; t++) + if ((unsigned char)*t < 32 || strchr("()<>[]:;@\\,.\"", *t)) + goto quote; + + printf("%s", s); + return; + +quote: + putchar('"'); + for (t = s; *t; t++) { + if (*t == '"' || *t == '\\') + putchar('\\'); + putchar(*t); + } + putchar('"'); + +} + +void addr(char *file) { while (*file == ' ' || *file == '\t') @@ -41,10 +64,12 @@ addr(char *file) if (disp && addr && strcmp(disp, addr) == 0) disp = 0; if (disp && addr) { - if (aflag) + if (aflag) { printf("%s\n", addr); - else - printf("%s <%s>\n", disp, addr); + } else { + print_quoted(disp); + printf(" <%s>\n", addr); + } } else if (addr) { printf("%s\n", addr); } diff --git a/mhdr.c b/mhdr.c index 7836a84..d19093b 100644 --- a/mhdr.c +++ b/mhdr.c @@ -59,6 +59,29 @@ headerall(struct message *msg) } void +print_quoted(char *s) +{ + char *t; + + for (t = s; *t; t++) + if ((unsigned char)*t < 32 || strchr("()<>[]:;@\\,.\"", *t)) + goto quote; + + printf("%s", s); + return; + +quote: + putchar('"'); + for (t = s; *t; t++) { + if (*t == '"' || *t == '\\') + putchar('\\'); + putchar(*t); + } + putchar('"'); + +} + +void print_addresses(char *s) { char *disp, *addr; @@ -74,10 +97,12 @@ print_addresses(char *s) if (Hflag && addr) printf("%s\t", curfile); - if (disp && addr) - printf("%s <%s>\n", disp, addr); - else if (addr) + if (disp && addr) { + print_quoted(disp); + printf(" <%s>\n", addr); + } else if (addr) { printf("%s\n", addr); + } } } |