aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/musl
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-06-19 17:48:11 +0000
committerFelix Fietkau <nbd@openwrt.org>2015-06-19 17:48:11 +0000
commit172f0ba991d675e6e1b91382b4940c2dfee1924f (patch)
treed4142aa111d8c1e0c40cdab35e63ef463d78559c /toolchain/musl
parent022786280a23548ae0496ddbf37dcf0e18ad51cc (diff)
downloadmaster-187ad058-172f0ba991d675e6e1b91382b4940c2dfee1924f.tar.gz
master-187ad058-172f0ba991d675e6e1b91382b4940c2dfee1924f.tar.bz2
master-187ad058-172f0ba991d675e6e1b91382b4940c2dfee1924f.zip
musl: read the timezone from /etc/TZ
Currently the OpenWRT boot scripts write the timezone configuration to /tmp/TZ, relying on the behaviour of uClibc that the timezone is read from /etc/TZ if no TZ env variable is found. This works because /etc/TZ is a symlink to /tmp/TZ. Musl libc however only reads the timezone from the TZ env variable and if it doesn't find it or it's empty, it will look for a zoneinfo file, that doesn't exist. So in musl builds no timezone is ever set. This patch fixes the issue by having musl libc behave like uClibc: if no TZ env variable is found it will try to load it from /etc/TZ. Signed-off-by: Gianluca Anzolin <gianluca at sottospazio.it> Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@46069 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'toolchain/musl')
-rw-r--r--toolchain/musl/patches/110-read_timezone_from_fs.patch28
1 files changed, 28 insertions, 0 deletions
diff --git a/toolchain/musl/patches/110-read_timezone_from_fs.patch b/toolchain/musl/patches/110-read_timezone_from_fs.patch
new file mode 100644
index 0000000000..3ff63ac220
--- /dev/null
+++ b/toolchain/musl/patches/110-read_timezone_from_fs.patch
@@ -0,0 +1,28 @@
+--- 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) s = "/etc/localtime";
+
+ if (old_tz && !strcmp(s, old_tz)) return;