X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ftime%2F__tz.c;h=4ce20258f126123cc0c6221a6e5465f2a94c65bf;hb=5fc1487832e16aa2119e735a388d5f36c8c139e2;hp=6d7173cf2a4d939bb74fd5f6d6d73c9a9f712a92;hpb=c3d9d172b1fcd56c4d356798f4e3b4653076bcc3;p=musl diff --git a/src/time/__tz.c b/src/time/__tz.c index 6d7173cf..4ce20258 100644 --- a/src/time/__tz.c +++ b/src/time/__tz.c @@ -36,19 +36,16 @@ static int getint(const char **p) return x; } -static int getsigned(const char **p) +static int getoff(const char **p) { + int neg = 0; if (**p == '-') { ++*p; - return -getint(p); + neg = 1; + } else if (**p == '+') { + ++*p; } - if (**p == '+') ++*p; - return getint(p); -} - -static int getoff(const char **p) -{ - int off = 3600*getsigned(p); + int off = 3600*getint(p); if (**p == ':') { ++*p; off += 60*getint(p); @@ -57,7 +54,7 @@ static int getoff(const char **p) off += getint(p); } } - return off; + return neg ? -off : off; } static void getrule(const char **p, int rule[5]) @@ -128,7 +125,7 @@ static void do_tzset() "/usr/share/zoneinfo/\0/share/zoneinfo/\0/etc/zoneinfo/\0"; s = getenv("TZ"); - if (!s || !*s) s = __gmt; + if (!s || !*s) s = "/etc/localtime"; if (old_tz && !strcmp(s, old_tz)) return; @@ -153,7 +150,8 @@ static void do_tzset() if (*s == ':' || ((p=strchr(s, '/')) && !memchr(s, ',', p-s))) { if (*s == ':') s++; if (*s == '/' || *s == '.') { - if (!libc.secure) map = __map_file(s, &map_size); + if (!libc.secure || !strcmp(s, "/etc/localtime")) + map = __map_file(s, &map_size); } else { size_t l = strlen(s); if (l <= NAME_MAX && !strchr(s, '.')) {