Loading lib/easy.c +3 −33 Original line number Diff line number Diff line Loading @@ -308,49 +308,19 @@ CURL *curl_easy_init(void) * curl_easy_setopt() is the external interface for setting options on an * easy handle. */ typedef int (*func_T)(void); CURLcode curl_easy_setopt(CURL *curl, CURLoption tag, ...) { va_list arg; func_T param_func = (func_T)0; long param_long = 0; void *param_obj = NULL; curl_off_t param_offset = 0; struct SessionHandle *data = curl; CURLcode ret=CURLE_FAILED_INIT; CURLcode ret; if(!curl) return CURLE_BAD_FUNCTION_ARGUMENT; va_start(arg, tag); /* PORTING NOTE: Object pointers can't necessarily be casted to function pointers and therefore we need to know what type it is and read the correct type at once. This should also correct problems with different sizes of the types. */ if(tag < CURLOPTTYPE_OBJECTPOINT) { /* This is a LONG type */ param_long = va_arg(arg, long); ret = Curl_setopt(data, tag, param_long); } else if(tag < CURLOPTTYPE_FUNCTIONPOINT) { /* This is a object pointer type */ param_obj = va_arg(arg, void *); ret = Curl_setopt(data, tag, param_obj); } else if(tag < CURLOPTTYPE_OFF_T) { /* This is a function pointer type */ param_func = va_arg(arg, func_T ); ret = Curl_setopt(data, tag, param_func); } else { /* This is a curl_off_t type */ param_offset = va_arg(arg, curl_off_t); ret = Curl_setopt(data, tag, param_offset); } ret = Curl_setopt(data, tag, arg); va_end(arg); return ret; Loading lib/url.c +2 −4 Original line number Diff line number Diff line Loading @@ -372,14 +372,12 @@ CURLcode Curl_open(struct SessionHandle **curl) return CURLE_OK; } CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, va_list param) { va_list param; char *argptr; CURLcode result = CURLE_OK; va_start(param, option); switch(option) { case CURLOPT_DNS_CACHE_TIMEOUT: data->set.dns_cache_timeout = va_arg(param, int); Loading lib/url.h +4 −1 Original line number Diff line number Diff line Loading @@ -23,12 +23,15 @@ * $Id$ ***************************************************************************/ #include <stdarg.h> /* to make sure we have ap_list */ /* * Prototypes for library-wide functions provided by url.c */ CURLcode Curl_open(struct SessionHandle **curl); CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...); CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, va_list arg); CURLcode Curl_close(struct SessionHandle *data); /* opposite of curl_open() */ CURLcode Curl_connect(struct SessionHandle *, struct connectdata **, bool *async, bool *protocol_connect); Loading Loading
lib/easy.c +3 −33 Original line number Diff line number Diff line Loading @@ -308,49 +308,19 @@ CURL *curl_easy_init(void) * curl_easy_setopt() is the external interface for setting options on an * easy handle. */ typedef int (*func_T)(void); CURLcode curl_easy_setopt(CURL *curl, CURLoption tag, ...) { va_list arg; func_T param_func = (func_T)0; long param_long = 0; void *param_obj = NULL; curl_off_t param_offset = 0; struct SessionHandle *data = curl; CURLcode ret=CURLE_FAILED_INIT; CURLcode ret; if(!curl) return CURLE_BAD_FUNCTION_ARGUMENT; va_start(arg, tag); /* PORTING NOTE: Object pointers can't necessarily be casted to function pointers and therefore we need to know what type it is and read the correct type at once. This should also correct problems with different sizes of the types. */ if(tag < CURLOPTTYPE_OBJECTPOINT) { /* This is a LONG type */ param_long = va_arg(arg, long); ret = Curl_setopt(data, tag, param_long); } else if(tag < CURLOPTTYPE_FUNCTIONPOINT) { /* This is a object pointer type */ param_obj = va_arg(arg, void *); ret = Curl_setopt(data, tag, param_obj); } else if(tag < CURLOPTTYPE_OFF_T) { /* This is a function pointer type */ param_func = va_arg(arg, func_T ); ret = Curl_setopt(data, tag, param_func); } else { /* This is a curl_off_t type */ param_offset = va_arg(arg, curl_off_t); ret = Curl_setopt(data, tag, param_offset); } ret = Curl_setopt(data, tag, arg); va_end(arg); return ret; Loading
lib/url.c +2 −4 Original line number Diff line number Diff line Loading @@ -372,14 +372,12 @@ CURLcode Curl_open(struct SessionHandle **curl) return CURLE_OK; } CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, va_list param) { va_list param; char *argptr; CURLcode result = CURLE_OK; va_start(param, option); switch(option) { case CURLOPT_DNS_CACHE_TIMEOUT: data->set.dns_cache_timeout = va_arg(param, int); Loading
lib/url.h +4 −1 Original line number Diff line number Diff line Loading @@ -23,12 +23,15 @@ * $Id$ ***************************************************************************/ #include <stdarg.h> /* to make sure we have ap_list */ /* * Prototypes for library-wide functions provided by url.c */ CURLcode Curl_open(struct SessionHandle **curl); CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...); CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, va_list arg); CURLcode Curl_close(struct SessionHandle *data); /* opposite of curl_open() */ CURLcode Curl_connect(struct SessionHandle *, struct connectdata **, bool *async, bool *protocol_connect); Loading