]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool_getparam: move the --url-query logic into url_query()
authorDaniel Stenberg <daniel@haxx.se>
Mon, 8 Jan 2024 16:00:05 +0000 (17:00 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 8 Jan 2024 21:38:22 +0000 (22:38 +0100)
This function is not doing post at all so it was always weirdly placed.

src/tool_getparam.c

index 0b58475c05d41809f3733777123eb344646e0ebe..baec05cf947757d3f6ea0c849737fdbd81eb396a 100644 (file)
@@ -760,53 +760,54 @@ static const struct LongShort *single(char letter)
   return singles[letter - ' '];
 }
 
-static ParameterError set_data(char subletter,
-                               char *nextarg,
-                               struct GlobalConfig *global,
-                               struct OperationConfig *config)
+#define MAX_QUERY_LEN 100000 /* larger is not likely to ever work */
+static ParameterError url_query(char *nextarg,
+                                struct GlobalConfig *global,
+                                struct OperationConfig *config)
 {
-  char *postdata = NULL;
-  FILE *file;
   size_t size = 0;
   ParameterError err = PARAM_OK;
+  char *query;
+  struct curlx_dynbuf dyn;
+  curlx_dyn_init(&dyn, MAX_QUERY_LEN);
+
+  if(*nextarg == '+') {
+    /* use without encoding */
+    query = strdup(&nextarg[1]);
+    if(!query)
+      err = PARAM_NO_MEM;
+  }
+  else
+    err = data_urlencode(global, nextarg, &query, &size);
 
-  if(subletter == 'g') { /* --url-query */
-#define MAX_QUERY_LEN 100000 /* larger is not likely to ever work */
-    char *query;
-    struct curlx_dynbuf dyn;
-    curlx_dyn_init(&dyn, MAX_QUERY_LEN);
-
-    if(*nextarg == '+') {
-      /* use without encoding */
-      query = strdup(&nextarg[1]);
-      if(!query) {
-        err = PARAM_NO_MEM;
-        goto done;
-      }
-    }
-    else {
-      err = data_urlencode(global, nextarg, &query, &size);
-      if(err)
-        goto done;
-    }
-
+  if(!err) {
     if(config->query) {
-      CURLcode result =
-        curlx_dyn_addf(&dyn, "%s&%s", config->query, query);
+      CURLcode result = curlx_dyn_addf(&dyn, "%s&%s", config->query, query);
       free(query);
-      if(result) {
+      if(result)
         err = PARAM_NO_MEM;
-        goto done;
+      else {
+        free(config->query);
+        config->query = curlx_dyn_ptr(&dyn);
       }
-      free(config->query);
-      config->query = curlx_dyn_ptr(&dyn);
     }
     else
       config->query = query;
-
-    goto done; /* this is not a POST argument at all */
   }
-  else if(subletter == 'e') { /* --data-urlencode */
+  return err;
+}
+
+static ParameterError set_data(char subletter,
+                               char *nextarg,
+                               struct GlobalConfig *global,
+                               struct OperationConfig *config)
+{
+  char *postdata = NULL;
+  FILE *file;
+  size_t size = 0;
+  ParameterError err = PARAM_OK;
+
+  if(subletter == 'e') { /* --data-urlencode */
     err = data_urlencode(global, nextarg, &postdata, &size);
     if(err)
       goto done;
@@ -1828,10 +1829,12 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
     case ONEOPT('d', 'b'):  /* --data-binary */
     case ONEOPT('d', 'e'):  /* --data-urlencode */
     case ONEOPT('d', 'f'):  /* --json */
-    case ONEOPT('d', 'g'):  /* --url-query */
     case ONEOPT('d', 'r'):  /* --data-raw */
       err = set_data(subletter, nextarg, global, config);
-    break;
+      break;
+    case ONEOPT('d', 'g'):  /* --url-query */
+      err = url_query(nextarg, global, config);
+      break;
     case ONEOPT('D', '\0'): /* --dump-header */
       err = getstr(&config->headerfile, nextarg, DENY_BLANK);
       break;