aboutsummaryrefslogtreecommitdiff
path: root/cmd-confirm-before.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2016-10-16 20:01:10 +0100
committerThomas Adam <thomas@xteddy.org>2016-10-16 20:01:10 +0100
commitc67b7025882ee6bc2b3d5112dbc630c191f1fa2a (patch)
tree4c36124e376eac0235accd523be6545ccdccf6af /cmd-confirm-before.c
parent3d8efdf310f475a6b9ed83814182c966de2bdab3 (diff)
parentddc4512d2e0eda6c705e002cb5dbf80719d709e1 (diff)
downloadrtmux-c67b7025882ee6bc2b3d5112dbc630c191f1fa2a.tar.gz
rtmux-c67b7025882ee6bc2b3d5112dbc630c191f1fa2a.tar.bz2
rtmux-c67b7025882ee6bc2b3d5112dbc630c191f1fa2a.zip
Merge branch 'obsd-master'
Diffstat (limited to 'cmd-confirm-before.c')
-rw-r--r--cmd-confirm-before.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/cmd-confirm-before.c b/cmd-confirm-before.c
index 4241aefb..2dd52c81 100644
--- a/cmd-confirm-before.c
+++ b/cmd-confirm-before.c
@@ -83,12 +83,24 @@ cmd_confirm_before_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_NORMAL);
}
+static enum cmd_retval
+cmd_confirm_before_error(struct cmd_q *cmdq, void *data)
+{
+ char *error = data;
+
+ cmdq_error(cmdq, "%s", error);
+ free(error);
+
+ return (CMD_RETURN_NORMAL);
+}
+
static int
cmd_confirm_before_callback(void *data, const char *s)
{
struct cmd_confirm_before_data *cdata = data;
struct client *c = cdata->client;
struct cmd_list *cmdlist;
+ struct cmd_q *new_cmdq;
char *cause;
if (c->flags & CLIENT_DEAD)
@@ -101,14 +113,17 @@ cmd_confirm_before_callback(void *data, const char *s)
if (cmd_string_parse(cdata->cmd, &cmdlist, NULL, 0, &cause) != 0) {
if (cause != NULL) {
- cmdq_error(c->cmdq, "%s", cause);
- free(cause);
- }
- return (0);
+ new_cmdq = cmdq_get_callback(cmd_confirm_before_error,
+ cause);
+ } else
+ new_cmdq = NULL;
+ } else {
+ new_cmdq = cmdq_get_command(cmdlist, NULL, NULL, 0);
+ cmd_list_free(cmdlist);
}
- cmdq_run(c->cmdq, cmdlist, NULL);
- cmd_list_free(cmdlist);
+ if (new_cmdq != NULL)
+ cmdq_append(c, new_cmdq);
return (0);
}