{-# LINE 1 "Magic/Operations.hsc" #-}
module Magic.Operations(
magicFile, magicStdin,
magicString, magicCString,
magicSetFlags, magicCompile)
where
import Foreign.Ptr
import Foreign.C.String
import Magic.Types
import Foreign.C.Types
import Data.Word
import Foreign.C.String
import Foreign.C.Error
import Magic.Utils
import Magic.TypesLL
import Foreign.Marshal.Utils
magicFile :: Magic -> FilePath -> IO String
magicFile :: Magic -> FilePath -> IO FilePath
magicFile Magic
magic FilePath
fp =
Magic -> (Ptr CMagic -> IO FilePath) -> IO FilePath
forall a. Magic -> (Ptr CMagic -> IO a) -> IO a
withMagicPtr Magic
magic (\Ptr CMagic
cmagic ->
FilePath -> (CString -> IO FilePath) -> IO FilePath
forall a. FilePath -> (CString -> IO a) -> IO a
withCString FilePath
fp (\CString
cfp ->
do res <- FilePath -> Magic -> IO CString -> IO CString
forall a. FilePath -> Magic -> IO (Ptr a) -> IO (Ptr a)
throwErrorIfNull FilePath
"magicFile" Magic
magic (Ptr CMagic -> CString -> IO CString
magic_file Ptr CMagic
cmagic CString
cfp)
peekCString res
)
)
magicStdin :: Magic -> IO String
magicStdin :: Magic -> IO FilePath
magicStdin Magic
magic =
Magic -> (Ptr CMagic -> IO FilePath) -> IO FilePath
forall a. Magic -> (Ptr CMagic -> IO a) -> IO a
withMagicPtr Magic
magic (\Ptr CMagic
cmagic ->
do res <- FilePath -> Magic -> IO CString -> IO CString
forall a. FilePath -> Magic -> IO (Ptr a) -> IO (Ptr a)
throwErrorIfNull FilePath
"magicStdin" Magic
magic (Ptr CMagic -> CString -> IO CString
magic_file Ptr CMagic
cmagic CString
forall a. Ptr a
nullPtr)
peekCString res
)
magicString :: Magic -> String -> IO String
magicString :: Magic -> FilePath -> IO FilePath
magicString Magic
m FilePath
s = FilePath -> (CStringLen -> IO FilePath) -> IO FilePath
forall a. FilePath -> (CStringLen -> IO a) -> IO a
withCStringLen FilePath
s (Magic -> CStringLen -> IO FilePath
magicCString Magic
m)
magicCString :: Magic -> CStringLen -> IO String
magicCString :: Magic -> CStringLen -> IO FilePath
magicCString Magic
magic (CString
cstr, Int
len) =
Magic -> (Ptr CMagic -> IO FilePath) -> IO FilePath
forall a. Magic -> (Ptr CMagic -> IO a) -> IO a
withMagicPtr Magic
magic (\Ptr CMagic
cmagic ->
do res <- FilePath -> Magic -> IO CString -> IO CString
forall a. FilePath -> Magic -> IO (Ptr a) -> IO (Ptr a)
throwErrorIfNull FilePath
"magicCString" Magic
magic (Ptr CMagic -> CString -> Word64 -> IO CString
magic_buffer Ptr CMagic
cmagic CString
cstr (Int -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len))
peekCString res
)
magicSetFlags :: Magic -> [MagicFlag] -> IO ()
magicSetFlags :: Magic -> [MagicFlag] -> IO ()
magicSetFlags Magic
m [MagicFlag]
mfl = Magic -> (Ptr CMagic -> IO ()) -> IO ()
forall a. Magic -> (Ptr CMagic -> IO a) -> IO a
withMagicPtr Magic
m (\Ptr CMagic
cmagic ->
FilePath -> Magic -> IO CInt -> IO ()
checkIntError FilePath
"magicSetFlags" Magic
m (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CMagic -> CInt -> IO CInt
magic_setflags Ptr CMagic
cmagic CInt
flags)
where flags :: CInt
flags = [MagicFlag] -> CInt
flaglist2int [MagicFlag]
mfl
magicCompile :: Magic
-> Maybe String
-> IO ()
magicCompile :: Magic -> Maybe FilePath -> IO ()
magicCompile Magic
m Maybe FilePath
mstr = Magic -> (Ptr CMagic -> IO ()) -> IO ()
forall a. Magic -> (Ptr CMagic -> IO a) -> IO a
withMagicPtr Magic
m (\Ptr CMagic
cm ->
case Maybe FilePath
mstr of
Maybe FilePath
Nothing -> Ptr CMagic -> CString -> IO ()
worker Ptr CMagic
cm CString
forall a. Ptr a
nullPtr
Just FilePath
x -> FilePath -> (CString -> IO ()) -> IO ()
forall a. FilePath -> (CString -> IO a) -> IO a
withCString FilePath
x (Ptr CMagic -> CString -> IO ()
worker Ptr CMagic
cm)
)
where worker :: Ptr CMagic -> CString -> IO ()
worker Ptr CMagic
cm CString
cs = FilePath -> Magic -> IO CInt -> IO ()
checkIntError FilePath
"magicCompile" Magic
m (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CMagic -> CString -> IO CInt
magic_compile Ptr CMagic
cm CString
cs
foreign import ccall unsafe "magic.h magic_file"
magic_file :: Ptr CMagic -> CString -> IO CString
foreign import ccall unsafe "magic.h magic_buffer"
magic_buffer :: Ptr CMagic -> CString -> Word64 -> IO CString
{-# LINE 97 "Magic/Operations.hsc" #-}
foreign import ccall unsafe "magic.h magic_setflags"
magic_setflags :: Ptr CMagic -> CInt -> IO CInt
foreign import ccall unsafe "magic.h magic_compile"
magic_compile :: Ptr CMagic -> CString -> IO CInt