-- GENERATED by C->Haskell Compiler, version 0.28.6 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Codec/Archive/Foreign/Archive.chs" #-}
-- | This module corresponds to @archive.h@
module Codec.Archive.Foreign.Archive ( -- * Direct bindings (read)
                                       archive_read_new
                                     , archive_read_data_skip
                                     , archive_read_data
                                     , archive_read_data_block
                                     , archive_read_free
                                     , archive_read_extract
                                     , archive_read_open_filename
                                     , archive_read_open_filename_w
                                     , archive_read_support_filter_all
                                     , archive_read_support_filter_bzip2
                                     , archive_read_support_filter_compress
                                     , archive_read_support_filter_gzip
                                     , archive_read_support_filter_grzip
                                     , archive_read_support_filter_lrzip
                                     , archive_read_support_filter_lz4
                                     , archive_read_support_filter_lzip
                                     , archive_read_support_filter_lzma
                                     , archive_read_support_filter_lzop
                                     , archive_read_support_filter_none
                                     , archive_read_support_filter_program
                                     , archive_read_support_filter_program_signature
                                     , archive_read_support_filter_rpm
                                     , archive_read_support_filter_uu
                                     , archive_read_support_filter_xz
                                     , archive_read_support_format_7zip
                                     , archive_read_support_format_all
                                     , archive_read_support_format_ar
                                     , archive_read_add_passphrase
                                     , archive_read_set_passphrase_callback
                                     , archive_read_extract2
                                     , archive_read_extract_set_progress_callback
                                     , archive_read_extract_set_skip_file
                                     , archive_read_close
                                     , archive_read_support_format_by_code
                                     , archive_read_support_format_cab
                                     , archive_read_support_format_cpio
                                     , archive_read_support_format_empty
                                     , archive_read_support_format_gnutar
                                     , archive_read_support_format_iso9660
                                     , archive_read_support_format_lha
                                     , archive_read_support_format_mtree
                                     , archive_read_support_format_rar
                                     , archive_read_support_format_raw
                                     , archive_read_support_format_tar
                                     , archive_read_support_format_warc
                                     , archive_read_support_format_xar
                                     , archive_read_support_format_zip
                                     , archive_read_support_format_zip_streamable
                                     , archive_read_support_format_zip_seekable
                                     , archive_read_set_format
                                     , archive_read_append_filter
                                     , archive_read_append_filter_program
                                     , archive_read_append_filter_program_signature
                                     , archive_read_set_open_callback
                                     , archive_read_set_read_callback
                                     , archive_read_set_seek_callback
                                     , archive_read_set_skip_callback
                                     , archive_read_set_close_callback
                                     , archive_read_set_switch_callback
                                     , archive_read_set_callback_data
                                     , archive_read_set_callback_data2
                                     , archive_read_add_callback_data
                                     , archive_read_append_callback_data
                                     , archive_read_prepend_callback_data
                                     , archive_read_open1
                                     , archive_read_open
                                     , archive_read_open2
                                     , archive_read_open_filenames
                                     , archive_read_open_memory
                                     , archive_read_open_memory2
                                     , archive_read_open_fd
                                     , archive_read_next_header
                                     , archive_read_next_header2
                                     , archive_read_header_position
                                     , archiveReadHasEncryptedEntries
                                     , archive_read_format_capabilities
                                     , archive_seek_data
                                     , archive_read_data_into_fd
                                     , archive_read_set_format_option
                                     , archive_read_set_filter_option
                                     , archive_read_set_option
                                     , archive_read_set_options
                                     , archive_read_disk_new
                                     , archive_read_disk_set_symlink_logical
                                     , archive_read_disk_set_symlink_physical
                                     , archive_read_disk_set_symlink_hybrid
                                     , archive_read_disk_entry_from_file
                                     , archive_read_disk_gname
                                     , archive_read_disk_uname
                                     , archive_read_disk_set_standard_lookup
                                     , archive_read_disk_set_gname_lookup
                                     , archive_read_disk_set_uname_lookup
                                     , archive_read_disk_open
                                     , archive_read_disk_open_w
                                     , archive_read_disk_descend
                                     , archiveReadDiskCanDescend
                                     , archive_read_disk_current_filesystem
                                     , archiveReadDiskCurrentFilesystemIsSynthetic
                                     , archiveReadDiskCurrentFilesystemIsRemote
                                     , archive_read_disk_set_atime_restored
                                     , archive_read_disk_set_behavior
                                     , archive_read_disk_set_matching
                                     , archive_read_disk_set_metadata_filter_callback
                                     -- * Direct bindings (write)
                                     , archive_write_set_bytes_per_block
                                     , archive_write_get_bytes_per_block
                                     , archive_write_set_bytes_in_last_block
                                     , archive_write_get_bytes_in_last_block
                                     , archive_write_set_skip_file
                                     , archive_write_add_filter
                                     , archive_write_add_filter_by_name
                                     , archive_write_add_filter_b64encode
                                     , archive_write_add_filter_bzip2
                                     , archive_write_add_filter_compress
                                     , archive_write_add_filter_grzip
                                     , archive_write_add_filter_gzip
                                     , archive_write_add_filter_lrzip
                                     , archive_write_add_filter_lz4
                                     , archive_write_add_filter_lzip
                                     , archive_write_add_filter_lzma
                                     , archive_write_add_filter_lzop
                                     , archive_write_add_filter_none
                                     , archive_write_add_filter_program
                                     , archive_write_add_filter_uuencode
                                     , archive_write_add_filter_xz
                                     , archive_write_data
                                     , archive_write_new
                                     , archive_write_free
                                     , archive_write_set_format_pax_restricted
                                     , archive_write_header
                                     , archive_write_set_format
                                     , archive_write_set_format_by_name
                                     , archive_write_set_format_7zip
                                     , archive_write_set_format_ar_bsd
                                     , archive_write_set_format_ar_svr4
                                     , archive_write_set_format_cpio
                                     , archive_write_set_format_cpio_newc
                                     , archive_write_set_format_gnutar
                                     , archive_write_set_format_iso9660
                                     , archive_write_set_format_mtree
                                     , archive_write_set_format_mtree_classic
                                     , archive_write_set_format_pax
                                     , archive_write_set_format_raw
                                     , archive_write_set_format_shar
                                     , archive_write_set_format_shar_dump
                                     , archive_write_set_format_ustar
                                     , archive_write_set_format_v7tar
                                     , archive_write_set_format_warc
                                     , archive_write_set_format_xar
                                     , archive_write_set_format_zip
                                     , archive_write_set_format_filter_by_ext
                                     , archive_write_set_format_filter_by_ext_def
                                     , archive_write_zip_set_compression_deflate
                                     , archive_write_zip_set_compression_store
                                     , archive_write_open
                                     , archive_write_open_fd
                                     , archive_write_open_filename
                                     , archive_write_open_filename_w
                                     , archive_write_open_memory
                                     , archive_write_data_block
                                     , archive_write_finish_entry
                                     , archive_write_close
                                     , archive_write_fail
                                     , archive_write_set_format_option
                                     , archive_write_set_filter_option
                                     , archive_write_set_option
                                     , archive_write_set_options
                                     , archive_write_set_passphrase
                                     , archive_write_set_passphrase_callback
                                     , archive_write_disk_new
                                     , archive_write_disk_set_skip_file
                                     , archive_write_disk_set_options
                                     , archive_write_disk_set_standard_lookup
                                     , archive_write_disk_set_group_lookup
                                     , archive_write_disk_set_user_lookup
                                     , archive_write_disk_gid
                                     , archive_write_disk_uid
                                     -- * Direct bindings (archive error)
                                     , archive_errno
                                     , archive_error_string
                                     , archive_format_name
                                     , archive_format
                                     , archive_clear_error
                                     , archive_set_error
                                     , archive_copy_error
                                     , archive_file_count
                                     -- * Direct bindings (archive match)
                                     , archive_match_new
                                     , archive_match_free
                                     , archiveMatchExcluded
                                     , archiveMatchPathExcluded
                                     , archive_match_exclude_pattern
                                     , archive_match_exclude_pattern_w
                                     , archiveMatchExcludePatternFromFile
                                     , archiveMatchExcludePatternFromFileW
                                     , archive_match_include_pattern
                                     , archive_match_include_pattern_w
                                     , archiveMatchIncludePatternFromFile
                                     , archiveMatchIncludePatternFromFileW
                                     , archive_match_path_unmatched_inclusions
                                     , archive_match_path_unmatched_inclusions_next
                                     , archive_match_path_unmatched_inclusions_next_w
                                     , archiveMatchTimeExcluded
                                     , archive_match_include_time
                                     , archive_match_include_date
                                     , archive_match_include_date_w
                                     , archive_match_include_file_time
                                     , archive_match_include_file_time_w
                                     , archive_match_exclude_entry
                                     , archiveMatchOwnerExcluded
                                     , archive_match_include_uid
                                     , archive_match_include_gid
                                     , archive_match_include_uname
                                     , archive_match_include_uname_w
                                     , archive_match_include_gname
                                     , archive_match_include_gname_w
                                     -- * Direct bindings (version\/filter\/miscellaneous)
                                     , archive_version_number
                                     , archive_version_string
                                     , archive_version_details
                                     , archive_free
                                     , archive_filter_count
                                     , archive_filter_bytes
                                     , archive_filter_code
                                     , archive_filter_name
                                     -- * Version macros
                                     , archiveVersionNumber
                                     , archiveVersionOnlyString
                                     , archiveVersionString
                                     -- * Capability macros
                                     , archiveReadFormatCapsNone
                                     , archiveReadFormatCapsEncryptData
                                     , archiveReadFormatCapsEncryptMetadata
                                     -- * Header read macros
                                     , archiveOk
                                     , archiveEOF
                                     , archiveRetry
                                     , archiveWarn
                                     , archiveFailed
                                     , archiveFatal
                                     -- * Time matching macros
                                     , archiveMatchMTime
                                     , archiveMatchCTime
                                     , archiveMatchNewer
                                     , archiveMatchOlder
                                     , archiveMatchEqual
                                     -- * Entry flags
                                     , archiveExtractOwner
                                     , archiveExtractPerm
                                     , archiveExtractTime
                                     , archiveExtractNoOverwrite
                                     , archiveExtractUnlink
                                     , archiveExtractACL
                                     , archiveExtractFFlags
                                     , archiveExtractXattr
                                     , archiveExtractSecureSymlinks
                                     , archiveExtractSecureNoDotDot
                                     , archiveExtractNoAutodir
                                     , archiveExtractSparse
                                     , archiveExtractMacMetadata
                                     , archiveExtractNoHfsCompression
                                     , archiveExtractHfsCompressionForced
                                     , archiveExtractSecureNoAbsolutePaths
                                     , archiveExtractClearNoChangeFFlags
                                     -- * Filters
                                     , archiveFilterNone
                                     , archiveFilterGzip
                                     , archiveFilterBzip2
                                     , archiveFilterCompress
                                     , archiveFilterProgram
                                     , archiveFilterLzma
                                     , archiveFilterXz
                                     , archiveFilterUu
                                     , archiveFilterRpm
                                     , archiveFilterLzip
                                     , archiveFilterLrzip
                                     , archiveFilterLzop
                                     , archiveFilterGrzip
                                     , archiveFilterLz4
                                     -- * Formats
                                     , archiveFormatCpio
                                     , archiveFormatShar
                                     , archiveFormatTar
                                     , archiveFormatIso9660
                                     , archiveFormatZip
                                     , archiveFormatEmpty
                                     , archiveFormatAr
                                     , archiveFormatMtree
                                     , archiveFormatRaw
                                     , archiveFormatXar
                                     , archiveFormatLha
                                     , archiveFormatCab
                                     , archiveFormatRar
                                     , archiveFormat7zip
                                     , archiveFormatWarc
                                     -- * Read disk flags
                                     , archiveReadDiskRestoreATime
                                     , archiveReadDiskHonorNoDump
                                     , archiveReadDiskMacCopyFile
                                     , archiveReadDiskNoTraverseMounts
                                     , archiveReadDiskNoXattr
                                     -- * Abstract types
                                     , Archive
                                     -- * Haskell types
                                     , ArchiveEncryption (..)
                                     -- * Lower-level API types
                                     , ArchiveError
                                     , Flags
                                     , ArchiveFilter
                                     , ArchiveFormat
                                     , ArchiveCapabilities
                                     , ReadDiskFlags
                                     , TimeFlag
                                     -- * Callback types
                                     , ArchiveReadCallback
                                     , ArchiveSkipCallback
                                     , ArchiveSeekCallback
                                     , ArchiveWriteCallback
                                     , ArchiveOpenCallback
                                     , ArchiveCloseCallback
                                     , ArchiveSwitchCallback
                                     , ArchivePassphraseCallback
                                     -- * Callback constructors
                                     , mkReadCallback
                                     , mkSkipCallback
                                     , mkSeekCallback
                                     , mkWriteCallback
                                     , mkOpenCallback
                                     , mkCloseCallback
                                     , mkSwitchCallback
                                     , mkPassphraseCallback
                                     , mkWriteLookup
                                     , mkReadLookup
                                     , mkCleanup
                                     , mkMatch
                                     , mkFilter
                                     ) where



