You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
{-# LANGUAGE ForeignFunctionInterface #-}
|
|
|
|
{-|
|
|
Module
|
|
Description : Core Keystone components.
|
|
Copyright : (c) Adrian Herrera, 2016
|
|
License : GPL-2
|
|
|
|
Defines core Keystone components.
|
|
|
|
This module should not be directly imported; it is only exposed because of the
|
|
way cabal handles ordering of chs files.
|
|
-}
|
|
module Keystone.Internal.Core where
|
|
|
|
import Control.Monad
|
|
import Control.Monad.Trans.Either (EitherT)
|
|
import Foreign
|
|
|
|
{# context lib = "keystone" #}
|
|
|
|
#include <keystone/keystone.h>
|
|
#include "keystone_wrapper.h"
|
|
|
|
-- | The Keystone engine.
|
|
{# pointer *ks_engine as Engine
|
|
foreign finalizer ks_close_wrapper as close
|
|
newtype
|
|
#}
|
|
|
|
-- | A pointer to the Keystone engine.
|
|
{# pointer *ks_engine as EnginePtr -> Engine #}
|
|
|
|
-- | Make a new Keystone engine out of an engine pointer. The returned Keystone
|
|
-- engine will automatically call 'ks_close_wrapper' when it goes out of scope.
|
|
mkEngine :: EnginePtr
|
|
-> IO Engine
|
|
mkEngine ptr =
|
|
liftM Engine (newForeignPtr close ptr)
|
|
|
|
-- | Errors encountered by the Keystone API. These values are returned by
|
|
-- 'errno'.
|
|
{# enum ks_err as Error
|
|
{ underscoreToCase }
|
|
with prefix = "KS_"
|
|
deriving (Show, Eq, Bounded)
|
|
#}
|
|
|
|
-- | The assembler runs in the IO monad and allows for the handling of errors
|
|
-- "under the hood".
|
|
type Assembler a = EitherT Error IO a
|