@@ -24,7 +24,9 @@ import Control.Applicative
24import Control.Monad.State.Strict
24import Control.Monad.State.Strict
25import Data.List (union)
25import Data.List (union)
26import Data.Maybe (fromJust, isNothing)
26import Data.Maybe (fromJust, isNothing)
27+import System.Directory (doesFileExist)
27−import System.FilePath (isValid, takeFileName)
29+import System.FilePath (isValid, takeExtension, takeFileName)
28import qualified Text.PrettyPrint.ANSI.Leijen as PP
30import qualified Text.PrettyPrint.ANSI.Leijen as PP
29import Text.Trifecta hiding (char, charLiteral, natural, span, string, symbol,
31import Text.Trifecta hiding (char, charLiteral, natural, span, string, symbol,
30 whiteSpace)
32 whiteSpace)
@@ -58,10 +60,19 @@ instance TokenParsing PParser where
59parseDesc :: FilePath -> IO PkgDesc
61parseDesc :: FilePath -> IO PkgDesc
60parseDesc fp = do
62parseDesc fp = do
63+ when (not $ takeExtension fp == ".ipkg") $ do
64+ putStrLn $ unwords ["The presented iPKG file does not have a '.ipkg' extension:", show fp]
65+ exitWith (ExitFailure 1)
66+ res <- doesFileExist fp
61− p <- readFile fp
69+ p <- readFile fp
62− case runparser pPkg defaultPkg fp p of
70+ case runparser pPkg defaultPkg fp p of
63− Failure (ErrInfo err _) -> fail (show $ PP.plain err)
71+ Failure (ErrInfo err _) -> fail (show $ PP.plain err)
64− Success x -> return x
72+ Success x -> return x
74+ putStrLn $ unwords [ "The presented iPKG file does not exist:", show fp]
75+ exitWith (ExitFailure 1)
66pPkg :: PParser PkgDesc
77pPkg :: PParser PkgDesc