diff options
| -rw-r--r-- | sys/src/cmd/upas/common/folder.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/sys/src/cmd/upas/common/folder.c b/sys/src/cmd/upas/common/folder.c index f16e2212c..0e39b9ddd 100644 --- a/sys/src/cmd/upas/common/folder.c +++ b/sys/src/cmd/upas/common/folder.c @@ -184,8 +184,8 @@ mboxesc(Biobuf *in, Biobuf *out, int type) 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 @@ appendfolder(Biobuf *b, char *addr, int fd) 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); |
