From 4e0b4fee4aea25da850327e068f307e6dc5200f2 Mon Sep 17 00:00:00 2001 From: Rici Lake Date: Wed, 18 Mar 2020 18:28:19 -0500 Subject: [PATCH] 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 --- src/tool_getparam.c | 1 + src/tool_parsecfg.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 0c555cc96..0252ee029 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -2258,6 +2258,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc, char *nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL; result = getparameter(flag, nextarg, &passarg, global, config); + config = global->last; if(result == PARAM_NEXT_OPERATION) { /* Reset result as PARAM_NEXT_OPERATION is only used here and not returned from this function */ diff --git a/src/tool_parsecfg.c b/src/tool_parsecfg.c index a9057ea31..efb9159e7 100644 --- a/src/tool_parsecfg.c +++ b/src/tool_parsecfg.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2019, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * 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; bool usedarg = FALSE; int rc = 0; - struct OperationConfig *operation = global->first; + struct OperationConfig *operation = global->last; char *pathalloc = NULL; if(!filename || !*filename) { @@ -233,6 +233,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global) fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)")); #endif res = getparameter(option, param, &usedarg, global, operation); + operation = global->last; if(!res && param && *param && !usedarg) /* we passed in a parameter that wasn't used! */