summaryrefslogtreecommitdiff
path: root/Utility.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Utility.hs')
-rw-r--r--Utility.hs22
1 files changed, 21 insertions, 1 deletions
diff --git a/Utility.hs b/Utility.hs
index e4278ff3f..09b973002 100644
--- a/Utility.hs
+++ b/Utility.hs
@@ -6,10 +6,15 @@ module Utility (
hGetContentsStrict,
parentDir,
relPathCwdToDir,
- relPathDirToDir
+ relPathDirToDir,
+ boolSystem
) where
import System.IO
+import System.Cmd
+import System.Exit
+import System.Posix.Signals
+import Data.Typeable
import System.Posix.IO
import Data.String.Utils
import System.Path
@@ -88,3 +93,18 @@ relPathDirToDir from to =
dotdots = take ((length pfrom) - numcommon) $ repeat ".."
numcommon = length $ common
path = join s $ dotdots ++ uncommon
+
+{- Run a system command, and returns True or False
+ - if it succeeded or failed.
+ -
+ - An error is thrown if the command exits due to SIGINT,
+ - to propigate ctrl-c.
+ -}
+boolSystem :: FilePath -> [String] -> IO Bool
+boolSystem command params = do
+ r <- rawSystem command params
+ case r of
+ ExitSuccess -> return True
+ ExitFailure e -> if Just e == cast sigINT
+ then error $ command ++ "interrupted"
+ else return False