summaryrefslogtreecommitdiffstats
path: root/Modules/posixmodule.c
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2006-05-12 17:22:04 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2006-05-12 17:22:04 (GMT)
commit77c176d5b561810fa1c87ca53fc8cce4a38553c3 (patch)
treec6755dd300431e20f101e5202e2ec6e43e0d138c /Modules/posixmodule.c
parent159a1160c1e587b66068ec51e703328ed1284a5f (diff)
downloadcpython-77c176d5b561810fa1c87ca53fc8cce4a38553c3.zip
cpython-77c176d5b561810fa1c87ca53fc8cce4a38553c3.tar.gz
cpython-77c176d5b561810fa1c87ca53fc8cce4a38553c3.tar.bz2
Fix alignment error on Itanium.
Diffstat (limited to 'Modules/posixmodule.c')
-rw-r--r--Modules/posixmodule.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 05481f8..f77832d 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -763,8 +763,11 @@ static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 an
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 @@ time_t_to_FILE_TIME(int time_in, int nsec_in, FILETIME *out_ptr)
__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 */