# frozen_string_literal: true
module Ethon
module Curls
# This module contains the functions to be attached in order to work with
# libcurl.
module Functions
# :nodoc:
def self.extended(base)
base.attach_function :global_init, :curl_global_init, [:long], :int
base.attach_function :global_cleanup, :curl_global_cleanup, [], :void
base.attach_function :free, :curl_free, [:pointer], :void
base.attach_function :easy_init, :curl_easy_init, [], :pointer
base.attach_function :easy_cleanup, :curl_easy_cleanup, [:pointer], :void
base.attach_function :easy_getinfo, :curl_easy_getinfo, [:pointer, :info, :varargs], :easy_code
base.attach_function :easy_setopt, :curl_easy_setopt, [:pointer, :easy_option, :varargs], :easy_code
base.instance_variable_set(:@blocking, true)
base.attach_function :easy_perform, :curl_easy_perform, [:pointer], :easy_code
base.attach_function :easy_strerror, :curl_easy_strerror, [:easy_code], :string
base.attach_function :easy_escape, :curl_easy_escape, [:pointer, :pointer, :int], :pointer
base.attach_function :easy_reset, :curl_easy_reset, [:pointer], :void
base.attach_function :easy_duphandle, :curl_easy_duphandle, [:pointer], :pointer
base.attach_function :formadd, :curl_formadd, [:pointer, :pointer, :varargs], :int
base.attach_function :formfree, :curl_formfree, [:pointer], :void
base.attach_function :multi_init, :curl_multi_init, [], :pointer
base.attach_function :multi_cleanup, :curl_multi_cleanup, [:pointer], :void
base.attach_function :multi_add_handle, :curl_multi_add_handle, [:pointer, :pointer], :multi_code
base.attach_function :multi_remove_handle, :curl_multi_remove_handle, [:pointer, :pointer], :multi_code
base.attach_function :multi_info_read, :curl_multi_info_read, [:pointer, :pointer], Curl::Msg.ptr
base.attach_function :multi_perform, :curl_multi_perform, [:pointer, :pointer], :multi_code
base.attach_function :multi_timeout, :curl_multi_timeout, [:pointer, :pointer], :multi_code
base.attach_function :multi_fdset, :curl_multi_fdset, [:pointer, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::FDSet.ptr, :pointer], :multi_code
base.attach_function :multi_strerror, :curl_multi_strerror, [:int], :string
base.attach_function :multi_setopt, :curl_multi_setopt, [:pointer, :multi_option, :varargs], :multi_code
base.attach_function :multi_socket_action, :curl_multi_socket_action, [:pointer, :int, :socket_readiness, :pointer], :multi_code
base.attach_function :version, :curl_version, [], :string
base.attach_function :version_info, :curl_version_info, [], Curl::VersionInfoData.ptr
base.attach_function :slist_append, :curl_slist_append, [:pointer, :string], :pointer
base.attach_function :slist_free_all, :curl_slist_free_all, [:pointer], :void
base.instance_variable_set(:@blocking, true)
if Curl.windows?
base.ffi_lib 'ws2_32'
else
base.ffi_lib ::FFI::Library::LIBC
end
base.attach_function :select, [:int, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::Timeval.ptr], :int
end
end
end
end