glib r7308 - in trunk: . glib



Author: tml
Date: Mon Aug  4 19:22:05 2008
New Revision: 7308
URL: http://svn.gnome.org/viewvc/glib?rev=7308&view=rev

Log:
2008-08-04  Tor Lillqvist  <tml novell com>

	* glib/gmain.c (g_get_current_time): MSDN says: "Do not cast a
	pointer to a FILETIME structure to either a LARGE_INTEGER* or
	__int64* value because it can cause alignment faults on 64-bit
	Windows." So don't do that then. Indeed the code did work randomly
	on Win64 when compiled with optimisation.



Modified:
   trunk/ChangeLog
   trunk/glib/gmain.c

Modified: trunk/glib/gmain.c
==============================================================================
--- trunk/glib/gmain.c	(original)
+++ trunk/glib/gmain.c	Mon Aug  4 19:22:05 2008
@@ -1717,20 +1717,21 @@
   result->tv_usec = r.tv_usec;
 #else
   FILETIME ft;
-  guint64 *time64 = (guint64 *) &ft;
+  guint64 time64;
 
   g_return_if_fail (result != NULL);
 
   GetSystemTimeAsFileTime (&ft);
+  memmove (&time64, &ft, sizeof (FILETIME));
 
   /* Convert from 100s of nanoseconds since 1601-01-01
    * to Unix epoch. Yes, this is Y2038 unsafe.
    */
-  *time64 -= G_GINT64_CONSTANT (116444736000000000);
-  *time64 /= 10;
+  time64 -= G_GINT64_CONSTANT (116444736000000000);
+  time64 /= 10;
 
-  result->tv_sec = *time64 / 1000000;
-  result->tv_usec = *time64 % 1000000;
+  result->tv_sec = time64 / 1000000;
+  result->tv_usec = time64 % 1000000;
 #endif
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]