aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Util/Run.hs
diff options
context:
space:
mode:
Diffstat (limited to 'XMonad/Util/Run.hs')
-rw-r--r--XMonad/Util/Run.hs11
1 files changed, 7 insertions, 4 deletions
diff --git a/XMonad/Util/Run.hs b/XMonad/Util/Run.hs
index 4b766d8..34c9b5e 100644
--- a/XMonad/Util/Run.hs
+++ b/XMonad/Util/Run.hs
@@ -31,6 +31,7 @@ module XMonad.Util.Run (
hPutStr, hPutStrLn -- re-export for convenience
) where
+import Codec.Binary.UTF8.String
import System.Posix.IO
import System.Posix.Process (createSession, executeFile, forkProcess)
import Control.Concurrent (threadDelay)
@@ -53,7 +54,8 @@ import Control.Monad
-- | Returns the output.
runProcessWithInput :: MonadIO m => FilePath -> [String] -> String -> m String
runProcessWithInput cmd args input = io $ do
- (pin, pout, perr, _) <- runInteractiveProcess cmd args Nothing Nothing
+ (pin, pout, perr, _) <- runInteractiveProcess (encodeString cmd)
+ (map encodeString args) Nothing Nothing
hPutStr pin input
hClose pin
output <- hGetContents pout
@@ -67,7 +69,8 @@ runProcessWithInput cmd args input = io $ do
runProcessWithInputAndWait :: MonadIO m => FilePath -> [String] -> String -> Int -> m ()
runProcessWithInputAndWait cmd args input timeout = io $ do
_ <- xfork $ do
- (pin, pout, perr, _) <- runInteractiveProcess cmd args Nothing Nothing
+ (pin, pout, perr, _) <- runInteractiveProcess (encodeString cmd)
+ (map encodeString args) Nothing Nothing
hPutStr pin input
hFlush pin
threadDelay timeout
@@ -108,7 +111,7 @@ safeSpawn :: MonadIO m => FilePath -> [String] -> m ()
safeSpawn prog args = io $ void_ $ forkProcess $ do
uninstallSignalHandlers
_ <- createSession
- executeFile prog True args Nothing
+ executeFile (encodeString prog) True (map encodeString args) Nothing
where void_ = (>> return ()) -- TODO: replace with Control.Monad.void / void not in ghc6 apparently
-- | Simplified 'safeSpawn'; only takes a program (and no arguments):
@@ -141,6 +144,6 @@ spawnPipe x = io $ do
hSetBuffering h LineBuffering
_ <- xfork $ do
_ <- dupTo rd stdInput
- executeFile "/bin/sh" False ["-c", x] Nothing
+ executeFile "/bin/sh" False ["-c", encodeString x] Nothing
closeFd rd
return h