[glib] Implement and test time zone name/abbrev setting for Windows.



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]