From 4ed6b07d8dbf6a61aeba1eb8ac802f0b6a65c082 Mon Sep 17 00:00:00 2001 From: Yves Arrouye Date: Mon, 14 Jan 2013 20:06:32 +0100 Subject: [PATCH] --libcurl: fix for non-zero default options 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 | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/tool_setopt.c b/src/tool_setopt.c index 9aefc21d5b..4014177f2c 100644 --- a/src/tool_setopt.c +++ b/src/tool_setopt.c @@ -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) {