about summary refs log tree commit diff
path: root/mhdr.c
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2018-05-23 16:24:48 +0200
committerLeah Neukirchen <leah@vuxu.org>2018-05-23 16:24:48 +0200
commitbcd258a8c87234d3c8b606dfeb608155e3d23a0d (patch)
tree4191431fdff8f4acaef62685ca27f0ad75fc9a88 /mhdr.c
parentb4df5b006b330c404a05a5dff0359f09cd2b4dde (diff)
downloadmblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.tar.gz
mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.tar.xz
mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.zip
maddr, mhdr: requote display names when needed
Diffstat (limited to 'mhdr.c')
-rw-r--r--mhdr.c31
1 files changed, 28 insertions, 3 deletions
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);
+		}
 	}
 }