Fix portability of strptime especially for Windows (#3342)

This commit is contained in:
itchyny authored and GitHub committed 2025-06-14 08:00:55 +09:00
1 parent 859a8073ee
commit 7cc202aa6e
3 files changed
+16 -22

No files matched your search

+1 -6
View File
@@ -1559,14 +1559,9 @@ static jv f_strptime(jq_state *jq, jv a, jv b) {
memset(&tm, 0, sizeof(tm));
tm.tm_wday = 8; // sentinel
tm.tm_yday = 367; // sentinel
const char *input = jv_string_value(a);
const char *fmt = jv_string_value(b);
#ifndef HAVE_STRPTIME
if (strcmp(fmt, "%Y-%m-%dT%H:%M:%SZ")) {
return ret_error2(a, b, jv_string("strptime/1 only supports ISO 8601 on this platform"));
}
#endif
const char *end = strptime(input, fmt, &tm);
if (end == NULL || (*end != '\0' && !isspace((unsigned char)*end))) {
return ret_error2(a, b, jv_string_fmt("date \"%s\" does not match format \"%s\"", input, fmt));
+14 -2
View File
@@ -1810,8 +1810,6 @@ try ["OK", bsearch(0)] catch ["KO",.]
"aa"
["KO","string (\"aa\") cannot be searched from"]
# strptime tests are in optional.test
strftime("%Y-%m-%dT%H:%M:%SZ")
[2015,2,5,23,51,47,4,63]
"2015-03-05T23:51:47Z"
@@ -1854,6 +1852,20 @@ try ["OK", strflocaltime({})] catch ["KO", .]
0
["KO","strflocaltime/1 requires a string format"]
[strptime("%Y-%m-%dT%H:%M:%SZ")|(.,mktime)]
"2015-03-05T23:51:47Z"
[[2015,2,5,23,51,47,4,63],1425599507]
[strptime("%FT%T")|(.,mktime)]
"2025-06-07T08:09:10"
[[2025,5,7,8,9,10,6,157],1749283750]
# Check day-of-week and day of year computations
# (should trip an assert if this fails)
last(range(365 * 67)|("1970-03-01T01:02:03Z"|strptime("%Y-%m-%dT%H:%M:%SZ")|mktime) + (86400 * .)|strftime("%Y-%m-%dT%H:%M:%SZ")|strptime("%Y-%m-%dT%H:%M:%SZ"))
null
[2037,1,11,1,2,3,3,41]
# module system
import "a" as foo; import "b" as bar; def fooa: foo::a; [fooa, bar::a, bar::b, foo::a]
null
+1 -14
View File
@@ -1,18 +1,6 @@
# See tests/jq.test and the jq manual for more information.
# strptime() is not available on mingw/WIN32
[strptime("%Y-%m-%dT%H:%M:%SZ")|(.,mktime)]
"2015-03-05T23:51:47Z"
[[2015,2,5,23,51,47,4,63],1425599507]
# Check day-of-week and day of year computations
# (should trip an assert if this fails)
# This date range
last(range(365 * 67)|("1970-03-01T01:02:03Z"|strptime("%Y-%m-%dT%H:%M:%SZ")|mktime) + (86400 * .)|strftime("%Y-%m-%dT%H:%M:%SZ")|strptime("%Y-%m-%dT%H:%M:%SZ"))
null
[2037,1,11,1,2,3,3,41]
# Regression test for #3276
# Regression test for #3276 (fails on mingw/WIN32)
fromdate
"2038-01-19T03:14:08Z"
2147483648
@@ -22,4 +10,3 @@ strftime("%A, %B %e, %Y")
1435677542.822351
"Tuesday, June 30, 2015"