shithub: riscv

Download patch

ref: 17abfa51ca4a34d6320d8d605ad4002990fd2f10
parent: 8727bfd9bdc57ffecc1c3fd06031e75abd987579
author: Ori Bernstein <[email protected]>
date: Wed Aug 26 06:23:00 EDT 2020

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.

--- a/sys/man/2/tmdate
+++ b/sys/man/2/tmdate
@@ -65,6 +65,7 @@
 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
--- a/sys/src/libc/port/date.c
+++ b/sys/src/libc/port/date.c
@@ -632,6 +632,20 @@
 		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 @@
 		case '_':
 		case ',':
 		case ' ':
-
 			if(*s != ' ' && *s != '\t' && *s != ',' && *s != '\n' && *s != '\0')
 				goto baddate;
 			p += strspn(p, " ,_\t\n");
@@ -884,6 +897,7 @@
 		if(!ok)
 			goto baddate;
 	}
+
 	if(*p != '\0')
 		goto baddate;
 	if(ep != nil)