lzlib 0.3.0.4 → 0.3.0.5
raw patch · 3 files changed
+32/−14 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +4/−0
- lzlib.cabal +1/−1
- src/Codec/Lzip.hs +27/−13
CHANGELOG.md view
@@ -1,5 +1,9 @@ # lzlib +## 0.3.0.5++ * `bracket` things better+ ## 0.3.0.4 * Use `bracket` and fix space leak
lzlib.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: lzlib-version: 0.3.0.4+version: 0.3.0.5 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2019 Vanessa McHale
src/Codec/Lzip.hs view
@@ -55,19 +55,26 @@ decompress :: BSL.ByteString -> BSL.ByteString decompress bs = unsafeDupablePerformIO $ do - decoder <- lZDecompressOpen- maxSz <- lZDecompressWriteSize decoder- let bss = BSL.toChunks bs -- TODO: this might be silly: does it force everything into memory -- prematurely? sz = maximum (BS.length <$> bss)- bufMax = fromIntegral maxSz + let setup = do+ decoder <- lZDecompressOpen+ maxSz <- lZDecompressWriteSize decoder+ let bufMax = fromIntegral maxSz+ buf <- mallocBytes sz+ pure (decoder, buf, bufMax)++ let cleanup (decoder, buf, _) =+ lZDecompressClose decoder *>+ free buf+ res <- bracket- (mallocBytes sz)- ((lZDecompressClose decoder *>) . free)- (\buf -> loop decoder bss bufMax (buf, sz) mempty)+ setup+ cleanup+ (\(decoder, buf, bufMax) -> loop decoder bss bufMax (buf, sz) mempty) pure (BSL.fromChunks res) @@ -115,14 +122,21 @@ let bss = BSL.toChunks bstr sz = fromIntegral (BSL.length bstr)+ delta = sz `div` 4 + 64 - encoder <- lZCompressOpen (fromIntegral $ dictionarySize sz) (fromIntegral matchLenLimit) (fromIntegral memberSize)+ let setup = do+ encoder <- lZCompressOpen (fromIntegral $ dictionarySize sz) (fromIntegral matchLenLimit) (fromIntegral memberSize)+ newBytes <- mallocBytes delta+ pure (encoder, newBytes) - let delta = sz `div` 4 + 64- res <-bracket- (mallocBytes delta)- ((lZCompressClose encoder *>) . free)- (\newBytes -> loop encoder bss (newBytes, delta) 0 mempty)+ let cleanup (encoder, newBytes) =+ lZCompressClose encoder *>+ free newBytes++ res <- bracket+ setup+ cleanup+ (\(encoder, newBytes) -> loop encoder bss (newBytes, delta) 0 mempty) pure (BSL.fromChunks res)