Environment variable does not work (especially DARCS_EDITOR)

Benedikt Schmidt ry102 at rz.uni-karlsruhe.de
Mon Apr 25 21:15:26 EDT 2005


Sorry for taking so long to reply.

On Tue, 2005-04-19 at 11:36 +0100, Simon Marlow wrote:
> On 16 April 2005 20:41, Benedikt Schmidt wrote: 
> > module Main where
> > import System.Cmd
> > main = rawSystem "nvi" []
[ patch calling resetNonBlockingFD in runProcess ]
> If we did this, we would also need to re-enable non-blocking mode after
> the rawSystem completes.  Also, this doesn't work well if runProcess is
> used and the Haskell program continues to run while the subprocess is
> executing, because the O_NONBLOCK flag is shared between parent and
> child.

I didn't think about the flags beeing shared between parent and child.

I tried using setFdOption first, but didn't see that rawSystem sets
stdin back to blocking mode when stdin is evaluated.

This works for me now with ghc-6.4:
main = do stdin `seq` return ()
          bracket (setFdOption stdInput NonBlockingRead False)
                  (\_ -> setFdOption stdInput NonBlockingRead True)
                  (\_ -> rawSystem "nvi" [])


> So I suggest doing this for System.Cmd.{system,rawSystem} only.

Would something like that be safe for system and rawSystem if all
arguments where forced before the setFdOption? If there are
several threads?

Benedikt



More information about the Libraries mailing list