libc: tmparse should ignore leading whitespace

We almost always want to skip leading whitespace in time
formats, so make tmparse just do it. This fixes upas mbox
parsing, which leaves a leading whitespace at the start of
the date.
front
Ori Bernstein 2020-08-26 10:23:00 -07:00
parent 8727bfd9bd
commit 17abfa51ca
2 changed files with 16 additions and 1 deletions

View File

@ -65,6 +65,7 @@ Tmstime is identical to tmtime, but accepts the time in sec-
onds.
.PP
Tmparse parses a time from a string according to the format argument.
Leading whitespace is ignored.
The point at which the parsing stopped is returned in
.IR ep .
If

View File

@ -632,6 +632,20 @@ tmparse(Tm *tm, char *fmt, char *str, Tzone *tz, char **ep)
sloppy = 1;
p++;
}
/* Skip whitespace */
for(;; p++) {
switch(*p) {
case ' ':
case '\t':
case '\n':
case '\f':
case '\r':
case '\v':
continue;
}
break;
}
while(*p){
w = 1;
c0 = *p++;
@ -868,7 +882,6 @@ Zoneparsed:
case '_':
case ',':
case ' ':
if(*s != ' ' && *s != '\t' && *s != ',' && *s != '\n' && *s != '\0')
goto baddate;
p += strspn(p, " ,_\t\n");
@ -884,6 +897,7 @@ Zoneparsed:
if(!ok)
goto baddate;
}
if(*p != '\0')
goto baddate;
if(ep != nil)