calculate alignment in a way I can understand

See http://therning.org/magnus/archives/315
This commit is contained in:
Joey Hess 2011-03-15 01:16:27 -04:00
parent bc5c54c987
commit 88ef64e566

View file

@ -22,12 +22,14 @@ import Foreign.C
#include <sys/stat.h>
#include <fcntl.h>
#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