about summary refs log tree commit diff
path: root/mshow.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-08-02 16:13:25 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2016-08-02 16:13:25 +0200
commit27b21d7e204cfa17723702d3c04c0ee6df603fbf (patch)
treed5bd50d721c2eabde8ec7f09fb40d59cdb9f3105 /mshow.c
parent56e89c9a557cd1182001a8b1130d7f10f40cc96a (diff)
downloadmblaze-27b21d7e204cfa17723702d3c04c0ee6df603fbf.tar.gz
mblaze-27b21d7e204cfa17723702d3c04c0ee6df603fbf.tar.xz
mblaze-27b21d7e204cfa17723702d3c04c0ee6df603fbf.zip
rfc2045: import walk_mime
Diffstat (limited to 'mshow.c')
-rw-r--r--mshow.c69
1 files changed, 13 insertions, 56 deletions
diff --git a/mshow.c b/mshow.c
index b13f218..b1ebc0c 100644
--- a/mshow.c
+++ b/mshow.c
@@ -144,16 +144,6 @@ tlmimetype(char *ct)
 	return strndup(ct, s-ct);
 }
 
-typedef enum {
-	MIME_CONTINUE,
-	MIME_STOP,
-	MIME_PRUNE,
-} mime_action;
-
-typedef mime_action (*mime_callback)(int, struct message *, char *, size_t);
-
-mime_action walk_mime(struct message *msg, int depth, mime_callback visit);
-
 char *
 mime_filename(struct message *msg)
 {
@@ -172,7 +162,7 @@ mime_filename(struct message *msg)
 
 static void choose_alternative(struct message *msg, int depth);
 
-mime_action
+blaze822_mime_action
 render_mime(int depth, struct message *msg, char *body, size_t bodylen)
 {
 	char *ct = blaze822_hdr(msg, "content-type");
@@ -194,7 +184,7 @@ render_mime(int depth, struct message *msg, char *body, size_t bodylen)
 	}
 
 	char *cmd;
-	mime_action r = MIME_CONTINUE;
+	blaze822_mime_action r = MIME_CONTINUE;
 
 	if (filters &&
 	    ((cmd = blaze822_chdr(filters, mt)) ||
@@ -222,7 +212,7 @@ render_mime(int depth, struct message *msg, char *body, size_t bodylen)
 			printf(" filter=\"%s\" ---\n", cmd);
 			struct message *imsg = blaze822_mem(output, outlen);
 			if (imsg)
-				walk_mime(imsg, depth+1, render_mime);
+				blaze822_walk_mime(imsg, depth+1, render_mime);
 			blaze822_free(imsg);
 		} else if (e >= 65 && e <= 80) { // choose N-64th part
 			struct message *imsg = 0;
@@ -230,7 +220,7 @@ render_mime(int depth, struct message *msg, char *body, size_t bodylen)
 			printf(" selector=\"%s\" part=%d ---\n", cmd, n);
 			while (blaze822_multipart(msg, &imsg)) {
 				if (--n == 0)
-					walk_mime(imsg, depth+1, render_mime);
+					blaze822_walk_mime(imsg, depth+1, render_mime);
 			}
 			blaze822_free(imsg);
 		} else {
@@ -272,7 +262,7 @@ nofilter:
 
 			r = MIME_PRUNE;
 		} else if (strncmp(ct, "multipart/", 10) == 0) {
-			; // default mime_walk action
+			; // default blaze822_mime_walk action
 		} else {
 			printf("no filter or default handler\n");
 		}
@@ -313,11 +303,11 @@ choose_alternative(struct message *msg, int depth)
 	imsg = 0;
 	while (blaze822_multipart(msg, &imsg))
 		if (--n == 0)
-			walk_mime(imsg, depth+1, render_mime);
+			blaze822_walk_mime(imsg, depth+1, render_mime);
 	blaze822_free(imsg);
 }
 
-mime_action
+blaze822_mime_action
 reply_mime(int depth, struct message *msg, char *body, size_t bodylen)
 {
 	(void) depth;
@@ -346,7 +336,7 @@ reply_mime(int depth, struct message *msg, char *body, size_t bodylen)
 	return MIME_CONTINUE;
 }
 
-mime_action
+blaze822_mime_action
 list_mime(int depth, struct message *msg, char *body, size_t bodylen)
 {
 	(void) body;
@@ -367,39 +357,6 @@ list_mime(int depth, struct message *msg, char *body, size_t bodylen)
 	return MIME_CONTINUE;
 }
 
-mime_action
-walk_mime(struct message *msg, int depth, mime_callback visit)
-{
-	char *ct, *body, *bodychunk;
-	size_t bodylen;
-
-	mime_action r = MIME_CONTINUE;
-
-	if (blaze822_mime_body(msg, &ct, &body, &bodylen, &bodychunk)) {
-
-		mime_action r = visit(depth, msg, body, bodylen);
-
-		if (r == MIME_CONTINUE) {
-			if (strncmp(ct, "multipart/", 10) == 0) {
-				struct message *imsg = 0;
-				while (blaze822_multipart(msg, &imsg)) {
-					r = walk_mime(imsg, depth+1, visit);
-					if (r == MIME_STOP)
-						break;
-				}
-			} else if (strncmp(ct, "message/rfc822", 14) == 0) {
-				struct message *imsg = blaze822_mem(body, bodylen);
-				if (imsg)
-					walk_mime(imsg, depth+1, visit);
-			}
-		}
-
-		free(bodychunk);
-	}
-
-	return r;
-}
-
 void
 list(char *file)
 {
@@ -408,7 +365,7 @@ list(char *file)
 		return;
 	mimecount = 0;
 	printf("%s\n", file);
-	walk_mime(msg, 0, list_mime);
+	blaze822_walk_mime(msg, 0, list_mime);
 }
 
 void
@@ -417,7 +374,7 @@ reply(char *file)
 	struct message *msg = blaze822_file(file);
 	if (!msg)
 		return;
-	walk_mime(msg, 0, reply_mime);
+	blaze822_walk_mime(msg, 0, reply_mime);
 }
 
 static int extract_argc;
@@ -458,7 +415,7 @@ writefile(char *name, char *buf, ssize_t len)
 	return 0;
 }
 
-mime_action
+blaze822_mime_action
 extract_mime(int depth, struct message *msg, char *body, size_t bodylen)
 {
 	(void) body;
@@ -525,7 +482,7 @@ extract_cb(char *file)
 	if (!msg)
 		return;
 	mimecount = 0;
-	walk_mime(msg, 0, extract_mime);
+	blaze822_walk_mime(msg, 0, extract_mime);
 }
 
 void
@@ -708,7 +665,7 @@ show(char *file)
 	}
 
 	mimecount = 0;
-	walk_mime(msg, 0, render_mime);
+	blaze822_walk_mime(msg, 0, render_mime);
 
 done:
 	blaze822_free(msg);