import Codec.Archive.Foreign.Common
import Control.Composition ((.*), (.**))
import Data.Bits (Bits (..))
import Data.Int (Int64)
import Codec.Archive.Types
import Foreign.C.String
import Foreign.C.Types
import Foreign.Ptr (FunPtr, Ptr)
import System.Posix.Types (Fd (..))

-- Miscellaneous
foreign import ccall archive_version_number :: CInt
foreign import ccall archive_version_string :: CString
foreign import ccall archive_version_details :: CString

-- destructors: use "dynamic" instead of "wrapper" (but we don't want that)
-- callbacks
foreign import ccall "wrapper" mkReadCallback :: ArchiveReadCallback a b -> IO (FunPtr (ArchiveReadCallback a b))
foreign import ccall "wrapper" mkSkipCallback :: ArchiveSkipCallback a -> IO (FunPtr (ArchiveSkipCallback a))
foreign import ccall "wrapper" mkSeekCallback :: ArchiveSeekCallback a -> IO (FunPtr (ArchiveSeekCallback a))
foreign import ccall "wrapper" mkWriteCallback :: ArchiveWriteCallback a b -> IO (FunPtr (ArchiveWriteCallback a b))
foreign import ccall "wrapper" mkOpenCallback :: ArchiveOpenCallback a -> IO (FunPtr (ArchiveOpenCallback a))
foreign import ccall "wrapper" mkCloseCallback :: ArchiveCloseCallback a -> IO (FunPtr (ArchiveCloseCallback a))
foreign import ccall "wrapper" mkSwitchCallback :: ArchiveSwitchCallback a b -> IO (FunPtr (ArchiveSwitchCallback a b))
foreign import ccall "wrapper" mkPassphraseCallback :: ArchivePassphraseCallback a -> IO (FunPtr (ArchivePassphraseCallback a))

foreign import ccall "wrapper" mkWriteLookup :: (Ptr a -> CString -> Int64 -> IO Int64) -> IO (FunPtr (Ptr a -> CString -> Int64 -> IO Int64))
foreign import ccall "wrapper" mkReadLookup :: (Ptr a -> Int64 -> IO CString) -> IO (FunPtr (Ptr a -> Int64 -> IO CString))
foreign import ccall "wrapper" mkCleanup :: (Ptr a -> IO ()) -> IO (FunPtr (Ptr a -> IO ()))

foreign import ccall "wrapper" mkMatch :: (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO ()) -> IO (FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO ()))
foreign import ccall "wrapper" preMkFilter :: (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt) -> IO (FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt))

