arx-0.3.0: System/Posix/ARX/Tar.hs
{-# LANGUAGE OverloadedStrings
, StandaloneDeriving #-}
module System.Posix.ARX.Tar where
import Prelude hiding (drop, take)
import Data.ByteString.Lazy.Char8
{-| Handled styles of Tar archive.
-}
data Tar = TAR | TBZ | TGZ | TXZ
deriving instance Eq Tar
deriving instance Ord Tar
deriving instance Show Tar
{-| Scan a lazy ByteString for file magic.
-}
magic :: ByteString -> Maybe Tar
magic b | bzMagic b = Just TBZ
| gzMagic b = Just TGZ
| tarMagic b = Just TAR
| xzMagic b = Just TXZ
| otherwise = Nothing
bzMagic = (== "BZh") . take 3
gzMagic = (== "\x1F\x8b") . take 2
tarMagic = (== "ustar") . take 5 . drop 257
xzMagic = (== xzBytes) . take 6
where
xzBytes = '\xFD' `cons` "7zXZ\0"