module Network.CURL000.LibCC
( curlADRTAB
, curlSYMTAB
, curlTABLEN
, curl_easy_cleanup
, curl_easy_duphandle
, curl_easy_escape
, curl_easy_getinfo
, curl_easy_init
, curl_easy_pause
, curl_easy_perform
, curl_easy_recv
, curl_easy_reset
, curl_easy_send
, curl_easy_setopt'Long
, curl_easy_setopt'COff
, curl_easy_setopt'DPtr
, curl_easy_setopt'FPtr
, curl_easy_strerror
, curl_easy_unescape
, curl_formadd
, curl_formfree
, curl_formget
, curl_free
, curl_getdate
, curl_global_cleanup
, curl_global_init
, curl_global_init_mem
, curl_multi_add_handle
, curl_multi_assign
, curl_multi_cleanup
, curl_multi_fdset
, curl_multi_info_read
, curl_multi_init
, curl_multi_perform
, curl_multi_remove_handle
, curl_multi_setopt
, curl_multi_socket
, curl_multi_socket_action
, curl_multi_socket_all
, curl_multi_strerror
, curl_multi_timeout
, curl_multi_wait
, curl_share_cleanup
, curl_share_init
, curl_share_setopt'Long
, curl_share_setopt'FPtr
, curl_share_strerror
, curl_slist_append
, curl_slist_free_all
, curl_version
, curl_version_info
, CURL_write_callback , wrapCURL_write_callback
, CURL_read_callback , wrapCURL_read_callback
, CURL_header_callback, wrapCURL_header_callback
, CURL_lock_function , wrapCURL_lock_function
, CURL_unlock_function, wrapCURL_unlock_function
, CURL, CURLM, CURLSH
, CURLslist (..)
, CURLcerts (..)
, CURL_off_t
) where
import Foreign.Storable
import Foreign.C.String
import Foreign.C.Types
import Foreign.Ptr
import Control.Applicative
import Control.Monad
import System.IO.Unsafe (unsafePerformIO)
import System.RTLD
import Prelude
foreign import ccall "&curlADRTAB" curlADRTAB :: Ptr (FunPtr ())
foreign import ccall "&curlSYMTAB" curlSYMTAB :: Ptr SYMTABENTRY
curlTABLEN :: Int
curlTABLEN = 59
peekFP :: Int -> IO (FunPtr a)
peekFP fid = do
fp <- peekElemOff curlADRTAB fid
when (fp==nullFunPtr) (nullFP fid)
return (castFunPtr fp)
nullFP :: Int -> IO ()
nullFP fid =
let name = unsafePerformIO $
peekElemOff curlSYMTAB fid >>= \(RTSYM (_,_,cs)) -> peekCString cs
in error $ concat ["<curlhs> failed to call '", name, "' (NULL)"]
data CURL
data CURLM
data CURLSH
data CURLhttppost
data CURLvinfo
data CURLwaitfd
data CURLmsg
type CURLcode = CInt
type CURLMcode = CInt
type CURLSHcode = CInt
type CURLoption = CInt
type CURLMoption = CInt
type CURLSHopt = CInt
type CURL_lock_data = CInt
type CURL_lock_access = CInt
type CURLinfo = CInt
type CURLversion = CInt
type CURLformcode = CInt
type CURLformoption = CInt
type CURLsocket = CInt
type CURL_off_t = CLLong
type CURL_formget_callback = IO ()
type CURL_malloc_callback = IO ()
type CURL_free_callback = IO ()
type CURL_realloc_callback = IO ()
type CURL_calloc_callback = IO ()
type CURL_strdup_callback = IO ()
data CURLslist = CURLslist (Ptr CChar) (Ptr CURLslist)
instance Storable CURLslist where
sizeOf _ = (16)
alignment _ = (8)
poke _ _ = undefined
peek ptr = CURLslist
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
data CURLcerts = CURLcerts CInt (Ptr (Ptr CURLslist))
instance Storable CURLcerts where
sizeOf _ = (16)
alignment _ = (8)
poke _ _ = undefined
peek ptr = CURLcerts
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
curl_easy_cleanup :: Ptr CURL -> IO ()
curl_easy_cleanup a = peekFP (0) >>= \fp -> curl_easy_cleanupFC fp a
type FTcurl_easy_cleanup = Ptr CURL -> IO ()
foreign import ccall safe "dynamic"
curl_easy_cleanupFC :: FunPtr FTcurl_easy_cleanup -> FTcurl_easy_cleanup
curl_easy_duphandle :: Ptr CURL -> IO (Ptr CURL)
curl_easy_duphandle a = peekFP (1) >>= \fp -> curl_easy_duphandleFC fp a
type FTcurl_easy_duphandle = Ptr CURL -> IO (Ptr CURL)
foreign import ccall safe "dynamic"
curl_easy_duphandleFC :: FunPtr FTcurl_easy_duphandle -> FTcurl_easy_duphandle
curl_easy_escape :: Ptr CURL -> Ptr CChar -> CInt -> IO (Ptr CChar)
curl_easy_escape a b c = peekFP (2) >>= \fp -> curl_easy_escapeFC fp a b c
type FTcurl_easy_escape = Ptr CURL -> Ptr CChar -> CInt -> IO (Ptr CChar)
foreign import ccall safe "dynamic"
curl_easy_escapeFC :: FunPtr FTcurl_easy_escape -> FTcurl_easy_escape
curl_easy_init :: IO (Ptr CURL)
curl_easy_init = peekFP (4) >>= \fp -> curl_easy_initFC fp
type FTcurl_easy_init = IO (Ptr CURL)
foreign import ccall safe "dynamic"
curl_easy_initFC :: FunPtr FTcurl_easy_init -> FTcurl_easy_init
curl_easy_pause :: Ptr CURL -> CInt -> IO CURLcode
curl_easy_pause a b = peekFP (5) >>= \fp -> curl_easy_pauseFC fp a b
type FTcurl_easy_pause = Ptr CURL -> CInt -> IO CURLcode
foreign import ccall safe "dynamic"
curl_easy_pauseFC :: FunPtr FTcurl_easy_pause -> FTcurl_easy_pause
curl_easy_perform :: Ptr CURL -> IO CURLcode
curl_easy_perform a = peekFP (6) >>= \fp -> curl_easy_performFC fp a
type FTcurl_easy_perform = Ptr CURL -> IO CURLcode
foreign import ccall safe "dynamic"
curl_easy_performFC :: FunPtr FTcurl_easy_perform -> FTcurl_easy_perform
curl_easy_recv :: Ptr CURL -> Ptr () -> CSize -> Ptr CSize -> IO CURLcode
curl_easy_recv a b c d = peekFP (7) >>= \fp -> curl_easy_recvFC fp a b c d
type FTcurl_easy_recv = Ptr CURL -> Ptr () -> CSize -> Ptr CSize -> IO CURLcode
foreign import ccall safe "dynamic"
curl_easy_recvFC :: FunPtr FTcurl_easy_recv -> FTcurl_easy_recv
curl_easy_reset :: Ptr CURL -> IO ()
curl_easy_reset a = peekFP (8) >>= \fp -> curl_easy_resetFC fp a
type FTcurl_easy_reset = Ptr CURL -> IO ()
foreign import ccall safe "dynamic"
curl_easy_resetFC :: FunPtr FTcurl_easy_reset -> FTcurl_easy_reset
curl_easy_send :: Ptr CURL -> Ptr () -> CSize -> Ptr CSize -> IO CURLcode
curl_easy_send a b c d = peekFP (9) >>= \fp -> curl_easy_sendFC fp a b c d
type FTcurl_easy_send = Ptr CURL -> Ptr () -> CSize -> Ptr CSize -> IO CURLcode
foreign import ccall safe "dynamic"
curl_easy_sendFC :: FunPtr FTcurl_easy_send -> FTcurl_easy_send
curl_easy_strerror :: CURLcode -> IO (Ptr CChar)
curl_easy_strerror a = peekFP (11) >>= \fp -> curl_easy_strerrorFC fp a
type FTcurl_easy_strerror = CURLcode -> IO (Ptr CChar)
foreign import ccall safe "dynamic"
curl_easy_strerrorFC :: FunPtr FTcurl_easy_strerror -> FTcurl_easy_strerror
curl_easy_unescape :: Ptr CURL -> Ptr CChar -> CInt -> Ptr CInt -> IO (Ptr CChar)
curl_easy_unescape a b c d = peekFP (12) >>= \fp -> curl_easy_unescapeFC fp a b c d
type FTcurl_easy_unescape = Ptr CURL -> Ptr CChar -> CInt -> Ptr CInt -> IO (Ptr CChar)
foreign import ccall safe "dynamic"
curl_easy_unescapeFC :: FunPtr FTcurl_easy_unescape -> FTcurl_easy_unescape
curl_formadd :: Ptr (Ptr CURLhttppost) -> Ptr (Ptr CURLhttppost) -> CURLformoption -> Ptr () -> IO CURLformcode
curl_formadd a b c d = peekFP (14) >>= \fp -> curl_formaddFC fp a b c d
type FTcurl_formadd = Ptr (Ptr CURLhttppost) -> Ptr (Ptr CURLhttppost) -> CURLformoption -> Ptr () -> IO CURLformcode
foreign import ccall safe "dynamic"
curl_formaddFC :: FunPtr FTcurl_formadd -> FTcurl_formadd
curl_formfree :: Ptr CURLhttppost -> IO ()
curl_formfree a = peekFP (15) >>= \fp -> curl_formfreeFC fp a
type FTcurl_formfree = Ptr CURLhttppost -> IO ()
foreign import ccall safe "dynamic"
curl_formfreeFC :: FunPtr FTcurl_formfree -> FTcurl_formfree
curl_formget :: Ptr CURLhttppost -> Ptr () -> FunPtr CURL_formget_callback -> IO CInt
curl_formget a b c = peekFP (16) >>= \fp -> curl_formgetFC fp a b c
type FTcurl_formget = Ptr CURLhttppost -> Ptr () -> FunPtr CURL_formget_callback -> IO CInt
foreign import ccall safe "dynamic"
curl_formgetFC :: FunPtr FTcurl_formget -> FTcurl_formget
curl_free :: Ptr () -> IO ()
curl_free a = peekFP (17) >>= \fp -> curl_freeFC fp a
type FTcurl_free = Ptr () -> IO ()
foreign import ccall safe "dynamic"
curl_freeFC :: FunPtr FTcurl_free -> FTcurl_free
curl_getdate :: Ptr CChar -> Ptr CTime -> IO CTime
curl_getdate a b = peekFP (18) >>= \fp -> curl_getdateFC fp a b
type FTcurl_getdate = Ptr CChar -> Ptr CTime -> IO CTime
foreign import ccall safe "dynamic"
curl_getdateFC :: FunPtr FTcurl_getdate -> FTcurl_getdate
curl_global_cleanup :: IO ()
curl_global_cleanup = peekFP (20) >>= \fp -> curl_global_cleanupFC fp
type FTcurl_global_cleanup = IO ()
foreign import ccall safe "dynamic"
curl_global_cleanupFC :: FunPtr FTcurl_global_cleanup -> FTcurl_global_cleanup
curl_global_init :: CLong -> IO CURLcode
curl_global_init a = peekFP (21) >>= \fp -> curl_global_initFC fp a
type FTcurl_global_init = CLong -> IO CURLcode
foreign import ccall safe "dynamic"
curl_global_initFC :: FunPtr FTcurl_global_init -> FTcurl_global_init
curl_global_init_mem :: CLong -> FunPtr CURL_malloc_callback -> FunPtr CURL_free_callback -> FunPtr CURL_realloc_callback -> FunPtr CURL_strdup_callback -> FunPtr CURL_calloc_callback -> IO CURLcode
curl_global_init_mem a b c d e f = peekFP (22) >>= \fp -> curl_global_init_memFC fp a b c d e f
type FTcurl_global_init_mem = CLong -> FunPtr CURL_malloc_callback -> FunPtr CURL_free_callback -> FunPtr CURL_realloc_callback -> FunPtr CURL_strdup_callback -> FunPtr CURL_calloc_callback -> IO CURLcode
foreign import ccall safe "dynamic"
curl_global_init_memFC :: FunPtr FTcurl_global_init_mem -> FTcurl_global_init_mem
curl_multi_add_handle :: Ptr CURLM -> Ptr CURL -> IO CURLMcode
curl_multi_add_handle a b = peekFP (28) >>= \fp -> curl_multi_add_handleFC fp a b
type FTcurl_multi_add_handle = Ptr CURLM -> Ptr CURL -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_add_handleFC :: FunPtr FTcurl_multi_add_handle -> FTcurl_multi_add_handle
curl_multi_assign :: Ptr CURLM -> CURLsocket -> Ptr () -> IO CURLMcode
curl_multi_assign a b c = peekFP (29) >>= \fp -> curl_multi_assignFC fp a b c
type FTcurl_multi_assign = Ptr CURLM -> CURLsocket -> Ptr () -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_assignFC :: FunPtr FTcurl_multi_assign -> FTcurl_multi_assign
curl_multi_cleanup :: Ptr CURLM -> IO CURLMcode
curl_multi_cleanup a = peekFP (30) >>= \fp -> curl_multi_cleanupFC fp a
type FTcurl_multi_cleanup = Ptr CURLM -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_cleanupFC :: FunPtr FTcurl_multi_cleanup -> FTcurl_multi_cleanup
curl_multi_fdset :: Ptr CURLM -> Ptr () -> Ptr () -> Ptr () -> Ptr CInt -> IO CURLMcode
curl_multi_fdset a b c d e = peekFP (31) >>= \fp -> curl_multi_fdsetFC fp a b c d e
type FTcurl_multi_fdset = Ptr CURLM -> Ptr () -> Ptr () -> Ptr () -> Ptr CInt -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_fdsetFC :: FunPtr FTcurl_multi_fdset -> FTcurl_multi_fdset
curl_multi_info_read :: Ptr CURLM -> Ptr CInt -> IO (Ptr CURLmsg)
curl_multi_info_read a b = peekFP (32) >>= \fp -> curl_multi_info_readFC fp a b
type FTcurl_multi_info_read = Ptr CURLM -> Ptr CInt -> IO (Ptr CURLmsg)
foreign import ccall safe "dynamic"
curl_multi_info_readFC :: FunPtr FTcurl_multi_info_read -> FTcurl_multi_info_read
curl_multi_init :: IO (Ptr CURLM)
curl_multi_init = peekFP (33) >>= \fp -> curl_multi_initFC fp
type FTcurl_multi_init = IO (Ptr CURLM)
foreign import ccall safe "dynamic"
curl_multi_initFC :: FunPtr FTcurl_multi_init -> FTcurl_multi_init
curl_multi_perform :: Ptr CURLM -> Ptr CInt -> IO CURLMcode
curl_multi_perform a b = peekFP (34) >>= \fp -> curl_multi_performFC fp a b
type FTcurl_multi_perform = Ptr CURLM -> Ptr CInt -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_performFC :: FunPtr FTcurl_multi_perform -> FTcurl_multi_perform
curl_multi_remove_handle :: Ptr CURLM -> Ptr CURL -> IO CURLMcode
curl_multi_remove_handle a b = peekFP (35) >>= \fp -> curl_multi_remove_handleFC fp a b
type FTcurl_multi_remove_handle = Ptr CURLM -> Ptr CURL -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_remove_handleFC :: FunPtr FTcurl_multi_remove_handle -> FTcurl_multi_remove_handle
curl_multi_setopt :: Ptr CURLM -> CURLMoption -> Ptr () -> IO CURLMcode
curl_multi_setopt a b c = peekFP (36) >>= \fp -> curl_multi_setoptFC fp a b c
type FTcurl_multi_setopt = Ptr CURLM -> CURLMoption -> Ptr () -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_setoptFC :: FunPtr FTcurl_multi_setopt -> FTcurl_multi_setopt
curl_multi_socket :: Ptr CURLM -> CURLsocket -> Ptr CInt -> IO CURLMcode
curl_multi_socket a b c = peekFP (37) >>= \fp -> curl_multi_socketFC fp a b c
type FTcurl_multi_socket = Ptr CURLM -> CURLsocket -> Ptr CInt -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_socketFC :: FunPtr FTcurl_multi_socket -> FTcurl_multi_socket
curl_multi_socket_action :: Ptr CURLM -> CURLsocket -> CInt -> Ptr CInt -> IO CURLMcode
curl_multi_socket_action a b c d = peekFP (38) >>= \fp -> curl_multi_socket_actionFC fp a b c d
type FTcurl_multi_socket_action = Ptr CURLM -> CURLsocket -> CInt -> Ptr CInt -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_socket_actionFC :: FunPtr FTcurl_multi_socket_action -> FTcurl_multi_socket_action
curl_multi_socket_all :: Ptr CURLM -> Ptr CInt -> IO CURLMcode
curl_multi_socket_all a b = peekFP (39) >>= \fp -> curl_multi_socket_allFC fp a b
type FTcurl_multi_socket_all = Ptr CURLM -> Ptr CInt -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_socket_allFC :: FunPtr FTcurl_multi_socket_all -> FTcurl_multi_socket_all
curl_multi_strerror :: CURLMcode -> IO (Ptr CChar)
curl_multi_strerror a = peekFP (40) >>= \fp -> curl_multi_strerrorFC fp a
type FTcurl_multi_strerror = CURLMcode -> IO (Ptr CChar)
foreign import ccall safe "dynamic"
curl_multi_strerrorFC :: FunPtr FTcurl_multi_strerror -> FTcurl_multi_strerror
curl_multi_timeout :: Ptr CURLM -> Ptr CLong -> IO CURLMcode
curl_multi_timeout a b = peekFP (41) >>= \fp -> curl_multi_timeoutFC fp a b
type FTcurl_multi_timeout = Ptr CURLM -> Ptr CLong -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_timeoutFC :: FunPtr FTcurl_multi_timeout -> FTcurl_multi_timeout
curl_multi_wait :: Ptr CURLM -> Ptr CURLwaitfd -> CUInt -> CInt -> Ptr CInt -> IO CURLMcode
curl_multi_wait a b c d e = peekFP (42) >>= \fp -> curl_multi_waitFC fp a b c d e
type FTcurl_multi_wait = Ptr CURLM -> Ptr CURLwaitfd -> CUInt -> CInt -> Ptr CInt -> IO CURLMcode
foreign import ccall safe "dynamic"
curl_multi_waitFC :: FunPtr FTcurl_multi_wait -> FTcurl_multi_wait
curl_share_cleanup :: Ptr CURLSH -> IO CURLSHcode
curl_share_cleanup a = peekFP (48) >>= \fp -> curl_share_cleanupFC fp a
type FTcurl_share_cleanup = Ptr CURLSH -> IO CURLSHcode
foreign import ccall safe "dynamic"
curl_share_cleanupFC :: FunPtr FTcurl_share_cleanup -> FTcurl_share_cleanup
curl_share_init :: IO (Ptr CURLSH)
curl_share_init = peekFP (49) >>= \fp -> curl_share_initFC fp
type FTcurl_share_init = IO (Ptr CURLSH)
foreign import ccall safe "dynamic"
curl_share_initFC :: FunPtr FTcurl_share_init -> FTcurl_share_init
curl_share_strerror :: CURLSHcode -> IO (Ptr CChar)
curl_share_strerror a = peekFP (51) >>= \fp -> curl_share_strerrorFC fp a
type FTcurl_share_strerror = CURLSHcode -> IO (Ptr CChar)
foreign import ccall safe "dynamic"
curl_share_strerrorFC :: FunPtr FTcurl_share_strerror -> FTcurl_share_strerror
curl_slist_append :: Ptr CURLslist -> Ptr CChar -> IO (Ptr CURLslist)
curl_slist_append a b = peekFP (52) >>= \fp -> curl_slist_appendFC fp a b
type FTcurl_slist_append = Ptr CURLslist -> Ptr CChar -> IO (Ptr CURLslist)
foreign import ccall safe "dynamic"
curl_slist_appendFC :: FunPtr FTcurl_slist_append -> FTcurl_slist_append
curl_slist_free_all :: Ptr CURLslist -> IO ()
curl_slist_free_all a = peekFP (53) >>= \fp -> curl_slist_free_allFC fp a
type FTcurl_slist_free_all = Ptr CURLslist -> IO ()
foreign import ccall safe "dynamic"
curl_slist_free_allFC :: FunPtr FTcurl_slist_free_all -> FTcurl_slist_free_all
curl_version :: IO (Ptr CChar)
curl_version = peekFP (57) >>= \fp -> curl_versionFC fp
type FTcurl_version = IO (Ptr CChar)
foreign import ccall safe "dynamic"
curl_versionFC :: FunPtr FTcurl_version -> FTcurl_version
curl_version_info :: CURLversion -> IO (Ptr CURLvinfo)
curl_version_info a = peekFP (58) >>= \fp -> curl_version_infoFC fp a
type FTcurl_version_info = CURLversion -> IO (Ptr CURLvinfo)
foreign import ccall safe "dynamic"
curl_version_infoFC :: FunPtr FTcurl_version_info -> FTcurl_version_info
type CURL_write_callback = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize
foreign import ccall "wrapper"
wrapCURL_write_callback :: CURL_write_callback -> IO (FunPtr CURL_write_callback)
type CURL_read_callback = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize
foreign import ccall "wrapper"
wrapCURL_read_callback :: CURL_read_callback -> IO (FunPtr CURL_read_callback)
type CURL_header_callback = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize
foreign import ccall "wrapper"
wrapCURL_header_callback :: CURL_header_callback -> IO (FunPtr CURL_header_callback)
type CURL_lock_function = Ptr CURL -> CURL_lock_data -> CURL_lock_access -> Ptr () -> IO ()
foreign import ccall "wrapper"
wrapCURL_lock_function :: CURL_lock_function -> IO (FunPtr CURL_lock_function)
type CURL_unlock_function = Ptr CURL -> CURL_lock_data -> Ptr () -> IO ()
foreign import ccall "wrapper"
wrapCURL_unlock_function :: CURL_unlock_function -> IO (FunPtr CURL_unlock_function)
curl_easy_getinfo :: Ptr CURL -> CURLinfo -> Ptr () -> IO CURLcode
curl_easy_getinfo a b c =
peekFP (3) >>= \fp -> curlOptDPtr fp (castPtr a) b c
curl_easy_setopt'Long :: Ptr CURL -> CURLoption -> CLong -> IO CURLcode
curl_easy_setopt'Long a b c =
peekFP (10) >>= \fp -> curlOptLong fp (castPtr a) b c
curl_easy_setopt'COff :: Ptr CURL -> CURLoption -> CURL_off_t -> IO CURLcode
curl_easy_setopt'COff a b c =
peekFP (10) >>= \fp -> curlOptCOff fp (castPtr a) b c
curl_easy_setopt'DPtr :: Ptr CURL -> CURLoption -> Ptr () -> IO CURLcode
curl_easy_setopt'DPtr a b c =
peekFP (10) >>= \fp -> curlOptDPtr fp (castPtr a) b c
curl_easy_setopt'FPtr :: Ptr CURL -> CURLoption -> FunPtr () -> IO CURLcode
curl_easy_setopt'FPtr a b c =
peekFP (10) >>= \fp -> curlOptFPtr fp (castPtr a) b c
curl_share_setopt'Long :: Ptr CURLSH -> CURLSHopt -> CLong -> IO CURLSHcode
curl_share_setopt'Long a b c =
peekFP (50) >>= \fp -> curlOptLong fp (castPtr a) b c
curl_share_setopt'FPtr :: Ptr CURLSH -> CURLSHopt -> FunPtr () -> IO CURLSHcode
curl_share_setopt'FPtr a b c =
peekFP (50) >>= \fp -> curlOptFPtr fp (castPtr a) b c
foreign import ccall safe curlOptLong
:: FunPtr () -> Ptr () -> CInt -> CLong -> IO CInt
foreign import ccall safe curlOptCOff
:: FunPtr () -> Ptr () -> CInt -> CURL_off_t -> IO CInt
foreign import ccall safe curlOptDPtr
:: FunPtr () -> Ptr () -> CInt -> Ptr () -> IO CInt
foreign import ccall safe curlOptFPtr
:: FunPtr () -> Ptr () -> CInt -> FunPtr () -> IO CInt