diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2015-08-07 21:23:58 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2015-08-07 21:23:58 +0200 |
commit | e46ef96d680fe3d720a54ff1c178cce03d3a980a (patch) | |
tree | 052ae110151e7f27607a8eab79c6b8a16f89f135 /sfeed_mbox.c | |
parent | f23af0821309e86d9d6db59796d245b6986e2cd3 (diff) |
util: strtotime: stricter time parsing
as input: an empty string or non-digit characters are digits are considered an
error now. Still, for the format tools output the formatted time string as
time_t 0 on a parse error.
Diffstat (limited to 'sfeed_mbox.c')
-rw-r--r-- | sfeed_mbox.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sfeed_mbox.c b/sfeed_mbox.c index 878a3f6..020416c 100644 --- a/sfeed_mbox.c +++ b/sfeed_mbox.c @@ -81,7 +81,6 @@ printfeed(FILE *fp, const char *feedname) char *fields[FieldLast], timebuf[32], mtimebuf[32]; char host[HOST_NAME_MAX + 1], *user; time_t parsedtime; - int r; if (!(user = getenv("USER"))) user = "you"; @@ -96,11 +95,13 @@ printfeed(FILE *fp, const char *feedname) errx(1, "can't format current time"); while (parseline(&line, &linesize, fields, fp) > 0) { - if ((r = strtotime(fields[FieldUnixTimestamp], &parsedtime)) == -1 || - !gmtime_r(&parsedtime, &tm) || + parsedtime = 0; + strtotime(fields[FieldUnixTimestamp], &parsedtime); + /* can't convert: default to formatted time for time_t 0. */ + if (!gmtime_r(&parsedtime, &tm) || !strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M +0000", &tm)) - continue; /* invalid date */ + strlcpy(timebuf, "Thu, 01 Jan 1970 00:00 +0000", sizeof(timebuf)); /* mbox + mail header */ printf("From MAILER-DAEMON %s\n" |