From: Daniel Stenberg Date: Mon, 8 Jan 2024 16:00:05 +0000 (+0100) Subject: tool_getparam: move the --url-query logic into url_query() X-Git-Tag: curl-8_6_0~127 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3870d03b5d118766f63df3290946b2823c6396b0;p=thirdparty%2Fcurl.git tool_getparam: move the --url-query logic into url_query() This function is not doing post at all so it was always weirdly placed. --- diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 0b58475c05..baec05cf94 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -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;