@@ -21,11 +21,9 @@ import Control.Monad.State.Strict hiding (get, put)
21import qualified Control.Monad.State.Strict as ST
21import qualified Control.Monad.State.Strict as ST
22import System.FilePath
22import System.FilePath
23import System.Directory
23import System.Directory
24−import Codec.Compression.Zlib
24+import Codec.Compression.Zlib (compress)
25+import Util.Zlib (decompressEither)
30ibcVersion :: Word8
28ibcVersion :: Word8
31ibcVersion = 54
29ibcVersion = 54
@@ -74,9 +72,15 @@ loadIBC fp = do iLOG $ "Loading ibc " ++ fp
74 ibcf <- runIO $ (bdecode fp :: IO IBCFile)
72 ibcf <- runIO $ (bdecode fp :: IO IBCFile)
75 process ibcf fp
73 process ibcf fp
75+bencode :: Binary a => FilePath -> a -> IO ()
77bencode f d = B.writeFile f (compress (encode d))
76bencode f d = B.writeFile f (compress (encode d))
78+bdecode :: Binary b => FilePath -> IO b
78bdecode f = do d' <- B.readFile f
79bdecode f = do d' <- B.readFile f
81+ (\(_, e) -> error $ "Invalid / corrupted zip format on " ++ show f ++ ": " ++ e)
79− return (decode (decompress d'))
82+ (return . decode)
83+ (decompressEither d')
81writeIBC :: FilePath -> FilePath -> Idris ()
85writeIBC :: FilePath -> FilePath -> Idris ()
82writeIBC src f
86writeIBC src f