module System.Rados.FFI
where
import Foreign
import Foreign.C.Error
import Foreign.C.String
import Foreign.C.Types
data RadosT
data RadosIOCtxT
data RadosListCtxT
data RadosCompletionT
data RadosWriteOpT
type RadosCallback = Ptr RadosCompletionT -> Ptr () -> IO ()
type RadosCallbackT = FunPtr RadosCallback
newtype LockFlag = LockFlag { unLockFlag :: Word8 }
idempotent :: LockFlag
idempotent = LockFlag 1
data TimeVal = TimeVal
{ seconds :: CLong
, microseconds :: CLong
} deriving (Eq, Show)
instance Num TimeVal where
(+) = undefined
(*) = undefined
() = undefined
abs = undefined
signum = undefined
fromInteger i = let clong = fromIntegral i in TimeVal clong 0
instance Storable TimeVal where
alignment _ = 8
sizeOf _ = (16)
peek p = do
seconds <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
microseconds <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p
return $ TimeVal seconds microseconds
poke p (TimeVal sec usec) = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p sec
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p usec
foreign import ccall safe "librados.h rados_create"
c_rados_create :: Ptr (Ptr RadosT)
-> CString
-> IO CInt
foreign import ccall safe "librados.h rados_shutdown"
c_rados_shutdown :: Ptr RadosT
-> IO ()
foreign import ccall safe "librados.h rados_conf_read_file"
c_rados_conf_read_file :: Ptr RadosT
-> CString
-> IO CInt
foreign import ccall safe "librados.h rados_conf_parse_argv"
c_rados_conf_parse_argv :: Ptr RadosT
-> CInt
-> Ptr CString
-> IO CInt
foreign import ccall safe "librados.h rados_conf_parse_env"
c_rados_conf_parse_env :: Ptr RadosT
-> CString
-> IO CInt
foreign import ccall unsafe "librados.h rados_connect"
c_rados_connect :: Ptr RadosT
-> IO CInt
foreign import ccall safe "librados.h rados_ioctx_create"
c_rados_ioctx_create
:: Ptr RadosT
-> CString
-> Ptr (Ptr RadosIOCtxT)
-> IO CInt
foreign import ccall safe "librados.h rados_ioctx_destroy"
c_rados_ioctx_destroy :: Ptr RadosIOCtxT -> IO ()
foreign import ccall safe "librados.h rados_aio_create_completion"
c_rados_aio_create_completion
:: Ptr ()
-> RadosCallbackT
-> RadosCallbackT
-> Ptr (Ptr RadosCompletionT)
-> IO CInt
foreign import ccall safe "librados.h &rados_aio_release"
c_rados_aio_release :: FunPtr (Ptr RadosCompletionT -> IO ())
foreign import ccall safe "string.h strerror"
c_strerror :: Errno -> IO (Ptr CChar)
foreign import ccall safe "librados.h rados_aio_wait_for_complete"
c_rados_aio_wait_for_complete :: Ptr RadosCompletionT -> IO CInt
foreign import ccall safe "librados.h rados_aio_wait_for_safe"
c_rados_aio_wait_for_safe :: Ptr RadosCompletionT -> IO CInt
foreign import ccall safe "librados.h rados_aio_get_return_value"
c_rados_aio_get_return_value :: Ptr RadosCompletionT -> IO CInt
foreign import ccall safe "librados.h rados_aio_read"
c_rados_aio_read
:: Ptr RadosIOCtxT
-> CString
-> Ptr RadosCompletionT
-> CString
-> CSize
-> Word64
-> IO CInt
foreign import ccall safe "librados.h rados_aio_write"
c_rados_aio_write
:: Ptr RadosIOCtxT
-> CString
-> Ptr RadosCompletionT
-> CString
-> CSize
-> Word64
-> IO CInt
foreign import ccall safe "librados.h rados_aio_write_full"
c_rados_aio_write_full
:: Ptr RadosIOCtxT
-> CString
-> Ptr RadosCompletionT
-> CString
-> CSize
-> IO CInt
foreign import ccall safe "librados.h rados_aio_append"
c_rados_aio_append
:: Ptr RadosIOCtxT
-> CString
-> Ptr RadosCompletionT
-> CString
-> CSize
-> IO CInt
foreign import ccall safe "librados.h rados_aio_stat"
c_rados_aio_stat
:: Ptr RadosIOCtxT
-> CString
-> Ptr RadosCompletionT
-> Ptr Word64
-> Ptr CTime
-> IO CInt
foreign import ccall safe "librados.h rados_aio_remove"
c_rados_aio_remove
:: Ptr RadosIOCtxT
-> CString
-> Ptr RadosCompletionT
-> IO CInt
foreign import ccall safe "librados.h rados_write"
c_rados_write :: Ptr RadosIOCtxT
-> CString
-> CString
-> CSize
-> Word64
-> IO CInt
foreign import ccall safe "librados.h rados_write_full"
c_rados_write_full
:: Ptr RadosIOCtxT
-> CString
-> CString
-> CSize
-> IO CInt
foreign import ccall safe "librados.h rados_append"
c_rados_append
:: Ptr RadosIOCtxT
-> CString
-> CString
-> CSize
-> IO CInt
foreign import ccall safe "librados.h rados_read"
c_rados_read
:: Ptr RadosIOCtxT
-> CString
-> CString
-> CSize
-> Word64
-> IO CInt
foreign import ccall safe "librados.h rados_remove"
c_rados_remove
:: Ptr RadosIOCtxT
-> CString
-> IO CInt
foreign import ccall safe "librados.h rados_stat"
c_rados_stat
:: Ptr RadosIOCtxT
-> CString
-> Ptr Word64
-> Ptr CTime
-> IO CInt
foreign import ccall safe "librados.h rados_lock_exclusive"
c_rados_lock_exclusive
:: Ptr RadosIOCtxT
-> CString
-> CString
-> CString
-> CString
-> Ptr TimeVal
-> LockFlag
-> IO CInt
foreign import ccall safe "librados.h rados_unlock"
c_rados_unlock
:: Ptr RadosIOCtxT
-> CString
-> CString
-> CString
-> IO CInt
foreign import ccall safe "librados.h rados_lock_shared"
c_rados_lock_shared
:: Ptr RadosIOCtxT
-> CString
-> CString
-> CString
-> CString
-> CString
-> Ptr TimeVal
-> LockFlag
-> IO CInt
foreign import ccall safe "librados.h rados_objects_list_open"
c_rados_objects_list_open
:: Ptr RadosIOCtxT
-> Ptr (Ptr RadosListCtxT)
-> IO CInt
foreign import ccall unsafe "librados.h rados_objects_list_close"
c_rados_objects_list_close
:: Ptr RadosListCtxT
-> IO ()
foreign import ccall safe "librados.h rados_objects_list_next"
c_rados_objects_list_next
:: Ptr RadosListCtxT
-> Ptr CString
-> Ptr CString
-> IO CInt
foreign import ccall safe "getProgArgv"
c_getProgArgv
:: Ptr CInt
-> Ptr (Ptr CString)
-> IO ()