[glib] Implement and test time zone name/abbrev setting for Windows.
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Implement and test time zone name/abbrev setting for Windows.
- Date: Tue, 18 Dec 2012 23:55:47 +0000 (UTC)
commit 7d1ae24e19b4eb35c6cea810284fadda58e6d40e
Author: John Ralls <jralls ceridwen us>
Date: Thu Dec 6 17:16:50 2012 -0800
Implement and test time zone name/abbrev setting for Windows.
glib/gtimezone.c | 14 ++++++++++++++
glib/tests/gdatetime.c | 9 +++++++++
2 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/glib/gtimezone.c b/glib/gtimezone.c
index 028d40a..6dfb5e3 100644
--- a/glib/gtimezone.c
+++ b/glib/gtimezone.c
@@ -546,6 +546,8 @@ rule_from_windows_time_zone_info (TimeZoneRule *rule,
rule->std_offset = -tzi->Bias * 60;
rule->dlt_start.mon = 0;
}
+ strncpy (rule->std_name, (gchar*)tzi->StandardName, NAME_SIZE - 1);
+ strncpy (rule->dlt_name, (gchar*)tzi->DaylightName, NAME_SIZE - 1);
}
static gchar*
@@ -639,6 +641,18 @@ rules_from_windows_time_zone (const gchar *identifier, TimeZoneRule **rules)
subkey = g_strconcat (reg_key, key_name, NULL);
subkey_dynamic = g_strconcat (subkey, "\\Dynamic DST", NULL);
+ if (RegOpenKeyExA (HKEY_LOCAL_MACHINE, subkey, 0,
+ KEY_QUERY_VALUE, &key) != ERROR_SUCCESS)
+ return 0;
+ size = sizeof tzi.StandardName;
+ if (RegQueryValueExA (key, "Std", NULL, NULL,
+ (LPBYTE)&(tzi.StandardName), &size) != ERROR_SUCCESS)
+ goto failed;
+ if (RegQueryValueExA (key, "Dlt", NULL, NULL,
+ (LPBYTE)&(tzi.DaylightName), &size) != ERROR_SUCCESS)
+ goto failed;
+
+ RegCloseKey (key);
if (RegOpenKeyExA (HKEY_LOCAL_MACHINE, subkey_dynamic, 0,
KEY_QUERY_VALUE, &key) == ERROR_SUCCESS)
{
diff --git a/glib/tests/gdatetime.c b/glib/tests/gdatetime.c
index c83098e..717ae34 100644
--- a/glib/tests/gdatetime.c
+++ b/glib/tests/gdatetime.c
@@ -624,7 +624,12 @@ test_GDateTime_new_full (void)
g_assert_cmpint (8, ==, g_date_time_get_hour (dt));
g_assert_cmpint (4, ==, g_date_time_get_minute (dt));
g_assert_cmpint (0, ==, g_date_time_get_second (dt));
+#ifdef G_OS_UNIX
g_assert_cmpstr ("BRT", ==, g_date_time_get_timezone_abbreviation (dt));
+#elif defined G_OS_WIN32
+ g_assert_cmpstr ("E. South America Standard Time", ==,
+ g_date_time_get_timezone_abbreviation (dt));
+#endif
g_assert (!g_date_time_is_daylight_savings (dt));
g_date_time_unref (dt);
}
@@ -879,7 +884,11 @@ GDateTime *__dt = g_date_time_new_local (2009, 10, 24, 0, 0, 0);\
TEST_PRINTF ("%%", "%");
TEST_PRINTF ("%", "");
TEST_PRINTF ("%9", NULL);
+#ifdef G_OS_UNIX
TEST_PRINTF ("%Z", dst);
+#elsif defined G_OS_WIN32
+ TEST_PRINTF ("%Z", "Pacific Standard Time")
+#endif
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]