mkFilter :: (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO Bool) -> IO (FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt))
mkFilter f = let f' = fmap boolToInt .** f in preMkFilter f'

boolToInt :: Integral a => Bool -> a
boolToInt False = 0
boolToInt True = 1

type ArchiveReadCallback a b = Ptr Archive -> Ptr a -> Ptr (Ptr b) -> IO CSize
type ArchiveSkipCallback a = Ptr Archive -> Ptr a -> Int64 -> IO Int64
type ArchiveSeekCallback a = Ptr Archive -> Ptr a -> Int64 -> CInt -> IO Int64
type ArchiveWriteCallback a b = Ptr Archive -> Ptr a -> Ptr b -> CSize -> IO CSize
type ArchiveOpenCallback a = Ptr Archive -> Ptr a -> IO ArchiveError
type ArchiveCloseCallback a = Ptr Archive -> Ptr a -> IO ArchiveError
type ArchiveSwitchCallback a b = Ptr Archive -> Ptr a -> Ptr b -> IO ArchiveError
type ArchivePassphraseCallback a = Ptr Archive -> Ptr a -> IO CString

-- Archive read
foreign import ccall unsafe archive_read_new :: IO (Ptr Archive)
foreign import ccall unsafe archive_read_support_filter_all :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_bzip2 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_compress :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_gzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_grzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_lrzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_lz4 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_lzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_lzma :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_lzop :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_none :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_program :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_program_signature :: Ptr Archive -> CString -> CString -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_rpm :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_uu :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_filter_xz :: Ptr Archive -> IO ArchiveError
-- foreign import ccall unsafe archive_read_support_filter_zstd :: Ptr Archive -> IO ArchiveError

