From 7c98f6e99621867364357f69f9034a559999b324 Mon Sep 17 00:00:00 2001 From: PHO Date: Tue, 31 Aug 2010 21:38:17 +0900 Subject: [PATCH] Better making function synonyms be macros than handmade synonyms. --- Bindings/APR/Global/Mutex.hsc | 57 +++++---------------------------- Bindings/APR/Portable.hsc | 18 ++--------- bindings-apr.cabal | 3 ++ cbits/helper_apr_global_mutex.c | 11 +++++++ cbits/helper_apr_portable.c | 4 +++ 5 files changed, 28 insertions(+), 65 deletions(-) create mode 100644 cbits/helper_apr_global_mutex.c create mode 100644 cbits/helper_apr_portable.c diff --git a/Bindings/APR/Global/Mutex.hsc b/Bindings/APR/Global/Mutex.hsc index fc19af7..8e2c329 100644 --- a/Bindings/APR/Global/Mutex.hsc +++ b/Bindings/APR/Global/Mutex.hsc @@ -7,54 +7,13 @@ import Bindings.APR.ErrNo import Bindings.APR.Pools import Bindings.APR.Proc.Mutex -#if !APR_PROC_MUTEX_IS_GLOBAL +#opaque_t apr_global_mutex_t -# opaque_t apr_global_mutex_t +#cinline apr_global_mutex_create , Ptr (Ptr ) -> Ptr CChar -> -> Ptr -> IO +#cinline apr_global_mutex_child_init, Ptr (Ptr ) -> Ptr CChar -> Ptr -> IO +#cinline apr_global_mutex_lock , Ptr -> IO +#cinline apr_global_mutex_trylock , Ptr -> IO +#cinline apr_global_mutex_unlock , Ptr -> IO +#cinline apr_global_mutex_destroy , Ptr -> IO -# ccall apr_global_mutex_create , Ptr (Ptr ) -> Ptr CChar -> -> Ptr -> IO -# ccall apr_global_mutex_child_init, Ptr (Ptr ) -> Ptr CChar -> Ptr -> IO -# ccall apr_global_mutex_lock , Ptr -> IO -# ccall apr_global_mutex_trylock , Ptr -> IO -# ccall apr_global_mutex_unlock , Ptr -> IO -# ccall apr_global_mutex_destroy , Ptr -> IO - -# ccall apr_global_mutex_pool_get , Ptr -> IO (Ptr ) - -#else - -# synonym_t apr_global_mutex_t, - -c'apr_global_mutex_create :: Ptr (Ptr C'apr_global_mutex_t) -> Ptr CChar -> C'apr_lockmech_e -> Ptr C'apr_pool_t -> IO C'apr_status_t -c'apr_global_mutex_create = c'apr_proc_mutex_create - -c'apr_global_mutex_child_init :: Ptr (Ptr C'apr_global_mutex_t) -> Ptr CChar -> Ptr C'apr_pool_t -> IO C'apr_status_t -c'apr_global_mutex_child_init = c'apr_proc_mutex_child_init - -c'apr_global_mutex_lock :: Ptr C'apr_global_mutex_t -> IO C'apr_status_t -c'apr_global_mutex_lock = c'apr_proc_mutex_lock - -c'apr_global_mutex_trylock :: Ptr C'apr_global_mutex_t -> IO C'apr_status_t -c'apr_global_mutex_trylock = c'apr_proc_mutex_trylock - -c'apr_global_mutex_unlock :: Ptr C'apr_global_mutex_t -> IO C'apr_status_t -c'apr_global_mutex_unlock = c'apr_proc_mutex_unlock - -c'apr_global_mutex_destroy :: Ptr C'apr_global_mutex_t -> IO C'apr_status_t -c'apr_global_mutex_destroy = c'apr_proc_mutex_destroy - -c'apr_global_mutex_cleanup :: Ptr () -> IO C'apr_status_t -c'apr_global_mutex_cleanup = c'apr_proc_mutex_cleanup - -c'apr_global_mutex_lockfile :: Ptr C'apr_global_mutex_t -> IO (Ptr CChar) -c'apr_global_mutex_lockfile = c'apr_proc_mutex_lockfile - -c'apr_global_mutex_name :: Ptr C'apr_global_mutex_t -> IO (Ptr CChar) -c'apr_global_mutex_name = c'apr_proc_mutex_name - -c'apr_global_mutex_defname :: IO (Ptr CChar) -c'apr_global_mutex_defname = c'apr_proc_mutex_defname - -c'apr_global_mutex_pool_get :: Ptr C'apr_global_mutex_t -> IO (Ptr C'apr_pool_t) -c'apr_global_mutex_pool_get = c'apr_proc_mutex_pool_get - -#endif +#cinline apr_global_mutex_pool_get , Ptr -> IO (Ptr ) diff --git a/Bindings/APR/Portable.hsc b/Bindings/APR/Portable.hsc index 498b17d..66288f5 100644 --- a/Bindings/APR/Portable.hsc +++ b/Bindings/APR/Portable.hsc @@ -39,22 +39,8 @@ import Bindings.APR.Time # field protocol, CInt #stoptype -#if APR_PROC_MUTEX_IS_GLOBAL -type C'apr_os_global_mutex_t = C'apr_os_proc_mutex_t - -c'apr_os_global_mutex_get :: Ptr C'apr_os_global_mutex_t -> Ptr C'apr_global_mutex_t -> IO C'apr_status_t -c'apr_os_global_mutex_get = c'apr_os_proc_mutex_get -#else -# starttype struct apr_os_global_mutex_t -# field pool , Ptr -# field proc_mutex, Ptr -# if APR_HAS_THREADS -# field thread_mutex, Ptr -# endif -# stoptype - -# ccall apr_os_global_mutex_get, Ptr -> Ptr -> IO -#endif +#opaque_t apr_os_global_mutex_t +#cinline apr_os_global_mutex_get, Ptr -> Ptr -> IO #ccall apr_os_file_get , Ptr -> Ptr -> IO #ccall apr_os_dir_get , Ptr (Ptr ) -> Ptr -> IO diff --git a/bindings-apr.cabal b/bindings-apr.cabal index 2cf60a9..4da632a 100644 --- a/bindings-apr.cabal +++ b/bindings-apr.cabal @@ -14,6 +14,7 @@ Tested-With: GHC == 6.12.3 Cabal-Version: >= 1.6 Build-Type: Simple Extra-Source-Files: + COPYING Source-Repository head Type: git @@ -65,9 +66,11 @@ Library C-Sources: cbits/helper_apr_errno.c cbits/helper_apr_general.c + cbits/helper_apr_global_mutex.c cbits/helper_apr_pools.c cbits/helper_apr_lib.c cbits/helper_apr_mmap.c + cbits/helper_apr_portable.c cbits/helper_apr_signal.c cbits/helper_apr_time.c cbits/helper_apr_thread_proc.c diff --git a/cbits/helper_apr_global_mutex.c b/cbits/helper_apr_global_mutex.c new file mode 100644 index 0000000..833b330 --- /dev/null +++ b/cbits/helper_apr_global_mutex.c @@ -0,0 +1,11 @@ +#include +#include + +BC_INLINE4(apr_global_mutex_create , apr_global_mutex_t**, const char*, apr_lockmech_e, apr_pool_t*, apr_status_t) +BC_INLINE3(apr_global_mutex_child_init, apr_global_mutex_t**, const char*, apr_pool_t*, apr_status_t) +BC_INLINE1(apr_global_mutex_lock , apr_global_mutex_t*, apr_status_t) +BC_INLINE1(apr_global_mutex_trylock , apr_global_mutex_t*, apr_status_t) +BC_INLINE1(apr_global_mutex_unlock , apr_global_mutex_t*, apr_status_t) +BC_INLINE1(apr_global_mutex_destroy , apr_global_mutex_t*, apr_status_t) + +BC_INLINE1(apr_global_mutex_pool_get , apr_global_mutex_t*, apr_pool_t*) diff --git a/cbits/helper_apr_portable.c b/cbits/helper_apr_portable.c new file mode 100644 index 0000000..09c282a --- /dev/null +++ b/cbits/helper_apr_portable.c @@ -0,0 +1,4 @@ +#include +#include + +BC_INLINE2(apr_os_global_mutex_get, apr_os_global_mutex_t*, apr_global_mutex_t*, apr_status_t) -- 2.40.0