{-# LINE 1 "LDAP/Result.hsc" #-}
module LDAP.Result (LDAPMessage, CLDAPMessage,
ldap_1result
) where
import LDAP.Utils
import LDAP.Types
import Foreign
{-# LINE 31 "LDAP/Result.hsc" #-}
import Foreign.C.Types(CInt(..))
{-# LINE 33 "LDAP/Result.hsc" #-}
data CLDAPMessage
type LDAPMessage = ForeignPtr CLDAPMessage
ldap_1result :: LDAP -> LDAPInt -> IO (LDAPMessage)
ldap_1result :: LDAP -> LDAPInt -> IO LDAPMessage
ldap_1result LDAP
ld LDAPInt
msgid =
LDAP -> (LDAPPtr -> IO LDAPMessage) -> IO LDAPMessage
forall a. LDAP -> (LDAPPtr -> IO a) -> IO a
withLDAPPtr LDAP
ld (\LDAPPtr
cld ->
(Ptr (Ptr CLDAPMessage) -> IO LDAPMessage) -> IO LDAPMessage
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca (LDAPPtr -> Ptr (Ptr CLDAPMessage) -> IO LDAPMessage
f LDAPPtr
cld)
)
where f :: LDAPPtr -> Ptr (Ptr CLDAPMessage) -> IO LDAPMessage
f LDAPPtr
cld (Ptr (Ptr CLDAPMessage)
ptr::Ptr (Ptr CLDAPMessage)) =
do String -> LDAP -> IO LDAPInt -> IO LDAPInt
checkLEn1 String
"ldap_1result" LDAP
ld (IO LDAPInt -> IO LDAPInt) -> IO LDAPInt -> IO LDAPInt
forall a b. (a -> b) -> a -> b
$
LDAPPtr
-> LDAPInt
-> LDAPInt
-> Ptr ()
-> Ptr (Ptr CLDAPMessage)
-> IO LDAPInt
ldap_result LDAPPtr
cld LDAPInt
msgid LDAPInt
0 Ptr ()
forall a. Ptr a
nullPtr Ptr (Ptr CLDAPMessage)
ptr
String -> IO (Ptr CLDAPMessage) -> IO LDAPMessage
fromldmptr String
"ldap_1result" (Ptr (Ptr CLDAPMessage) -> IO (Ptr CLDAPMessage)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Ptr CLDAPMessage)
ptr)
fromldmptr :: String -> IO (Ptr CLDAPMessage) -> IO LDAPMessage
fromldmptr :: String -> IO (Ptr CLDAPMessage) -> IO LDAPMessage
fromldmptr String
caller IO (Ptr CLDAPMessage)
action =
do Ptr CLDAPMessage
ptr <- IO (Ptr CLDAPMessage)
action
if Ptr CLDAPMessage
ptr Ptr CLDAPMessage -> Ptr CLDAPMessage -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr CLDAPMessage
forall a. Ptr a
nullPtr
then String -> IO LDAPMessage
forall a. String -> IO a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String
caller String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
": got null LDAPMessage pointer")
else FinalizerPtr CLDAPMessage -> Ptr CLDAPMessage -> IO LDAPMessage
forall a. FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
newForeignPtr FinalizerPtr CLDAPMessage
ldap_msgfree_call Ptr CLDAPMessage
ptr
foreign import ccall safe "ldap.h ldap_result"
ldap_result :: LDAPPtr -> LDAPInt -> LDAPInt -> Ptr () -> Ptr (Ptr CLDAPMessage) -> IO LDAPInt
foreign import ccall unsafe "ldap.h &ldap_msgfree"
ldap_msgfree_call :: FunPtr (Ptr CLDAPMessage -> IO ())