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.
This commit is contained in:
parent
f23af08213
commit
e46ef96d68
|
@ -105,8 +105,7 @@ static void
|
|||
printfeed(FILE *fpitems, FILE *fpin, struct feed *f)
|
||||
{
|
||||
char dirpath[PATH_MAX], filepath[PATH_MAX];
|
||||
char *fields[FieldLast], *feedname;
|
||||
char name[128];
|
||||
char *fields[FieldLast], *feedname, name[128];
|
||||
size_t namelen;
|
||||
struct stat st;
|
||||
FILE *fpcontent = NULL;
|
||||
|
@ -177,14 +176,14 @@ printfeed(FILE *fpitems, FILE *fpin, struct feed *f)
|
|||
}
|
||||
|
||||
/* set modified and access time of file to time of item. */
|
||||
r = strtotime(fields[FieldUnixTimestamp], &parsedtime);
|
||||
if (r != -1) {
|
||||
parsedtime = 0;
|
||||
if (strtotime(fields[FieldUnixTimestamp], &parsedtime) != -1) {
|
||||
contenttime.actime = parsedtime;
|
||||
contenttime.modtime = parsedtime;
|
||||
utime(filepath, &contenttime);
|
||||
}
|
||||
|
||||
isnew = (r != -1 && parsedtime >= comparetime) ? 1 : 0;
|
||||
isnew = (parsedtime >= comparetime) ? 1 : 0;
|
||||
totalnew += isnew;
|
||||
f->totalnew += isnew;
|
||||
f->total++;
|
||||
|
|
|
@ -20,7 +20,6 @@ printfeed(FILE *fp, struct feed *f)
|
|||
char *fields[FieldLast];
|
||||
time_t parsedtime;
|
||||
unsigned int islink, isnew;
|
||||
int r;
|
||||
|
||||
if (f->name[0] != '\0') {
|
||||
fputs("<h2 id=\"", stdout);
|
||||
|
@ -34,8 +33,10 @@ printfeed(FILE *fp, struct feed *f)
|
|||
fputs("<table cellpadding=\"0\" cellspacing=\"0\">\n", stdout);
|
||||
|
||||
while (parseline(&line, &linesize, fields, fp) > 0) {
|
||||
r = strtotime(fields[FieldUnixTimestamp], &parsedtime);
|
||||
isnew = (r != -1 && parsedtime >= comparetime) ? 1 : 0;
|
||||
parsedtime = 0;
|
||||
strtotime(fields[FieldUnixTimestamp], &parsedtime);
|
||||
|
||||
isnew = (parsedtime >= comparetime) ? 1 : 0;
|
||||
islink = (fields[FieldLink][0] != '\0') ? 1 : 0;
|
||||
|
||||
totalnew += isnew;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -42,8 +42,10 @@ printfeed(FILE *fp, const char *feedname)
|
|||
time_t parsedtime;
|
||||
|
||||
while (parseline(&line, &size, fields, fp) > 0) {
|
||||
if (strtotime(fields[FieldUnixTimestamp], &parsedtime) != -1 &&
|
||||
parsedtime >= comparetime)
|
||||
parsedtime = 0;
|
||||
strtotime(fields[FieldUnixTimestamp], &parsedtime);
|
||||
|
||||
if (parsedtime >= comparetime)
|
||||
fputs("N ", stdout);
|
||||
else
|
||||
fputs(" ", stdout);
|
||||
|
|
Loading…
Reference in New Issue