diff --git a/glib/gtimezone.c b/glib/gtimezone.c index 780a38892..178c94531 100644 --- a/glib/gtimezone.c +++ b/glib/gtimezone.c @@ -366,6 +366,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; @@ -374,7 +378,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");