Improve libc time zone fallback behavior.
We should fall back to GMT if neither the environment variable nor the
system property is set. This is the case if you wipe a WiFi-only device,
because we currently only take the time zone from cell networks.
Bug: http://b/24773112
Change-Id: I90d236d4d492b6562d75021bd312030b91c1e298
diff --git a/libc/tzcode/localtime.c b/libc/tzcode/localtime.c
index cb8aeed..b1ebb24 100644
--- a/libc/tzcode/localtime.c
+++ b/libc/tzcode/localtime.c
@@ -1316,9 +1316,10 @@
tzset_unlocked(void)
{
#if defined(__ANDROID__)
+ // The TZ environment variable is meant to override the system-wide setting.
const char * name = getenv("TZ");
- // Try the "persist.sys.timezone" system property.
+ // If that's not set, look at the "persist.sys.timezone" system property.
if (name == NULL) {
static const prop_info *pi;
@@ -1340,6 +1341,10 @@
}
}
+ // If that's not available (because you're running AOSP on a WiFi-only
+ // device, say), fall back to GMT.
+ if (name == NULL) name = gmt;
+
tzsetlcl(name);
#else
tzsetlcl(getenv("TZ"));