From 88ef64e566cac30f552982354642feb993d13823 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 15 Mar 2011 01:16:27 -0400 Subject: calculate alignment in a way I can understand See http://therning.org/magnus/archives/315 --- Touch.hsc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Touch.hsc') diff --git a/Touch.hsc b/Touch.hsc index ad36761c4..f85873125 100644 --- a/Touch.hsc +++ b/Touch.hsc @@ -22,12 +22,14 @@ import Foreign.C #include #include -#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__) - data TimeSpec = TimeSpec CTime CLong instance Storable TimeSpec where - alignment _ = #{alignment struct timespec} + -- use the larger alignment of the two types in the struct + alignment _ = max sec_alignment nsec_alignment + where + sec_alignment = alignment $ undefined::CTime + nsec_alignment = alignment $ undefined::CLong sizeOf _ = #{size struct timespec} peek ptr = do sec <- #{peek struct timespec, tv_sec} ptr -- cgit v1.2.3