summaryrefslogtreecommitdiff
path: root/src/Data
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-06-24 10:39:03 +0000
committerkrasimir <krasimir@chalmers.se>2009-06-24 10:39:03 +0000
commitcf4efe0acc86f7e03327de6115355506bd8f18ba (patch)
tree08c654d9fc42cc0e7fefdc0385ef782b3d46c20b /src/Data
parent9e3131f169d65034c67c19bf8549c099a3bbdddd (diff)
explicitly close the file handle in Data.Binary.decodeFile
Diffstat (limited to 'src/Data')
-rw-r--r--src/Data/Binary.hs11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/Data/Binary.hs b/src/Data/Binary.hs
index 310e73956..a0a0bc702 100644
--- a/src/Data/Binary.hs
+++ b/src/Data/Binary.hs
@@ -64,6 +64,7 @@ import Data.Binary.Put
import Data.Binary.Get
import Control.Monad
+import Control.Exception
import Foreign
import System.IO
@@ -270,11 +271,11 @@ encodeFile f v = L.writeFile f (encode v)
-- or otherwise finalise the resource.
--
decodeFile :: Binary a => FilePath -> IO a
-decodeFile f = do
- s <- L.readFile f
- return $! runGet (do v <- get
- m <- isEmpty
- m `seq` return v) s
+decodeFile f = bracket (openFile f ReadMode) hClose $ \h -> do
+ s <- L.hGetContents h
+ evaluate $ runGet (do v <- get
+ m <- isEmpty
+ m `seq` return v) s
-- needs bytestring 0.9.1.x to work