packages feed

hstar-0.1.0.5: src/Compression/Lrzip.hs

module Compression.Lrzip ( decompress
                         ) where

import qualified Data.ByteString      as BS
import qualified Data.ByteString.Lazy as BSL
import           System.IO            (hSetBinaryMode)
import           System.IO.Unsafe     (unsafePerformIO)
import           System.Process       (CreateProcess, StdStream (CreatePipe, Inherit), createProcess, proc, std_err, std_in, std_out)

decompress :: BS.ByteString -> BSL.ByteString
decompress = unsafePerformIO . decompressIO

bsProc :: CreateProcess -> BS.ByteString -> IO BSL.ByteString
bsProc p bs = do
    (Just stdin, Just stdout, _, _) <- createProcess p { std_in = CreatePipe, std_out = CreatePipe }
    BS.hPut stdin bs
    hSetBinaryMode stdout True
    BSL.hGetContents stdout

decompressIO :: BS.ByteString -> IO BSL.ByteString
decompressIO = bsProc ((proc "lrzip" ["-d", "-q"]) { std_err = Inherit })