summaryrefslogtreecommitdiffstats
path: root/server-client.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2019-05-25 18:41:51 +0100
committerThomas Adam <thomas@xteddy.org>2019-05-25 18:41:51 +0100
commit463bd8abb9248c31214c951221c3cf96dbffb56e (patch)
treeea7bd85988b7dedd4bb24c72743e3b473f3c8fa7 /server-client.c
parenta69211aff5968f2bf71f0471cc67124dbd4597dd (diff)
parenta65a6d62d19136e20ce6e6ec72d676a334dcc914 (diff)
Merge branch 'obsd-master'
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/server-client.c b/server-client.c
index 47c513fc..7381eb52 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1785,9 +1785,9 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
struct msg_command_data data;
char *buf;
size_t len;
- struct cmd_list *cmdlist = NULL;
int argc;
char **argv, *cause;
+ struct cmd_parse_result *pr;
if (c->flags & CLIENT_EXIT)
return;
@@ -1813,24 +1813,31 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
*argv = xstrdup("new-session");
}
- if ((cmdlist = cmd_list_parse(argc, argv, NULL, 0, &cause)) == NULL) {
- cmd_free_argv(argc, argv);
+ pr = cmd_parse_from_arguments(argc, argv, NULL);
+ switch (pr->status) {
+ case CMD_PARSE_EMPTY:
+ cause = xstrdup("empty command");
goto error;
+ case CMD_PARSE_ERROR:
+ cause = pr->error;
+ goto error;
+ case CMD_PARSE_SUCCESS:
+ break;
}
cmd_free_argv(argc, argv);
- cmdq_append(c, cmdq_get_command(cmdlist, NULL, NULL, 0));
+ cmdq_append(c, cmdq_get_command(pr->cmdlist, NULL, NULL, 0));
cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL));
- cmd_list_free(cmdlist);
+
+ cmd_list_free(pr->cmdlist);
return;
error:
+ cmd_free_argv(argc, argv);
+
cmdq_append(c, cmdq_get_error(cause));
free(cause);
- if (cmdlist != NULL)
- cmd_list_free(cmdlist);
-
c->flags |= CLIENT_EXIT;
}