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
This commit is contained in:
Giovanni Campagna 2011-11-17 00:52:59 +01:00
parent b98b63187a
commit 1faed130dc

View File

@ -368,6 +368,10 @@ g_time_zone_new (const gchar *identifier)
{ {
gchar *filename; 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) if (identifier != NULL)
{ {
const gchar *tzdir; const gchar *tzdir;
@ -376,7 +380,13 @@ g_time_zone_new (const gchar *identifier)
if (tzdir == NULL) if (tzdir == NULL)
tzdir = "/usr/share/zoneinfo"; 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 else
filename = g_strdup ("/etc/localtime"); filename = g_strdup ("/etc/localtime");