curl-cpp
static c++17 wrapper for curl with -fno-exceptions support
curl_share.cc
1 #include "curl_share.hpp"
2 #include "curl_easy.hpp"
3 
4 namespace curl {
5 void curl_t::Share_deleter::operator () (char *p) const noexcept
6 {
7  if (p)
8  curl_share_cleanup(p);
9 }
10 auto curl_t::create_share() noexcept -> Share_t
11 {
12  return Share_t{static_cast<char*>(static_cast<void*>(curl_share_init()))};
13 }
14 
15 Share_base::Share_base(curl_t::Share_t &&share) noexcept:
16  curl_share{std::move(share)}
17 {}
18 
19 Share_base::Share_base(Share_base &&other) noexcept:
20  curl_share{std::move(other.curl_share)}
21 {}
22 Share_base& Share_base::operator = (Share_base &&other) noexcept
23 {
24  curl_share = std::move(other.curl_share);
25  return *this;
26 }
27 
28 Share_base::operator bool () const noexcept
29 {
30  return bool(curl_share);
31 }
32 
33 void Share_base::add_lock(lock_function_t lock_func, unlock_function_t unlock_func, void *userptr) noexcept
34 {
35  curl_share_setopt(curl_share.get(), CURLSHOPT_LOCKFUNC, lock_func);
36  curl_share_setopt(curl_share.get(), CURLSHOPT_UNLOCKFUNC, unlock_func);
37  curl_share_setopt(curl_share.get(), CURLSHOPT_USERDATA, userptr);
38 }
39 
40 auto Share_base::enable_sharing(Options option) noexcept -> Ret_except<int, std::bad_alloc>
41 {
42  auto code = curl_share_setopt(curl_share.get(), CURLSHOPT_SHARE, static_cast<curl_lock_data>(option));
43  if (code == CURLSHE_NOMEM)
44  return {std::bad_alloc{}};
45  else if (code == CURLSHE_NOT_BUILT_IN)
46  return {0};
47 
48  return {1};
49 }
50 void Share_base::disable_sharing(Options option) noexcept
51 {
52  curl_share_setopt(curl_share.get(), CURLSHOPT_UNSHARE, static_cast<curl_lock_data>(option));
53 }
54 
55 void Share_base::add_easy(Easy_ref_t &easy) noexcept
56 {
57  curl_easy_setopt(easy.curl_easy, CURLOPT_SHARE, curl_share.get());
58 }
59 void Share_base::remove_easy(Easy_ref_t &easy) noexcept
60 {
61  curl_easy_setopt(easy.curl_easy, CURLOPT_SHARE, NULL);
62 }
63 } /* namespae curl */
curl::curl_t::Share_deleter
Definition: curl.hpp:378
curl::Share_base::operator=
Share_base & operator=(Share_base &&other) noexcept
Definition: curl_share.cc:22
curl::Share_base::Options
Options
Definition: curl_share.hpp:72
curl::Easy_ref_t
Definition: curl_easy.hpp:53
curl::curl_t::create_share
auto create_share() noexcept -> Share_t
Definition: curl_share.cc:10
curl::curl_t
Definition: curl.hpp:62
curl::Share_base::disable_sharing
void disable_sharing(Options option) noexcept
Definition: curl_share.cc:50
curl::Share_base
Definition: curl_share.hpp:21
curl::Share_base::enable_sharing
auto enable_sharing(Options option) noexcept -> Ret_except< int, std::bad_alloc >
Definition: curl_share.cc:40
curl::Share_base::Share_base
Share_base(Share_base &&other) noexcept
Definition: curl_share.cc:19
curl::Share_base::operator bool
operator bool() const noexcept
Definition: curl_share.cc:28
curl::Share_base::Share_base
Share_base(curl_t::Share_t &&share) noexcept
Definition: curl_share.cc:15
curl::Share_base::add_lock
void add_lock(lock_function_t lock_func, unlock_function_t unlock_func, void *userptr) noexcept
Definition: curl_share.cc:33