ref: eb6b1e672c33a9dce0de368a0e954b801f2035d3
parent: 022bc980b88ca6c06df2f4055ecc0b62231f01ea
parent: 9f8d62ab644553b11286dbcd283db56c83d6ebdd
author: Ori Bernstein <ori@eigenstate.org>
date: Fri Sep 25 12:51:08 EDT 2020
merge
--- 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
@@ -330,7 +330,7 @@
if(d < 0)
d += mdays[m - 1];
- tm->yday = d;
+ tm->yday = d - 1;
for(i = 0; i < m - 1; i++)
tm->yday += mdays[i];
if(m > 1 && isleap(y))
@@ -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;