Simplified the code within curl_easy_perform() that calls Curl_perform().
authorDaniel Stenberg <daniel@haxx.se>
Sun, 17 Jul 2005 12:44:11 +0000 (12:44 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 17 Jul 2005 12:44:11 +0000 (12:44 +0000)
Pointed out by Bjorn Reese.

lib/easy.c
lib/url.c
lib/url.h

index 449e78b..80fd764 100644 (file)
@@ -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;
index 9c05c80..98662ce 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -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);
index 7b3a763..40b406c 100644 (file)
--- a/lib/url.h
+++ b/lib/url.h
  * $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);