
On Sat, 2010-02-06 at 12:28 +0100, Marco De Oliveira wrote:
Hi,
I try to initialize a C struct using the FFI API and ghc stays blocked when I execute my code (and I got sometimes the error "out of memory"). I do not understand, I do not find any mistake in my code:
{-# OPTIONS -XTypeSynonymInstances #-}
import Foreign.C.Types import Foreign.Marshal.Alloc import Foreign.Ptr import Foreign.Storable
It can be written as: import Foreign import Foreign.C
type CStruct = (CULong, CULong)
I guess that you may want to use newtype or data rather then type to avoid clashes (and have just 98 + FFI): newtype CStruct = CStruct (CULong, CULong) data CStruct = CStruct CULong CULong
instance Storable CStruct where sizeOf _ = 2*sizeOf (undefined::CULong) alignment _ = alignment (undefined::CULong)
To begin with - where's peek and poke?
test = alloca (\pStruct -> do poke pStruct ( (fromIntegral 1)::CULong, (fromIntegral 1)::CULong ) )
If you just do this at the beginning you may want to use with (notation as with newtype/data): with (CStruct (1, 1)) (\ptr -> ...) Also is main = test?
Thanks for your help.
Marco
Regards