about summary refs log tree commit diff
path: root/mhdr.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-07-20 13:51:42 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2016-07-20 14:08:36 +0200
commita6ce4c720beca915d185f86660c2d52f261ef4b0 (patch)
tree55d00f441c8ff04df4791701de2b41a2e053de8e /mhdr.c
parenta38fafed2bb19633b85a5159c12256cba1f35250 (diff)
downloadmblaze-a6ce4c720beca915d185f86660c2d52f261ef4b0.tar.gz
mblaze-a6ce4c720beca915d185f86660c2d52f261ef4b0.tar.xz
mblaze-a6ce4c720beca915d185f86660c2d52f261ef4b0.zip
mthread: rename from thread
Diffstat (limited to 'mhdr.c')
-rw-r--r--mhdr.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/mhdr.c b/mhdr.c
new file mode 100644
index 0000000..3fc4a7c
--- /dev/null
+++ b/mhdr.c
@@ -0,0 +1,82 @@
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "blaze822.h"
+
+static size_t l;
+static char *hdr;
+
+void
+header(char *file)
+{
+	struct message *msg;
+
+	msg = blaze822(file);
+	if (!msg)
+		return;
+
+	char *v = blaze822_hdr_(msg, hdr, l);
+	if (v)
+		printf("%s\n", v);
+}
+
+static void
+printhdr(char *hdr)
+{
+	int uc = 1;
+
+	while (*hdr && *hdr != ':') {
+		putc(uc ? toupper(*hdr) : *hdr, stdout);
+		uc = (*hdr == '-');
+		hdr++;
+	}
+	fputs(hdr, stdout);
+	fputc('\n', stdout);
+}
+
+void
+headerall(char *file)
+{
+	struct message *msg;
+
+	msg = blaze822(file);
+	if (!msg)
+		return;
+
+	char *h = 0;
+	while ((h = blaze822_next_header(msg, h))) {
+		char d[4096];
+		blaze822_decode_rfc2047(d, h, sizeof d, "UTF-8");
+
+		printhdr(d);
+	}
+}
+
+int
+main(int argc, char *argv[])
+{
+	if (argv[1] && argv[1][0] == '-') {
+		l = strlen(argv[1])+1;
+		hdr = malloc(l);
+		hdr[0] = 0;
+		char *s = hdr+1;
+		char *t = argv[1]+1;
+		while (*t)
+			*s++ = tolower(*t++);
+		*s = ':';
+
+		blaze822_loop(argc-2, argv+2, header);
+	} else {
+		blaze822_loop(argc-1, argv+1, headerall);
+	}
+	
+	return 0;
+}