foreign import ccall unsafe archive_read_support_format_7zip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_all :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_ar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_by_code :: Ptr Archive -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_cab :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_cpio :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_empty :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_gnutar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_iso9660 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_lha :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_mtree :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_rar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_raw :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_tar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_warc :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_xar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_zip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_zip_streamable :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_support_format_zip_seekable :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_set_format :: Ptr Archive -> ArchiveFormat -> IO ArchiveError
foreign import ccall unsafe archive_read_append_filter :: Ptr Archive -> ArchiveFilter -> IO ArchiveError
foreign import ccall unsafe archive_read_append_filter_program :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_append_filter_program_signature :: Ptr Archive -> CString -> Ptr a -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_set_open_callback :: Ptr Archive -> FunPtr (ArchiveOpenCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_read_set_read_callback :: Ptr Archive -> FunPtr (ArchiveReadCallback a b) -> IO ArchiveError
foreign import ccall unsafe archive_read_set_seek_callback :: Ptr Archive -> FunPtr (ArchiveSeekCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_read_set_skip_callback :: Ptr Archive -> FunPtr (ArchiveSkipCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_read_set_close_callback :: Ptr Archive -> FunPtr (ArchiveCloseCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_read_set_switch_callback :: Ptr Archive -> FunPtr (ArchiveSwitchCallback a b) -> IO ArchiveError
foreign import ccall unsafe archive_read_set_callback_data :: Ptr Archive -> Ptr a -> IO ArchiveError
foreign import ccall unsafe archive_read_set_callback_data2 :: Ptr Archive -> Ptr a -> CUInt -> IO ArchiveError
foreign import ccall unsafe archive_read_add_callback_data :: Ptr Archive -> Ptr a -> CUInt -> IO ArchiveError
foreign import ccall unsafe archive_read_append_callback_data :: Ptr Archive -> Ptr a -> IO ArchiveError
foreign import ccall unsafe archive_read_prepend_callback_data :: Ptr Archive -> Ptr a -> IO ArchiveError
foreign import ccall unsafe archive_read_open1 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_open :: Ptr Archive -> Ptr a -> FunPtr (ArchiveOpenCallback a) -> FunPtr (ArchiveReadCallback a b) -> FunPtr (ArchiveCloseCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_read_open2 :: Ptr Archive -> Ptr a -> FunPtr (ArchiveOpenCallback a) -> FunPtr (ArchiveReadCallback a b) -> FunPtr (ArchiveSkipCallback a) -> FunPtr (ArchiveCloseCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_read_open_filename :: Ptr Archive -> CString -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_open_filenames :: Ptr Archive -> Ptr CString -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_open_filename_w :: Ptr Archive -> CWString -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_open_memory :: Ptr Archive -> Ptr CChar -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_open_memory2 :: Ptr Archive -> Ptr a -> CSize -> CSize -> IO ArchiveError
foreign import ccall unsafe archive_read_open_fd :: Ptr Archive -> Fd -> CSize -> IO ArchiveError
-- foreign import ccall unsafe archive_read_open_FILE 
foreign import ccall unsafe archive_read_next_header :: Ptr Archive -> Ptr (Ptr ArchiveEntry) -> IO ArchiveError
foreign import ccall unsafe archive_read_next_header2 :: Ptr Archive -> Ptr ArchiveEntry -> IO ArchiveError
foreign import ccall unsafe archive_read_header_position :: Ptr Archive -> IO Int64
foreign import ccall unsafe archive_read_has_encrypted_entries :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_read_format_capabilities :: Ptr Archive -> IO ArchiveCapabilities

foreign import ccall unsafe archive_read_data :: Ptr Archive -> Ptr a -> CSize -> IO CSize
foreign import ccall unsafe archive_seek_data :: Ptr Archive -> Int64 -> CInt -> IO Int64
foreign import ccall unsafe archive_read_data_block :: Ptr Archive -> Ptr (Ptr a) -> Ptr CSize -> Ptr Int64 -> IO ArchiveError
foreign import ccall unsafe archive_read_data_skip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_data_into_fd :: Ptr Archive -> Fd -> IO ArchiveError

foreign import ccall unsafe archive_read_set_format_option :: Ptr Archive -> CString -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_set_filter_option :: Ptr Archive -> CString -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_set_option :: Ptr Archive -> CString -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_set_options :: Ptr Archive -> CString -> IO ArchiveError

foreign import ccall unsafe archive_read_add_passphrase :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_set_passphrase_callback :: Ptr Archive -> Ptr a -> FunPtr (ArchivePassphraseCallback a) -> IO ArchiveError

foreign import ccall unsafe archive_read_extract :: Ptr Archive -> Ptr ArchiveEntry -> Flags -> IO ArchiveError
foreign import ccall unsafe archive_read_extract2 :: Ptr Archive -> Ptr ArchiveEntry -> Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_extract_set_progress_callback :: Ptr Archive -> (FunPtr (Ptr a -> IO ())) -> Ptr a -> IO ()
foreign import ccall unsafe archive_read_extract_set_skip_file :: Ptr Archive -> Int64 -> Int64 -> IO ()

foreign import ccall unsafe archive_read_close :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_free :: Ptr Archive -> IO ArchiveError

-- Archive write
foreign import ccall unsafe archive_write_new :: IO (Ptr Archive)
foreign import ccall unsafe archive_write_set_bytes_per_block :: Ptr Archive -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_write_get_bytes_per_block :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_write_set_bytes_in_last_block :: Ptr Archive -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_write_get_bytes_in_last_block :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_write_set_skip_file :: Ptr Archive -> Int64 -> Int64 -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter :: Ptr Archive -> ArchiveFilter -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_by_name :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_b64encode :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_bzip2 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_compress :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_grzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_gzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_lrzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_lz4 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_lzip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_lzma :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_lzop :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_none :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_program :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_uuencode :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_add_filter_xz :: Ptr Archive -> IO ArchiveError
-- foreign import ccall unsafe archive_write_add_filter_zstd :: Ptr Archive -> IO ArchiveError

foreign import ccall unsafe archive_write_set_format :: Ptr Archive -> ArchiveFormat -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_by_name :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_7zip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_ar_bsd :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_ar_svr4 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_cpio :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_cpio_newc :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_gnutar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_iso9660 :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_mtree :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_mtree_classic :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_pax :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_pax_restricted :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_raw :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_shar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_shar_dump :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_ustar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_v7tar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_warc :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_xar :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_zip :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_filter_by_ext :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_set_format_filter_by_ext_def :: Ptr Archive -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_zip_set_compression_deflate :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_zip_set_compression_store :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_open :: Ptr Archive -> Ptr a -> FunPtr (ArchiveOpenCallback a) -> FunPtr (ArchiveWriteCallback a b) -> FunPtr (ArchiveCloseCallback a) -> IO ArchiveError
foreign import ccall unsafe archive_write_open_fd :: Ptr Archive -> Fd -> IO ArchiveError
foreign import ccall unsafe archive_write_open_filename :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_open_filename_w :: Ptr Archive -> CWString -> IO ArchiveError
-- foreign import ccall unsafe archive_write_open_FILE
foreign import ccall unsafe archive_write_open_memory :: Ptr Archive -> Ptr a -> CSize -> Ptr CSize -> IO ArchiveError

foreign import ccall unsafe archive_write_header :: Ptr Archive -> Ptr ArchiveEntry -> IO ArchiveError
foreign import ccall unsafe archive_write_data :: Ptr Archive -> Ptr a -> CSize -> IO CSize

foreign import ccall unsafe archive_write_data_block :: Ptr Archive -> Ptr a -> CSize -> Int64 -> IO ArchiveError

foreign import ccall unsafe archive_write_finish_entry :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_close :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_fail :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_free :: Ptr Archive -> IO ArchiveError

foreign import ccall unsafe archive_write_set_format_option :: Ptr Archive -> CString -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_set_filter_option :: Ptr Archive -> CString -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_set_option :: Ptr Archive -> CString -> CString -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_set_options :: Ptr Archive -> CString -> IO ArchiveError

foreign import ccall unsafe archive_write_set_passphrase :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_write_set_passphrase_callback :: Ptr Archive -> Ptr a -> FunPtr (ArchivePassphraseCallback a) -> IO ArchiveError

foreign import ccall unsafe archive_write_disk_new :: IO (Ptr Archive)
foreign import ccall unsafe archive_write_disk_set_skip_file :: Ptr Archive -> Int64 -> Int64 -> IO ArchiveError
foreign import ccall unsafe archive_write_disk_set_options :: Ptr Archive -> Flags -> IO ArchiveError

foreign import ccall unsafe archive_write_disk_set_standard_lookup :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_write_disk_set_group_lookup :: Ptr Archive -> Ptr a -> FunPtr (Ptr a -> CString -> Int64 -> IO Int64) -> FunPtr (Ptr a -> IO ()) -> IO ArchiveError
foreign import ccall unsafe archive_write_disk_set_user_lookup :: Ptr Archive -> Ptr a -> FunPtr (Ptr a -> CString -> Int64 -> IO Int64) -> FunPtr (Ptr a -> IO ()) -> IO ArchiveError
foreign import ccall unsafe archive_write_disk_gid :: Ptr Archive -> CString -> Int64 -> IO Int64
foreign import ccall unsafe archive_write_disk_uid :: Ptr Archive -> CString -> Int64 -> IO Int64

foreign import ccall unsafe archive_read_disk_new :: IO (Ptr Archive)
foreign import ccall unsafe archive_read_disk_set_symlink_logical :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_set_symlink_physical :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_set_symlink_hybrid :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_entry_from_file :: Ptr Archive -> Ptr ArchiveEntry -> Fd -> Ptr Stat -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_gname :: Ptr Archive -> Int64 -> IO CString
foreign import ccall unsafe archive_read_disk_uname :: Ptr Archive -> Int64 -> IO CString
foreign import ccall unsafe archive_read_disk_set_standard_lookup :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_set_gname_lookup :: Ptr Archive -> Ptr a -> FunPtr (Ptr a -> Int64 -> IO CString) -> FunPtr (Ptr a -> IO ()) -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_set_uname_lookup :: Ptr Archive -> Ptr a -> FunPtr (Ptr a -> Int64 -> IO CString) -> FunPtr (Ptr a -> IO ()) -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_open :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_open_w :: Ptr Archive -> CWString -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_descend :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_can_descend :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_read_disk_current_filesystem :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_read_disk_current_filesystem_is_synthetic :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_read_disk_current_filesystem_is_remote :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_read_disk_set_atime_restored :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_set_behavior :: Ptr Archive -> ReadDiskFlags -> IO ArchiveError

foreign import ccall unsafe archive_read_disk_set_matching :: Ptr Archive -> Ptr Archive -> FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO ()) -> Ptr a -> IO ArchiveError
foreign import ccall unsafe archive_read_disk_set_metadata_filter_callback :: Ptr Archive -> FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt) -> Ptr a -> IO ArchiveError

foreign import ccall unsafe archive_free :: Ptr Archive -> IO ArchiveError

foreign import ccall unsafe archive_filter_count :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_filter_bytes :: Ptr Archive -> CInt -> Int64
foreign import ccall unsafe archive_filter_code :: Ptr Archive -> CInt -> IO Int
foreign import ccall unsafe archive_filter_name :: Ptr Archive -> CInt -> IO CString

foreign import ccall unsafe archive_errno :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_error_string :: Ptr Archive -> IO CString
foreign import ccall unsafe archive_format_name :: Ptr Archive -> IO CString
foreign import ccall unsafe archive_format :: Ptr Archive -> IO ArchiveFormat
foreign import ccall unsafe archive_clear_error :: Ptr Archive -> IO ()
foreign import ccall unsafe archive_set_error :: Ptr Archive -> CInt -> CString -> IO () -- TODO: variadic lol
foreign import ccall unsafe archive_copy_error :: Ptr Archive -> Ptr Archive -> IO ()
foreign import ccall unsafe archive_file_count :: Ptr Archive -> IO CInt

foreign import ccall unsafe archive_match_new :: Ptr Archive
foreign import ccall unsafe archive_match_free :: Ptr Archive -> IO ArchiveError
foreign import ccall unsafe archive_match_excluded :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_match_path_excluded :: Ptr Archive -> Ptr ArchiveEntry -> IO CInt
foreign import ccall unsafe archive_match_exclude_pattern :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_match_exclude_pattern_w :: Ptr Archive -> CWString -> IO ArchiveError
foreign import ccall unsafe archive_match_exclude_pattern_from_file :: Ptr Archive -> CString -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_match_exclude_pattern_from_file_w :: Ptr Archive -> CWString -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_match_include_pattern :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_pattern_w :: Ptr Archive -> CWString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_pattern_from_file :: Ptr Archive -> CString -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_match_include_pattern_from_file_w :: Ptr Archive -> CString -> CInt -> IO ArchiveError
foreign import ccall unsafe archive_match_path_unmatched_inclusions :: Ptr Archive -> IO CInt
foreign import ccall unsafe archive_match_path_unmatched_inclusions_next :: Ptr Archive -> Ptr CString -> IO ArchiveError
foreign import ccall unsafe archive_match_path_unmatched_inclusions_next_w :: Ptr Archive -> Ptr CWString -> IO ArchiveError
foreign import ccall unsafe archive_match_time_excluded :: Ptr Archive -> Ptr ArchiveEntry -> IO CInt
foreign import ccall unsafe archive_match_include_time :: Ptr Archive -> TimeFlag -> CTime -> CLong -> IO ArchiveError
foreign import ccall unsafe archive_match_include_date :: Ptr Archive -> TimeFlag -> CString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_date_w :: Ptr Archive -> TimeFlag -> CWString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_file_time :: Ptr Archive -> TimeFlag -> CString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_file_time_w :: Ptr Archive -> TimeFlag -> CWString -> IO ArchiveError
foreign import ccall unsafe archive_match_exclude_entry :: Ptr Archive -> TimeFlag -> Ptr ArchiveEntry -> IO ArchiveError
foreign import ccall unsafe archive_match_owner_excluded :: Ptr Archive -> Ptr ArchiveEntry -> IO CInt
foreign import ccall unsafe archive_match_include_gid :: Ptr Archive -> Id -> IO ArchiveError
foreign import ccall unsafe archive_match_include_uid :: Ptr Archive -> Id -> IO ArchiveError
foreign import ccall unsafe archive_match_include_uname :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_uname_w :: Ptr Archive -> CWString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_gname :: Ptr Archive -> CString -> IO ArchiveError
foreign import ccall unsafe archive_match_include_gname_w :: Ptr Archive -> CWString -> IO ArchiveError



archiveVersionNumber :: Int
archiveVersionNumber = 3002002
{-# LINE 639 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveVersionOnlyString :: String
archiveVersionOnlyString = "3.2.2"
{-# LINE 642 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveVersionString :: String
archiveVersionString = "libarchive 3.2.2"
{-# LINE 645 "src/Codec/Archive/Foreign/Archive.chs" #-}


-- TODO: make ArchiveError a sum type
archiveOk :: ArchiveError
archiveOk = ArchiveError 0
{-# LINE 649 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveEOF :: ArchiveError
archiveEOF = ArchiveError 1
{-# LINE 652 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveRetry :: ArchiveError
archiveRetry = ArchiveError (-10)

archiveWarn :: ArchiveError
archiveWarn = ArchiveError (-20)

archiveFailed :: ArchiveError
archiveFailed = ArchiveError (-25)

archiveFatal :: ArchiveError
archiveFatal = ArchiveError (-30)

-- Archive filter
archiveFilterNone :: ArchiveFilter
archiveFilterNone = ArchiveFilter 0
{-# LINE 668 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterGzip :: ArchiveFilter
archiveFilterGzip = ArchiveFilter 1
{-# LINE 671 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterBzip2 :: ArchiveFilter
archiveFilterBzip2 = ArchiveFilter 2
{-# LINE 674 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterCompress :: ArchiveFilter
archiveFilterCompress = ArchiveFilter 3
{-# LINE 677 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterProgram :: ArchiveFilter
archiveFilterProgram = ArchiveFilter 4
{-# LINE 680 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterLzma :: ArchiveFilter
archiveFilterLzma = ArchiveFilter 5
{-# LINE 683 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterXz :: ArchiveFilter
archiveFilterXz = ArchiveFilter 6
{-# LINE 686 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterUu :: ArchiveFilter
archiveFilterUu = ArchiveFilter 7
{-# LINE 689 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterRpm :: ArchiveFilter
archiveFilterRpm = ArchiveFilter 8
{-# LINE 692 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterLzip :: ArchiveFilter
archiveFilterLzip = ArchiveFilter 9
{-# LINE 695 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterLrzip :: ArchiveFilter
archiveFilterLrzip = ArchiveFilter 10
{-# LINE 698 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterLzop :: ArchiveFilter
archiveFilterLzop = ArchiveFilter 11
{-# LINE 701 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterGrzip :: ArchiveFilter
archiveFilterGrzip = ArchiveFilter 12
{-# LINE 704 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFilterLz4 :: ArchiveFilter
archiveFilterLz4 = ArchiveFilter 13
{-# LINE 707 "src/Codec/Archive/Foreign/Archive.chs" #-}


-- Extraction flags
archiveExtractOwner :: Flags
archiveExtractOwner = Flags 0x1
{-# LINE 711 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractPerm :: Flags
archiveExtractPerm = Flags 0x2
{-# LINE 714 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractTime :: Flags
archiveExtractTime = Flags 0x4
{-# LINE 717 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractNoOverwrite :: Flags
archiveExtractNoOverwrite = Flags 0x8
{-# LINE 720 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractUnlink :: Flags
archiveExtractUnlink = Flags 0x10
{-# LINE 723 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractACL :: Flags
archiveExtractACL = Flags 0x20
{-# LINE 726 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractFFlags :: Flags
archiveExtractFFlags = Flags 0x40
{-# LINE 729 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractXattr :: Flags
archiveExtractXattr = Flags 0x80
{-# LINE 732 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractSecureSymlinks :: Flags
archiveExtractSecureSymlinks = Flags 0x100
{-# LINE 735 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractSecureNoDotDot :: Flags
archiveExtractSecureNoDotDot = Flags 0x200
{-# LINE 738 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractNoAutodir :: Flags
archiveExtractNoAutodir = Flags 0x400
{-# LINE 741 "src/Codec/Archive/Foreign/Archive.chs" #-}


-- archiveExtractNoOverwriteNewer :: Flags
-- archiveExtractNoOverwriteNewer = Flags {# const ARCHIVE_NO_OVERWRITE_NEWER #}

archiveExtractSparse :: Flags
archiveExtractSparse = Flags 0x1000
{-# LINE 747 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractMacMetadata :: Flags
archiveExtractMacMetadata = Flags 0x2000
{-# LINE 750 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractNoHfsCompression :: Flags
archiveExtractNoHfsCompression = Flags 0x4000
{-# LINE 753 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractHfsCompressionForced :: Flags
archiveExtractHfsCompressionForced = Flags 0x8000
{-# LINE 756 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractSecureNoAbsolutePaths :: Flags
archiveExtractSecureNoAbsolutePaths = Flags 0x10000
{-# LINE 759 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveExtractClearNoChangeFFlags :: Flags
archiveExtractClearNoChangeFFlags = Flags 0x20000
{-# LINE 762 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatCpio :: ArchiveFormat
archiveFormatCpio = ArchiveFormat 0x10000
{-# LINE 765 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatShar :: ArchiveFormat
archiveFormatShar = ArchiveFormat 0x20000
{-# LINE 768 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatTar :: ArchiveFormat
archiveFormatTar = ArchiveFormat 0x30000
{-# LINE 771 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatIso9660 :: ArchiveFormat
archiveFormatIso9660 = ArchiveFormat 0x40000
{-# LINE 774 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatZip :: ArchiveFormat
archiveFormatZip = ArchiveFormat 0x50000
{-# LINE 777 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatEmpty :: ArchiveFormat
archiveFormatEmpty = ArchiveFormat 0x60000
{-# LINE 780 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatAr :: ArchiveFormat
archiveFormatAr = ArchiveFormat 0x70000
{-# LINE 783 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatMtree :: ArchiveFormat
archiveFormatMtree = ArchiveFormat 0x80000
{-# LINE 786 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatRaw :: ArchiveFormat
archiveFormatRaw = ArchiveFormat 0x90000
{-# LINE 789 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatXar :: ArchiveFormat
archiveFormatXar = ArchiveFormat 0xa0000
{-# LINE 792 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatLha :: ArchiveFormat
archiveFormatLha = ArchiveFormat 0xb0000
{-# LINE 795 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatCab :: ArchiveFormat
archiveFormatCab = ArchiveFormat 0xc0000
{-# LINE 798 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatRar :: ArchiveFormat
archiveFormatRar = ArchiveFormat 0xd0000
{-# LINE 801 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormat7zip :: ArchiveFormat
archiveFormat7zip = ArchiveFormat 0xe0000
{-# LINE 804 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveFormatWarc :: ArchiveFormat
archiveFormatWarc = ArchiveFormat 0xf0000
{-# LINE 807 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveReadHasEncryptedEntries :: Ptr Archive -> IO ArchiveEncryption
archiveReadHasEncryptedEntries = fmap encryptionResult . archive_read_has_encrypted_entries

encryptionResult :: CInt -> ArchiveEncryption
encryptionResult 0                                                        = NoEncryption
encryptionResult 1                                                        = HasEncryption
encryptionResult (-2) = EncryptionUnsupported
encryptionResult (-1)   = EncryptionUnknown
encryptionResult _                                                        = error "Should not happen."

archiveReadFormatCapsNone :: ArchiveCapabilities
archiveReadFormatCapsNone = ArchiveCapabilities 0
{-# LINE 820 "src/Codec/Archive/Foreign/Archive.chs" #-}


(<<) :: Bits a => a -> Int -> a
m << n = m `shift` n

archiveReadFormatCapsEncryptData :: ArchiveCapabilities
archiveReadFormatCapsEncryptData = ArchiveCapabilities (1 << 0)

archiveReadFormatCapsEncryptMetadata :: ArchiveCapabilities
archiveReadFormatCapsEncryptMetadata = ArchiveCapabilities (1 << 0)

archiveReadDiskCanDescend :: Ptr Archive -> IO Bool
archiveReadDiskCanDescend = fmap intToBool . archive_read_disk_can_descend

archiveReadDiskCurrentFilesystemIsSynthetic :: Ptr Archive -> IO Bool
archiveReadDiskCurrentFilesystemIsSynthetic = fmap intToBool . archive_read_disk_current_filesystem_is_synthetic

archiveReadDiskCurrentFilesystemIsRemote :: Ptr Archive -> IO Bool
archiveReadDiskCurrentFilesystemIsRemote = fmap intToBool . archive_read_disk_current_filesystem_is_remote

archiveReadDiskRestoreATime :: ReadDiskFlags
archiveReadDiskRestoreATime = ReadDiskFlags 0x1
{-# LINE 841 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveReadDiskHonorNoDump :: ReadDiskFlags
archiveReadDiskHonorNoDump = ReadDiskFlags 0x2
{-# LINE 844 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveReadDiskMacCopyFile :: ReadDiskFlags
archiveReadDiskMacCopyFile = ReadDiskFlags 0x4
{-# LINE 847 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveReadDiskNoTraverseMounts :: ReadDiskFlags
archiveReadDiskNoTraverseMounts = ReadDiskFlags 0x8
{-# LINE 850 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveReadDiskNoXattr :: ReadDiskFlags
archiveReadDiskNoXattr = ReadDiskFlags 0x10
{-# LINE 853 "src/Codec/Archive/Foreign/Archive.chs" #-}


-- archiveReadDiskNoAcl :: ReadDiskFlags
-- archiveReadDiskNoAcl = ReadDiskFlags {# const ARCHIVE_READDISK_NO_ACL #}

-- archiveReadDiskNoFFlags :: ReadDiskFlags
-- archiveReadDiskNoFFlags = ReadDiskFlags {# const ARCHIVE_READDISK_NO_FFLAGS #}

archiveMatchExcluded :: Ptr Archive -> IO Bool
archiveMatchExcluded = fmap intToBool . archive_match_excluded

archiveMatchPathExcluded :: Ptr Archive -> Ptr ArchiveEntry -> IO Bool
archiveMatchPathExcluded = fmap intToBool .* archive_match_path_excluded

archiveMatchExcludePatternFromFile :: Ptr Archive -> CString -> Bool -> IO ArchiveError
archiveMatchExcludePatternFromFile a str b = archive_match_exclude_pattern_from_file a str (boolToInt b)

archiveMatchExcludePatternFromFileW :: Ptr Archive -> CWString -> Bool -> IO ArchiveError
archiveMatchExcludePatternFromFileW a str b = archive_match_exclude_pattern_from_file_w a str (boolToInt b)

archiveMatchIncludePatternFromFile :: Ptr Archive -> CString -> Bool -> IO ArchiveError
archiveMatchIncludePatternFromFile a str b = archive_match_include_pattern_from_file a str (boolToInt b)

archiveMatchIncludePatternFromFileW :: Ptr Archive -> CString -> Bool -> IO ArchiveError
archiveMatchIncludePatternFromFileW a str b = archive_match_include_pattern_from_file_w a str (boolToInt b)

archiveMatchTimeExcluded :: Ptr Archive -> Ptr ArchiveEntry -> IO Bool
archiveMatchTimeExcluded = fmap intToBool .* archive_match_time_excluded

archiveMatchMTime :: TimeFlag
archiveMatchMTime = TimeFlag 0x100
{-# LINE 883 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveMatchCTime :: TimeFlag
archiveMatchCTime = TimeFlag 0x200
{-# LINE 886 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveMatchNewer :: TimeFlag
archiveMatchNewer = TimeFlag 0x1
{-# LINE 889 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveMatchOlder :: TimeFlag
archiveMatchOlder = TimeFlag 0x2
{-# LINE 892 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveMatchEqual :: TimeFlag
archiveMatchEqual = TimeFlag 0x10
{-# LINE 895 "src/Codec/Archive/Foreign/Archive.chs" #-}


archiveMatchOwnerExcluded :: Ptr Archive -> Ptr ArchiveEntry -> IO Bool
archiveMatchOwnerExcluded = fmap intToBool .* archive_match_owner_excluded