From dbf59167c40b112c78b4beeee3025eb2438a8f8e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 6 Oct 2012 16:16:31 -0400 Subject: look for sysctl in some common sbin locations when it's not in PATH --- Utility/INotify.hs | 11 ++++++----- Utility/Monad.hs | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Utility/INotify.hs b/Utility/INotify.hs index 7934c2446..b55fbc953 100644 --- a/Utility/INotify.hs +++ b/Utility/INotify.hs @@ -164,10 +164,11 @@ tooManyWatches hook dir = do ] querySysctl :: Read a => [CommandParam] -> IO (Maybe a) -querySysctl ps = do - v <- catchMaybeIO $ readProcess "sysctl" (toCommand ps) - case v of - Nothing -> return Nothing - Just s -> return $ parsesysctl s +querySysctl ps = getM go ["sysctl", "/sbin/sysctl", "/usr/sbin/sysctl"] where + go p = do + v <- catchMaybeIO $ readProcess p (toCommand ps) + case v of + Nothing -> return Nothing + Just s -> return $ parsesysctl s parsesysctl s = readish =<< lastMaybe (words s) diff --git a/Utility/Monad.hs b/Utility/Monad.hs index 2c9b9e9e0..6abd7ee5d 100644 --- a/Utility/Monad.hs +++ b/Utility/Monad.hs @@ -16,6 +16,12 @@ firstM :: Monad m => (a -> m Bool) -> [a] -> m (Maybe a) firstM _ [] = return Nothing firstM p (x:xs) = ifM (p x) (return $ Just x , firstM p xs) +{- Runs the action on values from the list until it succeeds, returning + - its result. -} +getM :: Monad m => (a -> m (Maybe b)) -> [a] -> m (Maybe b) +getM _ [] = return Nothing +getM p (x:xs) = maybe (getM p xs) (return . Just) =<< p x + {- Returns true if any value in the list satisfies the predicate, - stopping once one is found. -} anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool -- cgit v1.2.3