module Codec.Archive.Foreign ( unpackToDir
                             ) where

import           Data.ByteString  as BS
import           Data.Word        (Word)
import           Foreign.C.String
import           Foreign.C.Types
import           Foreign.Ptr
import           System.FilePath  (pathSeparator)

foreign import ccall unsafe unpack_in_dir :: CString -> Ptr CChar -> Word -> IO ()

unpackToDir :: FilePath -- ^ Directory to unpack in
            -> BS.ByteString -- ^ 'ByteString' containing archive
            -> IO ()
unpackToDir fp bs = do
    fp' <- newCString (fp ++ [pathSeparator])
    useAsCStringLen bs $
        \(charPtr, sz) ->
            unpack_in_dir fp' charPtr (fromIntegral sz)