libmagic-1.3.1: Magic/Init.hsc
{- -*- Mode: haskell; -*-
Haskell magic Interface
Copyright (C) 2005 John Goerzen <jgoerzen@complete.org>
This code is under a 3-clause BSD license; see COPYING for details.
-}
{- |
Module : Magic.Init
Copyright : Copyright (C) 2005 John Goerzen
License : BSD
Maintainer : Joey Hess,
Maintainer : id\@joeyh.name
Stability : provisional
Portability: portable
Initialization for magic programs
Written by John Goerzen, jgoerzen\@complete.org
-}
{-# LANGUAGE QuasiQuotes #-}
module Magic.Init(magicOpen, magicLoad, magicLoadDefault)
where
import Foreign.Ptr
import Foreign.C.String
import Magic.Types
import Foreign.C.Types
import Magic.Utils
import Magic.TypesLL
import qualified Data.List.NonEmpty as NE
import System.OsString
import System.OsPath.Types
import qualified Data.ByteString.Short as SBS
{- | Create a Magic object. You must call either 'magicLoadDefault'
or 'magicLoad' after this.
-}
magicOpen :: [MagicFlag] -> IO Magic
magicOpen mfl =
fromMagicPtr "magicOpen" (magic_open flags)
where flags = flaglist2int mfl
{- | Load the system's default magic database. -}
magicLoadDefault :: Magic -> IO ()
magicLoadDefault m = withMagicPtr m $ \cmagic ->
checkIntError "magicLoadDefault" cmagic $ magic_load cmagic nullPtr
{- | Load the specified magic databases. -}
magicLoad :: Magic -> NE.NonEmpty OsPath -> IO ()
magicLoad m l = withMagicPtr m $ \cmagic -> do
sbs <- decodeOsPath s
SBS.useAsCString sbs $ \cs ->
checkIntError "magicLoad" cmagic $ magic_load cmagic cs
where
s = intercalate [osstr|:|] (NE.toList l)
foreign import ccall unsafe "magic.h magic_open"
magic_open :: CInt -> IO (Ptr CMagic)
foreign import ccall safe "magic.h magic_load"
magic_load :: Ptr CMagic -> CString -> IO CInt