about summary refs log tree commit diff
path: root/maddr.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 /maddr.c
parentb4df5b006b330c404a05a5dff0359f09cd2b4dde (diff)
downloadmblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.tar.gz
mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.tar.xz
mblaze-bcd258a8c87234d3c8b606dfeb608155e3d23a0d.zip
maddr, mhdr: requote display names when needed
Diffstat (limited to 'maddr.c')
-rw-r--r--maddr.c31
1 files changed, 28 insertions, 3 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);
 				}