Loading...
--- Libc/Libc-1158.1.2/tests/stdtime.c
+++ Libc/Libc-1669.40.2/tests/stdtime.c
@@ -4,6 +4,7 @@
#include <string.h>
#include <locale.h>
#include <err.h>
+#include <TargetConditionals.h>
#include <darwintest.h>
@@ -18,24 +19,25 @@
T_EXPECT_EQ(percent_j_out, standard_out, NULL);
}
+#if !TARGET_OS_BRIDGE
T_DECL(strptime_PR_5879606, "alloca(strlen(input)) in strptime(\"%Z\")")
{
struct tm tm;
time_t t = time(NULL);
size_t s = 100000000;
char *buf;
+ char tz[100] = { 0 };
localtime_r(&t, &tm);
T_LOG("%s", asctime(&tm));
T_ASSERT_NOTNULL(strptime("GMT", "%Z", &tm), "strptime GMT");
T_LOG("%s", asctime(&tm));
+ strftime(tz, sizeof(tz), "%Z", &tm);
+ T_LOG("The current time zone name is: %s\n", tz);
+
localtime_r(&t, &tm);
- T_ASSERT_NOTNULL(strptime("PST", "%Z", &tm), "strptime PST");
- T_LOG("%s", asctime(&tm));
-
- localtime_r(&t, &tm);
- T_ASSERT_NOTNULL(strptime("PDT", "%Z", &tm), "strptime PDT");
+ T_ASSERT_NOTNULL(strptime(tz, "%Z", &tm), "strptime local TZ name");
T_LOG("%s", asctime(&tm));
T_QUIET; T_ASSERT_NOTNULL((buf = malloc(s)), NULL);
@@ -47,10 +49,18 @@
T_DECL(strptime_PR_6882179, "date command fails with 'illegal time format'")
{
- struct tm tm;
- char buf[] = "Tue May 12 18:19:41 PDT 2009";
-
+ struct tm tm, tmptm;
+ time_t t = time(NULL);
+ char *buf = NULL;
+ char tz[100] = { 0 };
+
+ localtime_r(&t, &tmptm);
+ strftime(tz, sizeof(tz), "%Z", &tmptm);
+ T_LOG("The current time zone name is: %s\n", tz);
+
+ asprintf(&buf, "Tue May 12 18:19:41 %s 2009", tz);
T_ASSERT_NOTNULL(strptime(buf, "%a %b %d %T %Z %Y", &tm), NULL);
+ free(buf);
T_EXPECT_EQ(tm.tm_sec, 0x29, NULL);
T_EXPECT_EQ(tm.tm_min, 0x13, NULL);
@@ -61,6 +71,7 @@
T_EXPECT_EQ(tm.tm_wday, 0x2, NULL);
T_EXPECT_EQ(tm.tm_yday, 0x83, NULL);
}
+#endif
T_DECL(strptime_lukemftp, "year parsing"){
struct tm tm;
@@ -70,10 +81,12 @@
T_DECL(strptime_five_digit_year, "strptime(%Y) with a 5 digit year")
{
+ // POSIX conformance requires that %Y only use 4 characters, so use the
+ // field width to change that for this test.
char *timestr = "20080922T020000";
struct tm tm;
bzero(&tm, sizeof(tm));
- T_ASSERT_NOTNULL(strptime("10001", "%Y", &tm), NULL);
+ T_ASSERT_NOTNULL(strptime("10001", "%5Y", &tm), NULL);
T_EXPECT_EQ(tm.tm_year, 10001 - 1900, NULL);
T_ASSERT_NOTNULL(strptime(timestr, "%Y%m%dT%H%M%S", &tm), NULL);
}
@@ -140,8 +153,20 @@
}
}
-T_DECL(strptime_asctime, "strptime->asctime")
-{
+#if !TARGET_OS_BRIDGE
+T_DECL(strptime_asctime, "strptime->asctime",
+ T_META_REQUIRES_OS_VARIANT_NOT("IsDarwinOS")) {
+
+ struct tm tmptm;
+ time_t t = time(NULL);
+ char tz[100] = { 0 };
+ localtime_r(&t, &tmptm);
+ strftime(tz, sizeof(tz), "%Z %z", &tmptm);
+ T_LOG("The current time zone offset is: %s\n", tz);
+ if (strcmp(tz, "PST -0800") != 0 && strcmp(tz, "PDT -0700") != 0) {
+ T_SKIP("This test expects the device to be in Pacific time");
+ }
+
char *test[] = {
"Sun, 6 Apr 2003 03:30:00 -0500",
"Sun, 6 Apr 2003 04:30:00 -0500",
@@ -176,3 +201,4 @@
i++;
}
}
+#endif