<div dir="ltr"><font color="#444444">thanks, but also after changing my CString/newCString to CWString/newCWString I'm getting the segfault. As I mentioned if I run the <span style="font-family:arial,sans-serif;font-size:13px">setmodulestring function from ghci everyting works fine (I get proper return value). The problem only comes if I call </span><span style="font-family:arial,sans-serif;font-size:13px">setmodulestring from the main. </span></font><div>
<span style="font-family:arial,sans-serif;font-size:13px"><font color="#444444"><br></font></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><font color="#444444">I have simplified the main here:</font></span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><font color="#444444"><div>main = do</div><div><span class="" style="white-space:pre"> </span>let param = "FilePath"</div><div><span class="" style="white-space:pre">   </span>let value = "C:/dev/misc/haskell/services/FM"</div>
<div><span class="" style="white-space:pre">    </span>result <- liftIO $ FM.setmodulestring param value</div><div><span class="" style="white-space:pre">       </span>return "done"</div><div><br></div><div>Another strange thing is that I can call another external function from the 'main' function without problem. </div>
</font></span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Mar 14, 2014 at 9:52 PM, Brandon Allbery <span dir="ltr"><<a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="">On Fri, Mar 14, 2014 at 4:46 PM, Miro Karpis <span dir="ltr"><<a href="mailto:miroslav.karpis@gmail.com" target="_blank">miroslav.karpis@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>setmodulestring :: String -> String -> IO CInt</div><div>setmodulestring param value = do</div>


<div><span style="white-space:pre-wrap">  </span>cParam <- newCString param</div><div><span style="white-space:pre-wrap">    </span>cValue <- newCString value</div><div><span style="white-space:pre-wrap">    </span>let cParamLength = fromIntegral $ length param ::CInt</div>


<div><span style="white-space:pre-wrap">  </span>    cValueLength = fromIntegral $ length value ::CInt</div><div><span style="white-space:pre-wrap">    </span>    setVarInArray = (-1)::CInt </div><div><span style="white-space:pre-wrap">  </span>result <- c_setmodulestring cParam cParamLength cValue cValueLength setVarInArray</div>


<div><span style="white-space:pre-wrap">  </span>return result</div></div></div></div></blockquote><div><br></div></div><div>The path you show earlier looks like Windows; you probably want CWString for Win32 API functions (so newCWString etc.).</div>
<span class="HOEnZb"><font color="#888888">
<div><br></div></font></span></div><span class="HOEnZb"><font color="#888888">-- <br><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div>

<div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div>
</font></span></div></div>
</blockquote></div><br></div>