[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