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");