diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-06-29 00:24:45 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-06-29 00:24:45 +0200 |
commit | 91c277a724d5fdfbc37eb85b69250220150fe232 (patch) | |
tree | ace7981e809473a7e6f7c18cacc7c1cd2cc90add /sys/src | |
parent | 359362395f73a4d74fb562d5718ddba40e4d63cc (diff) | |
parent | 85132f197bc6cef04f707daccf15eca4c471ff50 (diff) |
merge
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/upas/fs/mbox.c | 38 | ||||
-rw-r--r-- | sys/src/cmd/upas/fs/mdir.c | 27 | ||||
-rw-r--r-- | sys/src/cmd/upas/fs/plan9.c | 31 |
3 files changed, 32 insertions, 64 deletions
diff --git a/sys/src/cmd/upas/fs/mbox.c b/sys/src/cmd/upas/fs/mbox.c index 0c7f440ff..878d09b27 100644 --- a/sys/src/cmd/upas/fs/mbox.c +++ b/sys/src/cmd/upas/fs/mbox.c @@ -476,6 +476,20 @@ parseattachments(Message *m, Mailbox *mb) } } +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 @@ parseheaders(Mailbox *mb, Message *m, int addfrom, int justmime) 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 @@ parseheaders(Mailbox *mb, Message *m, int addfrom, int justmime) 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 @@ parseheaders(Mailbox *mb, Message *m, int addfrom, int justmime) * 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) diff --git a/sys/src/cmd/upas/fs/mdir.c b/sys/src/cmd/upas/fs/mdir.c index 59cb243be..543bdc8f5 100644 --- a/sys/src/cmd/upas/fs/mdir.c +++ b/sys/src/cmd/upas/fs/mdir.c @@ -22,24 +22,10 @@ slurp(char *f, char *b, uvlong o, long l) 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 @@ mdirfetch(Mailbox *mb, Message *m, uvlong o, ulong l) 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; } diff --git a/sys/src/cmd/upas/fs/plan9.c b/sys/src/cmd/upas/fs/plan9.c index aa8c67649..2c793b40a 100644 --- a/sys/src/cmd/upas/fs/plan9.c +++ b/sys/src/cmd/upas/fs/plan9.c @@ -50,29 +50,6 @@ chkunix(char *s, int n) 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 @@ mergemsg(Message *m, Message *x) 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 @@ retry: } 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"); |