]> git.lizzy.rs Git - plan9front.git/commitdiff
Mail: correct rendering of nested multipart messages
authorOri Bernstein <ori@eigenstate.org>
Mon, 8 Feb 2021 04:30:04 +0000 (20:30 -0800)
committerOri Bernstein <ori@eigenstate.org>
Mon, 8 Feb 2021 04:30:04 +0000 (20:30 -0800)
Reading nested subparts of messages into the root
message array allows deeply nested multipart trees
of messages to show correctly in the message view.

sys/src/cmd/upas/Mail/mesg.c

index fdcc019210855e63f2bf7be08b3b385caa3b6e82..83e9e5febe6df033a707b37ccea6ad6668f2543d 100644 (file)
@@ -136,7 +136,7 @@ mesgload(char *name)
 }
 
 static Mesg*
-readparts(Mesg *m)
+readparts(Mesg *r, Mesg *m)
 {
        char *dpath, *apath;
        int n, i, dfd;
@@ -168,18 +168,18 @@ readparts(Mesg *m)
                if(a == nil)
                        continue;
                if(strncmp(a->type, "multipart/", strlen("multipart/")) == 0){
-                       sub = readparts(a);
+                       sub = readparts(r, a);
                        if(sub != a)
                                m->body = sub;
                        continue;
                } 
-               if(m->nparts >= m->xparts)
-                       m->parts = erealloc(m->parts, (2 + m->nparts*2)*sizeof(Mesg*));
-               m->parts[m->nparts++] = a;
-               if(m->body == nil && strcmp(a->type, "text/plain") == 0)
-                       m->body = a;
-               else if(m->body == nil && strcmp(a->type, "text/html") == 0)
-                       m->body = a;
+               if(r->nparts >= r->xparts)
+                       r->parts = erealloc(r->parts, (2 + r->nparts*2)*sizeof(Mesg*));
+               r->parts[r->nparts++] = a;
+               if(r->body == nil && strcmp(a->type, "text/plain") == 0)
+                       r->body = a;
+               else if(r->body == nil && strcmp(a->type, "text/html") == 0)
+                       r->body = a;
        }
        free(d);
        if(m->body == nil)
@@ -532,7 +532,7 @@ mesgopenbody(Mesg *m)
        int rfd;
        Mesg *b;
 
-       b = readparts(m);
+       b = readparts(m, m);
        path = estrjoin(mbox.path, b->name, "body", nil);
        if(strcmp(b->type, "text/html") == 0)
                rfd = htmlfmt(m, path);