glib r7308 - in trunk: . glib
- From: tml svn gnome org
- To: svn-commits-list gnome org
- Subject: glib r7308 - in trunk: . glib
- Date: Mon, 4 Aug 2008 19:22:05 +0000 (UTC)
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]