[Python-checkins] r45977 - python/trunk/Modules/posixmodule.c

martin.v.loewis python-checkins at python.org
Fri May 12 19:22:05 CEST 2006


Author: martin.v.loewis
Date: Fri May 12 19:22:04 2006
New Revision: 45977

Modified:
   python/trunk/Modules/posixmodule.c
Log:
Fix alignment error on Itanium.

Modified: python/trunk/Modules/posixmodule.c
==============================================================================
--- python/trunk/Modules/posixmodule.c	(original)
+++ python/trunk/Modules/posixmodule.c	Fri May 12 19:22:04 2006
@@ -763,8 +763,11 @@
 static void
 FILE_TIME_to_time_t_nsec(FILETIME *in_ptr, int *time_out, int* nsec_out)
 {
-	/* XXX endianness */
-	__int64 in = *(__int64*)in_ptr;
+	/* XXX endianness. Shouldn't matter, as all Windows implementations are little-endian */
+	/* Cannot simply cast and dereference in_ptr, 
+	   since it might not be aligned properly */
+	__int64 in;
+	memcpy(&in, in_ptr, sizeof(in));
 	*nsec_out = (int)(in % 10000000) * 100; /* FILETIME is in units of 100 nsec. */
 	/* XXX Win32 supports time stamps past 2038; we currently don't */
 	*time_out = Py_SAFE_DOWNCAST((in / 10000000) - secs_between_epochs, __int64, int);
@@ -777,7 +780,7 @@
 	__int64 out;
 	out = time_in + secs_between_epochs;
 	out = out * 10000000 + nsec_in;
-	*(__int64*)out_ptr = out;
+	memcpy(out_ptr, &out, sizeof(out));
 }
 
 /* Below, we *know* that ugo+r is 0444 */


More information about the Python-checkins mailing list