cmdline: fix handling of OperationConfig linked list (--next)

Ensures that -K/--config inserts new items at the end of the list
instead of overwriting the second item, and that after a -K/--config
option has been parsed, the option parser's view of the current config
is update.

Fixes #5120
Closes #5123
This commit is contained in:
Rici Lake 2020-03-18 18:28:19 -05:00 committed by Daniel Stenberg
parent 3d77d089a4
commit 4e0b4fee4a
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 4 additions and 2 deletions

View File

@ -2258,6 +2258,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
char *nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL; char *nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL;
result = getparameter(flag, nextarg, &passarg, global, config); result = getparameter(flag, nextarg, &passarg, global, config);
config = global->last;
if(result == PARAM_NEXT_OPERATION) { if(result == PARAM_NEXT_OPERATION) {
/* Reset result as PARAM_NEXT_OPERATION is only used here and not /* Reset result as PARAM_NEXT_OPERATION is only used here and not
returned from this function */ returned from this function */

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -76,7 +76,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
FILE *file = NULL; FILE *file = NULL;
bool usedarg = FALSE; bool usedarg = FALSE;
int rc = 0; int rc = 0;
struct OperationConfig *operation = global->first; struct OperationConfig *operation = global->last;
char *pathalloc = NULL; char *pathalloc = NULL;
if(!filename || !*filename) { if(!filename || !*filename) {
@ -233,6 +233,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)")); fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)"));
#endif #endif
res = getparameter(option, param, &usedarg, global, operation); res = getparameter(option, param, &usedarg, global, operation);
operation = global->last;
if(!res && param && *param && !usedarg) if(!res && param && *param && !usedarg)
/* we passed in a parameter that wasn't used! */ /* we passed in a parameter that wasn't used! */