diff --git a/maddr.c b/maddr.c index d8ac123..3e43eca 100644 --- a/maddr.c +++ b/maddr.c @@ -13,6 +13,29 @@ static char defaulthflags[] = "from:sender:reply-to:to:cc:bcc:" "resent-from:resent-sender:resent-to:resent-cc:resent-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) { @@ -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 @@ -58,6 +58,29 @@ headerall(struct message *msg) blaze822_free(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) { @@ -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); + } } }