
I finally managed to fix the seg-fault. Brandon and Branimir you were as
always right ;-) . Problem was in the external function definition. After
changing it to 'stdcall' everything works fine.
for further reference working code below:
foreign import stdcall safe "setmodulestring" c_setmodulestring :: CString
-> CUInt -> CString -> CUInt -> CInt -> IO CInt
--all 3 versions work fine:
setmodulestring param value = do
cParam <- newCString param
cValue <- newCString value
let cParamLength = fromIntegral $ length param ::CUInt
cValueLength = fromIntegral $ length value ::CUInt
setVarInArray = (-1)::CInt
result <- c_setmodulestring cParam cParamLength cValue cValueLength
setVarInArray
free cParam
free cValue
return result
setmodulestring2 param value = do
let cParamLength = fromIntegral $ length param ::CUInt
cValueLength = fromIntegral $ length value ::CUInt
setVarInArray = (-1)::CInt
B.useAsCString (B.pack param) $ \cParam -> do
B.useAsCString (B.pack value) $ \cValue -> do
result <- c_setmodulestring cParam cParamLength cValue cValueLength
setVarInArray
return result
setmodulestring3 param value =
withCString param $ \cParam -> do
withCString value $ \cValue -> do
result <- c_setmodulestring cParam cParamLength cValue cValueLength
setVarInArray
return result
where
cParamLength = fromIntegral $ length param ::CUInt
cValueLength = fromIntegral $ length value ::CUInt
setVarInArray = (-1)::CInt
thank you cafe, for helping me along this ;-)
On Sun, Mar 16, 2014 at 11:57 PM, Miro Karpis
sorry,...yes it works with -fno-ghci-sandbox (no seg.fault)
On Sun, Mar 16, 2014 at 11:47 PM, Brandon Allbery
wrote: On Sun, Mar 16, 2014 at 6:38 PM, Miro Karpis
wrote: after looking a bit more I can see that the ffi call does what it should do, but it crashes right after that. As mentioned before in ghci everything runs fine.
I don't think I got an answer to this before: does it still work in ghci if you run it with
ghci -fno-ghci-sandbox
?
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net