Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Sat, 22 Jul 2017 11:19:03 +0200
From: Natanael Copa <ncopa@...inelinux.org>
To: musl@...ts.openwall.com
Cc: Natanael Copa <ncopa@...inelinux.org>
Subject: [PATCH] use UTC instead of GMT

GMT is a timezone officially used by some countries in Europe and
Africa. UTC is not a timezone, but a time standard. No country or
territory officialy uses UTC as local time.

Also, POSIX mentions UTC a few places[1][2] but never GMT (except as an
example[2] for a timezone)

So it makes more sense to use UTC instead of GMT and return UTC when no
timezone is set in /etc/localtime or TZ is set to empty.

[1]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html
[2]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/timezone.html
---

This causes real problems for people:
https://github.com/gliderlabs/docker-alpine/issues/310#issuecomment-316732179

 src/time/__tz.c     | 16 ++++++++--------
 src/time/gmtime_r.c |  4 ++--
 src/time/timegm.c   |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/time/__tz.c b/src/time/__tz.c
index ffe8d402..8cc96032 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];
@@ -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);
@@ -413,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);
diff --git a/src/time/gmtime_r.c b/src/time/gmtime_r.c
index 8cbdadcb..cba72447 100644
--- a/src/time/gmtime_r.c
+++ b/src/time/gmtime_r.c
@@ -2,7 +2,7 @@
 #include <errno.h>
 #include "libc.h"
 
-extern const char __gmt[];
+extern const char __utc[];
 
 struct tm *__gmtime_r(const time_t *restrict t, struct tm *restrict tm)
 {
@@ -12,7 +12,7 @@ struct tm *__gmtime_r(const time_t *restrict t, struct tm *restrict tm)
 	}
 	tm->tm_isdst = 0;
 	tm->__tm_gmtoff = 0;
-	tm->__tm_zone = __gmt;
+	tm->__tm_zone = __utc;
 	return tm;
 }
 
diff --git a/src/time/timegm.c b/src/time/timegm.c
index b5dae8b6..f444e76e 100644
--- a/src/time/timegm.c
+++ b/src/time/timegm.c
@@ -2,7 +2,7 @@
 #include "time_impl.h"
 #include <errno.h>
 
-extern const char __gmt[];
+extern const char __utc[];
 
 time_t timegm(struct tm *tm)
 {
@@ -15,6 +15,6 @@ time_t timegm(struct tm *tm)
 	*tm = new;
 	tm->tm_isdst = 0;
 	tm->__tm_gmtoff = 0;
-	tm->__tm_zone = __gmt;
+	tm->__tm_zone = __utc;
 	return t;
 }
-- 
2.13.2

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.