shithub: riscv

Download patch

ref: 91c277a724d5fdfbc37eb85b69250220150fe232
parent: 359362395f73a4d74fb562d5718ddba40e4d63cc
parent: 85132f197bc6cef04f707daccf15eca4c471ff50
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Jun 28 20:24:45 EDT 2020

merge

--- a/sys/src/cmd/upas/fs/mbox.c
+++ b/sys/src/cmd/upas/fs/mbox.c
@@ -476,6 +476,20 @@
 	}
 }
 
+static void
+parseunix(Message *m)
+{
+	char *s, *p;
+
+	m->unixheader = smprint("%.*s", utfnlen(m->start, m->header - m->start), m->start);
+	s = m->start + 5;
+	if((p = strchr(s, ' ')) == nil)
+		return;
+	*p = 0;
+	m->unixfrom = strdup(s);
+	*p = ' ';
+}
+
 void
 parseheaders(Mailbox *mb, Message *m, int addfrom, int justmime)
 {
@@ -483,8 +497,20 @@
 	int i, i0, n;
 	uintptr a;
 
+	if(m->header == nil)
+		m->header = m->start;
+
+	/* parse unix header */
+	if(!justmime && !addfrom && m->unixheader == nil){
+		if(strncmp(m->start, "From ", 5) == 0)
+		if((e = memchr(m->start, '\n', m->end - m->start)) != nil){
+			m->header = e + 1;
+			parseunix(m);
+		}
+	}
+
 	/* parse mime headers */
-	p = m->header;
+	p = m->mheader = m->mhend = m->header;
 	i0 = 0;
 	if(justmime)
 		i0 = Mhead;
@@ -520,11 +546,6 @@
 		m->hend = p;
 		m->mhend = m->header;
 	}
-	/*
-	 * not all attachments have mime headers themselves.
-	 */
-	if(!m->mheader)
-		m->mhend = 0;
 	if(*p == '\n')
 		p++;
 	m->rbody = m->body = p;
@@ -538,9 +559,10 @@
 	 *  adding the unix header all the time screws up mime-attached
 	 *  rfc822 messages.
 	 */
-	if(!addfrom && !m->unixfrom)
+	if(!addfrom && m->unixfrom == nil) {
+		free(m->unixheader);
 		m->unixheader = nil;
-	else if(m->unixheader == nil){
+	} else if(m->unixheader == nil){
 		if(m->unixfrom && strcmp(m->unixfrom, "???") != 0)
 			p = m->unixfrom;
 		else if(m->from)
--- a/sys/src/cmd/upas/fs/mdir.c
+++ b/sys/src/cmd/upas/fs/mdir.c
@@ -22,24 +22,10 @@
 	return r != l ? -1: 0;
 }
 
-static void
-parseunix(Message *m)
-{
-	char *s, *p;
-
-	m->unixheader = smprint("%.*s", utfnlen(m->start, m->header - m->start), m->start);
-	s = m->start + 5;
-	if((p = strchr(s, ' ')) == nil)
-		return;
-	*p = 0;
-	m->unixfrom = strdup(s);
-	*p = ' ';
-}
-
 static int
 mdirfetch(Mailbox *mb, Message *m, uvlong o, ulong l)
 {
-	char buf[Pathlen], *x;
+	char buf[Pathlen];
 	Mdir *mdir;
 
 	mdir = mb->aux;
@@ -51,17 +37,6 @@
 		mdprint(mdir, "%r\n");
 		return -1;
 	}
-	if(m->header == nil)
-		m->header = m->start;
-	if(m->header == m->start)
-	if(o + l >= 36)
-	if(strncmp(m->start, "From ", 5) == 0)
-	if(x = strchr(m->start, '\n')){
-		m->header = x + 1;
-		if(m->unixfrom == nil)
-			parseunix(m);
-	}
-	m->mheader = m->mhend = m->header;
 	mdprint(mdir, "fetched [%llud, %llud]\n", o, o + l);
 	return 0;
 }
--- a/sys/src/cmd/upas/fs/plan9.c
+++ b/sys/src/cmd/upas/fs/plan9.c
@@ -50,29 +50,6 @@
 	return r;
 }
 
-static char*
-parseunix(Message *m)
-{
-	char *s, *p, *q;
-	Tm tm;
-
-	m->unixheader = smprint("%.*s", utfnlen(m->start, m->header - m->start), m->start);
-	s = m->start + 5;
-	if((p = strchr(s, ' ')) == nil)
-		return s;
-	*p = 0;
-	m->unixfrom = strdup(s);
-	*p++ = ' ';
-	if(q = strchr(p, '\n'))
-		*q = 0;
-	if(strtotm(p, &tm) < 0)
-		return p;
-	if(q)
-		*q = '\n';
-	m->fileid = (uvlong)tm2sec(&tm) << 8;
-	return 0;
-}
-
 static void
 addtomessage(Message *m, char *p, int n)
 {
@@ -215,7 +192,7 @@
 static char*
 readmbox(Mailbox *mb, Mlock *lk)
 {
-	char *p, *x, buf[Pathlen];
+	char buf[Pathlen];
 	Biobuf *in;
 	Dir *d;
 	Inbuf b;
@@ -306,12 +283,6 @@
 		}
 		if(m == nil)
 			continue;
-		m->header = m->end;
-		if(x = strchr(m->start, '\n'))
-			m->header = x + 1;
-		if(p = parseunix(m))
-			sysfatal("%s:%lld naked From in body? [%s]", mb->path, seek(Bfildes(in), 0, 1), p);
-		m->mheader = m->mhend = m->header;
 		parse(mb, m, 0, 0);
 		if(m != *l && m->deleted != Dup){
 			logmsg(m, "new");