shithub: riscv

Download patch

ref: 9f8d62ab644553b11286dbcd283db56c83d6ebdd
parent: 77c3cb50fb529740c57908cc5f0655fba0257c91
author: Ori Bernstein <[email protected]>
date: Tue Sep 22 15:24:01 EDT 2020

libc: ignore '?' in date format strings

Ignoring '?' when formatting date strings allows
the format strings to be reused for parsing. This
is convenient, since we don't need to duplicate
the format strings.

--- a/sys/man/2/tmdate
+++ b/sys/man/2/tmdate
@@ -134,8 +134,7 @@
 will format to a width of 3. When parsing, this acts as whitespace.
 .TP
 .B ?
-When parsing, this makes the following argument match fuzzily.
-Fuzzy matching means that all formats are tried, from most to least specific.
+When parsing, all formats of the following argument are tried from most to least specific.
 For example, 
 .I ?M
 will match 
@@ -144,7 +143,9 @@
 .IR 01 ,
 and 
 .IR 1 ,
-in that order of preference.
+in that order. When formatting,
+.B ?
+is ignored.
 .TP
 .B ~
 When parsing a date, this slackens range enforcement, accepting
--- a/sys/src/libc/port/date.c
+++ b/sys/src/libc/port/date.c
@@ -428,6 +428,9 @@
 		switch(c0){
 		case 0:
 			break;
+		/* Ignore '?' so we can share parse and format strings */
+		case '?':
+			continue;
 		case 'Y':
 			switch(w){
 			case 1:	n += fmtprint(f, "%*d", pad, tm->year + 1900);		break;