ref: a41b74059bcb40e7fc37f3da72758b89cde4c437
parent: d310da13ba8d31c84978f96f542b9929a4e54ed8
author: Ori Bernstein <[email protected]>
date: Sat Oct 17 14:59:36 EDT 2020
upas: fix appendfolder timestamps (thanks umbraticus) When moving messages between folders, mbappend, deliver, and nedmail were trying to parse the timestamp ouut of the message. They were doing it incorrectly, trying to include the user name as part of the date format. Change to pass just the date to the date parser.
--- a/sys/src/cmd/upas/common/folder.c
+++ b/sys/src/cmd/upas/common/folder.c
@@ -184,8 +184,8 @@
int
appendfolder(Biobuf *b, char *addr, int fd)
{
- char *s;
- int r, n;
+ char *s, *t;
+ int r;
Biobuf bin;
Folder *f;
Tzone *tz;
@@ -194,15 +194,27 @@
f = getfolder(b);
Bseek(f->out, 0, 2);
Binit(&bin, fd, OREAD);
+
s = Brdstr(&bin, '\n', 0);
- n = strlen(s);
- if(!s || strncmp(s, "From ", 5) != 0){
+
+ /* Unix from */
+ if(s != nil && strncmp(s, "From ", 5) == 0
+ && (t = strchr(s + 5, ' ')) != nil
+ && tmparse(&tm, Timefmt, t + 1, nil, nil) != nil){
+ f->t = tmnorm(&tm);
+ }else {
+ /*
+ * Old mailboxes have dates in ctime format,
+ * which contains ambiguous timezone names.
+ * Passing in the local timezone has the side
+ * effect of disambiguating the timezone name
+ * as local.
+ */
tz = tzload("local");
tmtime(&tm, f->t, tz);
Bprint(f->out, "From %s %τ\n", addr, tmfmt(&tm, Timefmt));
- }else if(n > 5 && tmparse(&tm, Timefmt, s + 5, nil, nil) != nil)
- f->t = tmnorm(&tm);
- if(s)
+ }
+ if(s != nil)
Bwrite(f->out, s, strlen(s));
free(s);
r = mboxesc(&bin, f->out, f->type);