From 1faed130dc227f983f42f23df2a242bd004c4ac8 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Thu, 17 Nov 2011 00:52:59 +0100 Subject: gtimezone: consider a leading : in TZ environment variable When set to represent a zoneinfo file, TZ may start with :, therefore glib needs to check it and ignore the first char when building the resulting filename, or it won't be found. Also, the path could be absolute, in which case it is wrong to append /usr/share/timezone https://bugzilla.gnome.org/show_bug.cgi?id=664237 --- glib/gtimezone.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/glib/gtimezone.c b/glib/gtimezone.c index 2785d2271..8195106e0 100644 --- a/glib/gtimezone.c +++ b/glib/gtimezone.c @@ -368,6 +368,10 @@ g_time_zone_new (const gchar *identifier) { gchar *filename; + /* identifier can be a relative or absolute path name; + if relative, it is interpreted starting from /usr/share/timezone + while the POSIX standard says it should start with :, + glibc allows both syntaxes, so we should too */ if (identifier != NULL) { const gchar *tzdir; @@ -376,7 +380,13 @@ g_time_zone_new (const gchar *identifier) if (tzdir == NULL) tzdir = "/usr/share/zoneinfo"; - filename = g_build_filename (tzdir, identifier, NULL); + if (*identifier == ':') + identifier ++; + + if (g_path_is_absolute (identifier)) + filename = g_strdup (identifier); + else + filename = g_build_filename (tzdir, identifier, NULL); } else filename = g_strdup ("/etc/localtime"); -- cgit v1.2.1