--- a/src/time/__tz.c +++ b/src/time/__tz.c @@ -23,6 +23,9 @@ static int r0[5], r1[5]; static const unsigned char *zi, *trans, *index, *types, *abbrevs, *abbrevs_end; static size_t map_size; +static const char *tzfile; +static size_t tzfile_size; + static char old_tz_buf[32]; static char *old_tz = old_tz_buf; static size_t old_tz_size = sizeof old_tz_buf; @@ -125,6 +128,15 @@ static void do_tzset() "/usr/share/zoneinfo/\0/share/zoneinfo/\0/etc/zoneinfo/\0"; s = getenv("TZ"); + + /* if TZ is empty try to read it from /etc/TZ */ + if (!s || !*s) { + if (tzfile) + __munmap((void*)tzfile, tzfile_size); + + s = tzfile = (void *)__map_file("/etc/TZ", &tzfile_size); + } + if (!s) s = "/etc/localtime"; if (!*s) s = __gmt;