git: 9front

Download patch

ref: 822c44a506d64717717b67173093cd7b88a55b90
parent: 260fd275dab89b56790cc14c7031236465ee6497
author: Ori Bernstein <ori@eigenstate.org>
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);
--