ref: 87bb13d69b0f361e725ca62882d8b0d69605d93c
parent: cdf3c4900b7fc1b17c41008f45e91371b7ff023a
author: Ori Bernstein <ori@eigenstate.org>
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;
--
⑨