thanks, but also after changing my CString/newCString to CWString/newCWString I'm getting the segfault. As I mentioned if I run the setmodulestring function from ghci everyting works fine (I get proper return value). The problem only comes if I call setmodulestring from the main. I have simplified the main here: main = do let param = "FilePath" let value = "C:/dev/misc/haskell/services/FM" result <- liftIO $ FM.setmodulestring param value return "done" Another strange thing is that I can call another external function from the 'main' function without problem. On Fri, Mar 14, 2014 at 9:52 PM, Brandon Allbery <allbery.b@gmail.com>wrote:
On Fri, Mar 14, 2014 at 4:46 PM, Miro Karpis <miroslav.karpis@gmail.com>wrote:
setmodulestring :: String -> String -> IO CInt setmodulestring param value = do cParam <- newCString param cValue <- newCString value let cParamLength = fromIntegral $ length param ::CInt cValueLength = fromIntegral $ length value ::CInt setVarInArray = (-1)::CInt result <- c_setmodulestring cParam cParamLength cValue cValueLength setVarInArray return result
The path you show earlier looks like Windows; you probably want CWString for Win32 API functions (so newCWString etc.).
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net