]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
--libcurl: fix for non-zero default options
authorYves Arrouye <yarrouye@expedia.com>
Mon, 14 Jan 2013 19:06:32 +0000 (20:06 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 16 Jan 2013 14:49:31 +0000 (15:49 +0100)
If the default value for an option taking a long as its value is non
zero, and it is set by zero by a command line option, then that command
line option is not reflected in --libcurl's output. This is because line
520-521 of tool_setopt.c look like:

if(!lval)
    skip = TRUE;

An example of a command-line option doing so is the -k option that sets
CURLOPT_SLL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST to 0L, when the
defaults are non-zero.

src/tool_setopt.c

index 9aefc21d5bdb6d8dca9b845c8c18a991d5af3ba1..4014177f2c00b093d0cef9135c619a81f53ccf84 100644 (file)
@@ -39,6 +39,7 @@
 /* and finally any "NONE" value. */
 
 #define NV(e) {#e, e}
+#define NV1(e, v) {#e, (v)}
 #define NVEND {NULL, 0}         /* sentinel to mark end of list */
 
 const NameValue setopt_nv_CURLPROXY[] = {
@@ -122,6 +123,13 @@ const NameValue setopt_nv_CURLPROTO[] = {
   NVEND,
 };
 
+/* These options have non-zero default values. */
+static const NameValue setopt_nv_CURLNONZERODEFAULTS[] = {
+  NV1(CURLOPT_SSL_VERIFYPEER, 1),
+  NV1(CURLOPT_SSL_VERIFYHOST, 1),
+  NVEND
+};
+
 /* Format and add code; jump to nomem on malloc error */
 #define ADD(args) do { \
   ret = easysrc_add args; \
@@ -453,10 +461,19 @@ CURLcode tool_setopt(CURL *curl, bool str, struct Configurable *config,
   if(tag < CURLOPTTYPE_OBJECTPOINT) {
     /* Value is expected to be a long */
     long lval = va_arg(arg, long);
+    long defval = 0L;
+    const NameValue *nv = NULL;
+    for(nv=setopt_nv_CURLNONZERODEFAULTS; nv->name; nv++) {
+      if(!strcmp(name, nv->name)) {
+        defval = nv->value;
+        break; /* found it */
+      }
+    }
+
     snprintf(buf, sizeof(buf), "%ldL", lval);
     value = buf;
     ret = curl_easy_setopt(curl, tag, lval);
-    if(!lval)
+    if(lval == defval)
       skip = TRUE;
   }
   else if(tag < CURLOPTTYPE_OFF_T) {