aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-12-01 23:43:43 -0500
committerBruce Hill <bruce@bruce-hill.com>2025-12-01 23:43:43 -0500
commitce26a80bdb61bb8928c49f42bca84c6da4df72c5 (patch)
treeeca296d327982a0aa41518106f02e4f1e20a9435
parenta6c7d8ecbd2d67472774ac9600333cfe97454aaf (diff)
Fix CLI arg parsing
-rw-r--r--src/stdlib/cli.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/stdlib/cli.c b/src/stdlib/cli.c
index 18da5c5e..e30f7ced 100644
--- a/src/stdlib/cli.c
+++ b/src/stdlib/cli.c
@@ -325,7 +325,8 @@ bool pop_cli_flag(List_t *args, char short_flag, const char *flag, void *dest, c
// Case: --flag values...
if (i + 1 >= (int64_t)args->length) print_err("No value provided for flag: ", flag);
List_t values = List$slice(*args, I(i + 2), I(-1));
- *args = parse_arg_list(values, flag, dest, type, false);
+ List_t remaining_args = parse_arg_list(values, flag, dest, type, false);
+ *args = List$concat(List$to(*args, I(i)), remaining_args, sizeof(const char *));
return true;
} else if (starts_with(arg + 2, flag) && arg[2 + strlen(flag)] == '=') {
// Case: --flag=...
@@ -341,7 +342,8 @@ bool pop_cli_flag(List_t *args, char short_flag, const char *flag, void *dest, c
} else {
values = List(arg_value);
}
- *args = parse_arg_list(values, flag, dest, type, false);
+ List_t remaining_args = parse_arg_list(values, flag, dest, type, false);
+ *args = List$concat(List$to(*args, I(i)), remaining_args, sizeof(const char *));
return true;
}
} else if (short_flag && arg[0] == '-' && arg[1] != '-' && strchr(arg + 1, short_flag)) {