about summary refs log tree commit diff
path: root/magrep.c
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2018-02-04 20:10:49 +0100
committerLeah Neukirchen <leah@vuxu.org>2018-02-04 20:10:49 +0100
commit80a74ddc982f577446837cd58199d55b666551d4 (patch)
treee76371ddc2adc7d5edebc3300f977a39f9a8c463 /magrep.c
parente87140e226feaf2010e2671138c1c69885d62b39 (diff)
downloadmblaze-80a74ddc982f577446837cd58199d55b666551d4.tar.gz
mblaze-80a74ddc982f577446837cd58199d55b666551d4.tar.xz
mblaze-80a74ddc982f577446837cd58199d55b666551d4.zip
magrep: add *:REGEX to search in any header
Diffstat (limited to 'magrep.c')
-rw-r--r--magrep.c43
1 files changed, 30 insertions, 13 deletions
diff --git a/magrep.c b/magrep.c
index a277995..3db8fbd 100644
--- a/magrep.c
+++ b/magrep.c
@@ -119,6 +119,24 @@ match_body(char *file)
 }
 
 void
+match_value(char *file, char *h, char *v)
+{
+	if (dflag) {
+		char d[4096];
+		blaze822_decode_rfc2047(d, v, sizeof d, "UTF-8");
+		match(file, h, d);
+	} else if (aflag) {
+		char *disp, *addr;
+		while ((v = blaze822_addr(v, &disp, &addr))) {
+			if (addr && match(file, h, addr))
+				break;
+		}
+	} else {
+		match(file, h, v);
+	}
+}
+
+void
 magrep(char *file)
 {
 	if (!*header) {
@@ -139,21 +157,20 @@ magrep(char *file)
 	if (!msg)
 		return;
 
-	char *v = blaze822_chdr(msg, header);
-	if (v) {
-		if (dflag) {
-			char d[4096];
-			blaze822_decode_rfc2047(d, v, sizeof d, "UTF-8");
-			match(file, header, d);
-		} else if (aflag) {
-			char *disp, *addr;
-			while ((v = blaze822_addr(v, &disp, &addr))) {
-				if (addr && match(file, header, addr))
-					break;
+	if (strcmp(header, "*") == 0) {
+		char *hdr = 0;
+		while ((hdr = blaze822_next_header(msg, hdr))) {
+			char *v = strchr(hdr, ':');
+			if (v) {
+				*v = 0;
+				match_value(file, hdr, v + 1 + (v[1] == ' '));
+				*v = ':';
 			}
-		} else {
-			match(file, header, v);
 		}
+	} else {
+		char *v = blaze822_chdr(msg, header);
+		if (v)
+			match_value(file, header, v);
 	}
 
 	blaze822_free(msg);