X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=libraries%2Fbin-package-db%2FDistribution%2FInstalledPackageInfo%2FBinary.hs;h=387b78f6310389812b966be09e8eb2c73bc6957b;hp=0f599298a50840928450ee6969cc3a130234071b;hb=f9460db84b4eb145d1356435127cce0a1a775c70;hpb=f41e3ea766c340c49b829eabfdea7c77bda2a95e diff --git a/libraries/bin-package-db/Distribution/InstalledPackageInfo/Binary.hs b/libraries/bin-package-db/Distribution/InstalledPackageInfo/Binary.hs index 0f59929..387b78f 100644 --- a/libraries/bin-package-db/Distribution/InstalledPackageInfo/Binary.hs +++ b/libraries/bin-package-db/Distribution/InstalledPackageInfo/Binary.hs @@ -19,9 +19,24 @@ import Distribution.Package hiding (depends) import Distribution.License import Distribution.InstalledPackageInfo as IPI import Data.Binary as Bin +import Control.Exception as Exception readBinPackageDB :: Binary m => FilePath -> IO [InstalledPackageInfo_ m] -readBinPackageDB file = Bin.decodeFile file +readBinPackageDB file + = do xs <- Bin.decodeFile file + _ <- Exception.evaluate $ length xs + return xs + `catchUserError` + (\err -> error ("While parsing " ++ show file ++ ": " ++ err)) + +catchUserError :: IO a -> (String -> IO a) -> IO a +#ifdef BASE3 +catchUserError io f = io `Exception.catch` \e -> case e of + ErrorCall err -> f err + _ -> throw e +#else +catchUserError io f = io `Exception.catch` \(ErrorCall err) -> f err +#endif writeBinPackageDB :: Binary m => FilePath -> [InstalledPackageInfo_ m] -> IO () writeBinPackageDB file ipis = Bin.encodeFile file ipis