X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ftime%2F__tz.c;h=1dbb0b8ffd428bc520f1054e98206611a5734a5c;hb=cfa0a54c082d41db6446638eed1d57f163434092;hp=0e0c4ea240f0179d3abe491406f38b75223f4a30;hpb=8ca27ac4bfe73bff785d0c26c1de0da92b55e5c6;p=musl diff --git a/src/time/__tz.c b/src/time/__tz.c index 0e0c4ea2..1dbb0b8f 100644 --- a/src/time/__tz.c +++ b/src/time/__tz.c @@ -15,7 +15,7 @@ weak_alias(__tzname, tzname); static char std_name[TZNAME_MAX+1]; static char dst_name[TZNAME_MAX+1]; -const char __gmt[] = "GMT"; +const char __utc[] = "UTC"; static int dst_off; static int r0[5], r1[5]; @@ -27,7 +27,7 @@ static char old_tz_buf[32]; static char *old_tz = old_tz_buf; static size_t old_tz_size = sizeof old_tz_buf; -static volatile int lock[2]; +static volatile int lock[1]; static int getint(const char **p) { @@ -126,7 +126,7 @@ static void do_tzset() s = getenv("TZ"); if (!s) s = "/etc/localtime"; - if (!*s) s = __gmt; + if (!*s) s = __utc; if (old_tz && !strcmp(s, old_tz)) return; @@ -136,7 +136,7 @@ static void do_tzset() * free so as not to pull it into static programs. Growth * strategy makes it so free would have minimal benefit anyway. */ i = strlen(s); - if (i > PATH_MAX+1) s = __gmt, i = 3; + if (i > PATH_MAX+1) s = __utc, i = 3; if (i >= old_tz_size) { old_tz_size *= 2; if (i >= old_tz_size) old_tz_size = i+1; @@ -165,12 +165,12 @@ static void do_tzset() } } } - if (!map) s = __gmt; + if (!map) s = __utc; } if (map && (map_size < 44 || memcmp(map, "TZif", 4))) { __munmap((void *)map, map_size); map = 0; - s = __gmt; + s = __utc; } zi = map; @@ -207,7 +207,7 @@ static void do_tzset() } } if (!__tzname[0]) __tzname[0] = __tzname[1]; - if (!__tzname[0]) __tzname[0] = (char *)__gmt; + if (!__tzname[0]) __tzname[0] = (char *)__utc; if (!__daylight) { __tzname[1] = __tzname[0]; dst_off = __timezone; @@ -216,7 +216,7 @@ static void do_tzset() } } - if (!s) s = __gmt; + if (!s) s = __utc; getname(std_name, &s); __tzname[0] = std_name; __timezone = getoff(&s); @@ -373,18 +373,14 @@ void __secs_to_zone(long long t, int local, int *isdst, long *offset, long *oppo long long t0 = rule_to_secs(r0, y); long long t1 = rule_to_secs(r1, y); + if (!local) { + t0 += __timezone; + t1 += dst_off; + } if (t0 < t1) { - if (!local) { - t0 += __timezone; - t1 += dst_off; - } if (t >= t0 && t < t1) goto dst; goto std; } else { - if (!local) { - t1 += __timezone; - t0 += dst_off; - } if (t >= t1 && t < t0) goto std; goto dst; } @@ -417,7 +413,7 @@ const char *__tm_to_tzname(const struct tm *tm) const void *p = tm->__tm_zone; LOCK(lock); do_tzset(); - if (p != __gmt && p != __tzname[0] && p != __tzname[1] && + if (p != __utc && p != __tzname[0] && p != __tzname[1] && (!zi || (uintptr_t)p-(uintptr_t)abbrevs >= abbrevs_end - abbrevs)) p = ""; UNLOCK(lock);