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