From 8828f65cb7a7a9c729d93d3d433150257f13c72f Mon Sep 17 00:00:00 2001 From: Joshua Clayton Date: Mon, 27 Jun 2016 05:55:11 -0400 Subject: [PATCH] Make reading files safer --- src/Unused/ResultsClassifier/Config.hs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Unused/ResultsClassifier/Config.hs b/src/Unused/ResultsClassifier/Config.hs index ea09831..5621617 100644 --- a/src/Unused/ResultsClassifier/Config.hs +++ b/src/Unused/ResultsClassifier/Config.hs @@ -9,13 +9,13 @@ import qualified Data.ByteString.Char8 as C import qualified Data.Either as E import qualified Data.Bifunctor as B import System.FilePath (()) -import System.Directory (getHomeDirectory) +import System.Directory (getHomeDirectory, doesFileExist) import Paths_unused (getDataFileName) import Unused.ResultsClassifier.Types (LanguageConfiguration, ParseConfigError(..)) import Unused.Util (readIfFileExists) loadConfig :: IO (Either String [LanguageConfiguration]) -loadConfig = Y.decodeEither <$> readConfig +loadConfig = either Left Y.decodeEither <$> readConfig loadAllConfigurations :: IO (Either [ParseConfigError] [LanguageConfiguration]) loadAllConfigurations = do @@ -41,5 +41,11 @@ loadConfigFromFile path = do addSourceToLeft :: String -> Either String c -> Either ParseConfigError c addSourceToLeft source = B.first (ParseConfigError source) -readConfig :: IO BS.ByteString -readConfig = getDataFileName ("data" "config.yml") >>= BS.readFile +readConfig :: IO (Either String BS.ByteString) +readConfig = do + configFileName <- getDataFileName ("data" "config.yml") + exists <- doesFileExist configFileName + + if exists + then Right <$> BS.readFile configFileName + else return $ Left "default config not found"