aboutsummaryrefslogtreecommitdiff
path: root/server-client.c
diff options
context:
space:
mode:
authornicm <nicm>2021-08-27 17:25:55 +0000
committernicm <nicm>2021-08-27 17:25:55 +0000
commitdaec63e5e6eb3390d53f4bf7f8a327df77e46c95 (patch)
treecf78624cb0b4a80a6eeb8e29b368ea4f9beb5610 /server-client.c
parentfd756a150b43d319d08ac4117f34edef9e0438c4 (diff)
downloadrtmux-daec63e5e6eb3390d53f4bf7f8a327df77e46c95.tar.gz
rtmux-daec63e5e6eb3390d53f4bf7f8a327df77e46c95.tar.bz2
rtmux-daec63e5e6eb3390d53f4bf7f8a327df77e46c95.zip
Replace %% in command lists (by copying them) for template arguments ,
this means they can be used with {} as well. Also make argument processing from an existing vector preserve commands. GitHub issue 2858.
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/server-client.c b/server-client.c
index 062e72d4..a7cad0a5 100644
--- a/server-client.c
+++ b/server-client.c
@@ -2124,6 +2124,7 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
int argc;
char **argv, *cause;
struct cmd_parse_result *pr;
+ struct args_value *values;
if (c->flags & CLIENT_EXIT)
return;
@@ -2149,7 +2150,8 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
*argv = xstrdup("new-session");
}
- pr = cmd_parse_from_arguments(argc, argv, NULL);
+ values = args_from_vector(argc, argv);
+ pr = cmd_parse_from_arguments(values, argc, NULL);
switch (pr->status) {
case CMD_PARSE_ERROR:
cause = pr->error;
@@ -2157,6 +2159,8 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
case CMD_PARSE_SUCCESS:
break;
}
+ args_free_values(values, argc);
+ free(values);
cmd_free_argv(argc, argv);
cmdq_append(c, cmdq_get_command(pr->cmdlist, NULL));