#endif /* !CURL_DISABLE_MIME */
#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_SMTP || !CURL_DISABLE_IMAP */
+static CURLcode setopt_share(struct Curl_easy *data, struct Curl_share *set)
+{
+ CURLcode result;
+
+ if(data->conn) {
+ /* As this handle already has a connection attached, changing share now
+ would be complicated and error-prone */
+ infof(data, "Cannot change share object while in use");
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ }
+ else {
+ /* disconnect from old share, if any and possible */
+ result = Curl_share_easy_unlink(data);
+ if(!result && GOOD_SHARE_HANDLE(set))
+ /* use new share if it set */
+ result = Curl_share_easy_link(data, set);
+ }
+ return result;
+}
+
/* assorted pointer type arguments */
static CURLcode setopt_pointers(struct Curl_easy *data, CURLoption option,
va_list param)
if(!s->err)
s->err = stderr;
break;
- case CURLOPT_SHARE: {
- struct Curl_share *set = va_arg(param, struct Curl_share *);
-
- /* disconnect from old share, if any and possible */
- result = Curl_share_easy_unlink(data);
- if(result)
- return result;
-
- /* use new share if it set */
- if(GOOD_SHARE_HANDLE(set)) {
- result = Curl_share_easy_link(data, set);
- if(result)
- return result;
- }
- break;
- }
+ case CURLOPT_SHARE:
+ return setopt_share(data, va_arg(param, struct Curl_share *));
default:
return CURLE_UNKNOWN_OPTION;