curl: remove the global argument from many functions

Since the config struct has a pointer to it, both pointers don't need to
be passed on.

Closes #17890
This commit is contained in:
Daniel Stenberg 2025-07-10 18:33:50 +02:00
parent d516628d14
commit f0b8137c1c
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
10 changed files with 182 additions and 220 deletions

View file

@ -690,13 +690,12 @@ error:
return err;
}
static void sethttpver(struct GlobalConfig *global,
struct OperationConfig *config,
static void sethttpver(struct OperationConfig *config,
long httpversion)
{
if(config->httpversion &&
(config->httpversion != httpversion))
warnf(global, "Overrides previous HTTP version option");
warnf(config->global, "Overrides previous HTTP version option");
config->httpversion = httpversion;
}
@ -841,7 +840,6 @@ static int find_tos(const void *a, const void *b)
#define MAX_QUERY_LEN 100000 /* larger is not likely to ever work */
static ParameterError url_query(const char *nextarg,
struct GlobalConfig *global,
struct OperationConfig *config)
{
size_t size = 0;
@ -857,7 +855,7 @@ static ParameterError url_query(const char *nextarg,
err = PARAM_NO_MEM;
}
else
err = data_urlencode(global, nextarg, &query, &size);
err = data_urlencode(config->global, nextarg, &query, &size);
if(!err) {
if(config->query) {
@ -878,13 +876,13 @@ static ParameterError url_query(const char *nextarg,
static ParameterError set_data(cmdline_t cmd,
const char *nextarg,
struct GlobalConfig *global,
struct OperationConfig *config)
{
char *postdata = NULL;
FILE *file;
size_t size = 0;
ParameterError err = PARAM_OK;
struct GlobalConfig *global = config->global;
if(cmd == C_DATA_URLENCODE) { /* --data-urlencode */
err = data_urlencode(global, nextarg, &postdata, &size);
@ -1039,8 +1037,7 @@ const struct LongShort *findlongopt(const char *opt)
sizeof(aliases[0]), findarg);
}
static ParameterError add_url(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError add_url(struct OperationConfig *config,
const char *thisurl,
bool remote_noglob)
{
@ -1076,15 +1073,14 @@ static ParameterError add_url(struct GlobalConfig *global,
url->useremote = url->noglob = TRUE;
if(!err && (++config->num_urls > 1) &&
(config->etag_save_file || config->etag_compare_file)) {
errorf(global, "The etag options only work on a single URL");
errorf(config->global, "The etag options only work on a single URL");
return PARAM_BAD_USE;
}
}
return err;
}
static ParameterError parse_url(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_url(struct OperationConfig *config,
const char *nextarg)
{
/* nextarg is never NULL here */
@ -1104,7 +1100,7 @@ static ParameterError parse_url(struct GlobalConfig *global,
curlx_dyn_init(&line, 8092);
while(my_get_line(f, &line, &error)) {
const char *ptr = curlx_dyn_ptr(&line);
err = add_url(global, config, ptr, TRUE);
err = add_url(config, ptr, TRUE);
if(err)
break;
}
@ -1117,7 +1113,7 @@ static ParameterError parse_url(struct GlobalConfig *global,
}
return PARAM_READ_ERROR; /* file not found */
}
return add_url(global, config, nextarg, FALSE);
return add_url(config, nextarg, FALSE);
}
@ -1157,10 +1153,10 @@ static ParameterError parse_localport(struct OperationConfig *config,
return PARAM_OK;
}
static ParameterError parse_continue_at(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_continue_at(struct OperationConfig *config,
const char *nextarg)
{
struct GlobalConfig *global = config->global;
ParameterError err = PARAM_OK;
if(config->range) {
errorf(global, "--continue-at is mutually exclusive with --range");
@ -1189,8 +1185,7 @@ static ParameterError parse_continue_at(struct GlobalConfig *global,
return err;
}
static ParameterError parse_ech(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_ech(struct OperationConfig *config,
const char *nextarg)
{
ParameterError err = PARAM_OK;
@ -1218,7 +1213,7 @@ static ParameterError parse_ech(struct GlobalConfig *global,
file = fopen(nextarg, FOPEN_READTEXT);
}
if(!file) {
warnf(global,
warnf(config->global,
"Couldn't read file \"%s\" "
"specified for \"--ech ecl:\" option",
nextarg);
@ -1242,8 +1237,7 @@ static ParameterError parse_ech(struct GlobalConfig *global,
return err;
}
static ParameterError parse_header(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_header(struct OperationConfig *config,
cmdline_t cmd,
const char *nextarg)
{
@ -1255,7 +1249,7 @@ static ParameterError parse_header(struct GlobalConfig *global,
bool use_stdin = !strcmp(&nextarg[1], "-");
FILE *file = use_stdin ? stdin : fopen(&nextarg[1], FOPEN_READTEXT);
if(!file) {
errorf(global, "Failed to open %s", &nextarg[1]);
errorf(config->global, "Failed to open %s", &nextarg[1]);
err = PARAM_READ_ERROR;
}
else {
@ -1384,13 +1378,13 @@ static ParameterError parse_quote(struct OperationConfig *config,
return err;
}
static ParameterError parse_range(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_range(struct OperationConfig *config,
const char *nextarg)
{
ParameterError err = PARAM_OK;
curl_off_t value;
const char *orig = nextarg;
struct GlobalConfig *global = config->global;
if(config->use_resume) {
errorf(global, "--continue-at is mutually exclusive with --range");
@ -1527,8 +1521,7 @@ static ParameterError parse_verbose(struct GlobalConfig *global,
return err;
}
static ParameterError parse_writeout(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_writeout(struct OperationConfig *config,
const char *nextarg)
{
ParameterError err = PARAM_OK;
@ -1548,7 +1541,7 @@ static ParameterError parse_writeout(struct GlobalConfig *global,
fname = nextarg;
file = fopen(fname, FOPEN_READTEXT);
if(!file) {
errorf(global, "Failed to open %s", fname);
errorf(config->global, "Failed to open %s", fname);
return PARAM_READ_ERROR;
}
}
@ -1559,7 +1552,7 @@ static ParameterError parse_writeout(struct GlobalConfig *global,
if(err)
return err;
if(!config->writeout)
warnf(global, "Failed to read %s", fname);
warnf(config->global, "Failed to read %s", fname);
}
else
err = getstr(&config->writeout, nextarg, ALLOW_BLANK);
@ -1567,8 +1560,7 @@ static ParameterError parse_writeout(struct GlobalConfig *global,
return err;
}
static ParameterError parse_time_cond(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError parse_time_cond(struct OperationConfig *config,
const char *nextarg)
{
ParameterError err = PARAM_OK;
@ -1596,14 +1588,14 @@ static ParameterError parse_time_cond(struct GlobalConfig *global,
if(-1 == config->condtime) {
curl_off_t value;
/* now let's see if it is a filename to get the time from instead! */
int rc = getfiletime(nextarg, global, &value);
int rc = getfiletime(nextarg, config->global, &value);
if(!rc)
/* pull the time out from the file */
config->condtime = value;
else {
/* failed, remove time condition */
config->timecond = CURL_TIMECOND_NONE;
warnf(global,
warnf(config->global,
"Illegal date format for -z, --time-cond (and not "
"a filename). Disabling time condition. "
"See curl_getdate(3) for valid date syntax.");
@ -1691,8 +1683,7 @@ static void opt_depr(struct GlobalConfig *global,
}
/* opt_none is the function that handles ARG_NONE options */
static ParameterError opt_none(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError opt_none(struct OperationConfig *config,
const struct LongShort *a)
{
switch(a->cmd) {
@ -1707,37 +1698,37 @@ static ParameterError opt_none(struct GlobalConfig *global,
case C_HTTP1_0: /* --http1.0 */
/* HTTP version 1.0 */
sethttpver(global, config, CURL_HTTP_VERSION_1_0);
sethttpver(config, CURL_HTTP_VERSION_1_0);
break;
case C_HTTP1_1: /* --http1.1 */
/* HTTP version 1.1 */
sethttpver(global, config, CURL_HTTP_VERSION_1_1);
sethttpver(config, CURL_HTTP_VERSION_1_1);
break;
case C_HTTP2: /* --http2 */
/* HTTP version 2.0 */
if(!feature_http2)
return PARAM_LIBCURL_DOESNT_SUPPORT;
sethttpver(global, config, CURL_HTTP_VERSION_2_0);
sethttpver(config, CURL_HTTP_VERSION_2_0);
break;
case C_HTTP2_PRIOR_KNOWLEDGE: /* --http2-prior-knowledge */
/* HTTP version 2.0 over clean TCP */
if(!feature_http2)
return PARAM_LIBCURL_DOESNT_SUPPORT;
sethttpver(global, config, CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE);
sethttpver(config, CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE);
break;
case C_HTTP3: /* --http3: */
/* Try HTTP/3, allow fallback */
if(!feature_http3)
return PARAM_LIBCURL_DOESNT_SUPPORT;
else
sethttpver(global, config, CURL_HTTP_VERSION_3);
sethttpver(config, CURL_HTTP_VERSION_3);
break;
case C_HTTP3_ONLY: /* --http3-only */
/* Try HTTP/3 without fallback */
if(!feature_http3)
return PARAM_LIBCURL_DOESNT_SUPPORT;
else
sethttpver(global, config, CURL_HTTP_VERSION_3ONLY);
sethttpver(config, CURL_HTTP_VERSION_3ONLY);
break;
case C_TLSV1: /* --tlsv1 */
config->ssl_version = CURL_SSLVERSION_TLSv1;
@ -1771,11 +1762,11 @@ static ParameterError opt_none(struct GlobalConfig *global,
}
/* opt_bool is the function that handles boolean options */
static ParameterError opt_bool(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError opt_bool(struct OperationConfig *config,
const struct LongShort *a,
bool toggle)
{
struct GlobalConfig *global = config->global;
switch(a->cmd) {
case C_ALPN: /* --alpn */
config->noalpn = !toggle;
@ -2161,13 +2152,13 @@ static ParameterError opt_bool(struct GlobalConfig *global,
/* opt_filestring handles string and file options */
static ParameterError opt_filestring(struct GlobalConfig *global,
struct OperationConfig *config,
static ParameterError opt_filestring(struct OperationConfig *config,
const struct LongShort *a,
const char *nextarg)
{
ParameterError err = PARAM_OK;
curl_off_t value;
struct GlobalConfig *global = config->global;
static const char *redir_protos[] = {
"http",
"https",
@ -2292,7 +2283,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
config->max_filesize = value;
break;
case C_URL: /* --url */
err = parse_url(global, config, nextarg);
err = parse_url(config, nextarg);
break;
case C_SOCKS5: /* --socks5 */
/* socks5 proxy to use, and resolves the name locally and passes on the
@ -2480,7 +2471,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
err = getstr(&config->cookiejar, nextarg, DENY_BLANK);
break;
case C_CONTINUE_AT: /* --continue-at */
err = parse_continue_at(global, config, nextarg);
err = parse_continue_at(config, nextarg);
break;
case C_DATA: /* --data */
case C_DATA_ASCII: /* --data-ascii */
@ -2488,10 +2479,10 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
case C_DATA_URLENCODE: /* --data-urlencode */
case C_JSON: /* --json */
case C_DATA_RAW: /* --data-raw */
err = set_data((cmdline_t)a->cmd, nextarg, global, config);
err = set_data((cmdline_t)a->cmd, nextarg, config);
break;
case C_URL_QUERY: /* --url-query */
err = url_query(nextarg, global, config);
err = url_query(nextarg, config);
break;
case C_DUMP_HEADER: /* --dump-header */
err = getstr(&config->headerfile, nextarg, DENY_BLANK);
@ -2540,7 +2531,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
}
break;
case C_ECH: /* --ech */
err = parse_ech(global, config, nextarg);
err = parse_ech(config, nextarg);
break;
case C_CAPATH: /* --capath */
err = getstr(&config->capath, nextarg, DENY_BLANK);
@ -2690,7 +2681,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
break;
case C_HEADER: /* --header */
case C_PROXY_HEADER: /* --proxy-header */
err = parse_header(global, config, (cmdline_t)a->cmd, nextarg);
err = parse_header(config, (cmdline_t)a->cmd, nextarg);
break;
case C_CONFIG: /* --config */
if(parseconfig(nextarg, global)) {
@ -2727,7 +2718,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
err = parse_quote(config, nextarg);
break;
case C_RANGE: /* --range */
err = parse_range(global, config, nextarg);
err = parse_range(config, nextarg);
break;
case C_TELNET_OPTION: /* --telnet-option */
/* Telnet options */
@ -2745,7 +2736,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
err = getstr(&config->proxyuserpwd, nextarg, ALLOW_BLANK);
break;
case C_WRITE_OUT: /* --write-out */
err = parse_writeout(global, config, nextarg);
err = parse_writeout(config, nextarg);
break;
case C_PREPROXY: /* --preproxy */
err = getstr(&config->preproxy, nextarg, DENY_BLANK);
@ -2786,7 +2777,7 @@ static ParameterError opt_filestring(struct GlobalConfig *global,
break;
}
case C_TIME_COND: /* --time-cond */
err = parse_time_cond(global, config, nextarg);
err = parse_time_cond(config, nextarg);
break;
case C_UPLOAD_FLAGS: /* --upload-flags */
err = parse_upload_flags(config, nextarg);
@ -2799,7 +2790,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
const char *nextarg, /* NULL if unset */
bool *usedarg, /* set to TRUE if the arg
has been used */
struct GlobalConfig *global,
struct OperationConfig *config)
{
const char *parse = NULL;
@ -2810,6 +2800,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
by using --OPTION or --no-OPTION */
bool nextalloc = FALSE; /* if nextarg is allocated */
const struct LongShort *a = NULL;
struct GlobalConfig *global = config->global;
verbose_nopts = 0; /* options processed in `flag`*/
*usedarg = FALSE; /* default is that we do not use the arg */
@ -2921,7 +2912,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
nextarg);
}
/* ARG_FILE | ARG_STRG */
err = opt_filestring(global, config, a, nextarg);
err = opt_filestring(config, a, nextarg);
if(a->desc & ARG_CLEAR)
cleanarg(CURL_UNCONST(nextarg));
}
@ -2932,9 +2923,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
}
/* ARG_NONE | ARG_BOOL */
if(ARGTYPE(a->desc) == ARG_BOOL)
err = opt_bool(global, config, a, toggle);
err = opt_bool(config, a, toggle);
else
err = opt_none(global, config, a);
err = opt_none(config, a);
}
++verbose_nopts; /* processed one option from `flag` input, loop for
@ -2978,7 +2969,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
}
}
result = getparameter(orig_opt, nextarg, &passarg, global, config);
result = getparameter(orig_opt, nextarg, &passarg, config);
unicodefree(nextarg);
config = global->last;
@ -3014,7 +3005,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
bool used;
/* Just add the URL please */
result = getparameter("--url", orig_opt, &used, global, config);
result = getparameter("--url", orig_opt, &used, config);
}
if(!result) {