version 1.30, 2016/10/16 17:55:14 |
version 1.31, 2016/10/16 19:04:05 |
|
|
* Asks for confirmation before executing a command. |
* Asks for confirmation before executing a command. |
*/ |
*/ |
|
|
static enum cmd_retval cmd_confirm_before_exec(struct cmd *, struct cmd_q *); |
static enum cmd_retval cmd_confirm_before_exec(struct cmd *, |
|
struct cmdq_item *); |
|
|
static int cmd_confirm_before_callback(void *, const char *); |
static int cmd_confirm_before_callback(void *, const char *); |
static void cmd_confirm_before_free(void *); |
static void cmd_confirm_before_free(void *); |
|
|
const struct cmd_entry cmd_confirm_before_entry = { |
const struct cmd_entry cmd_confirm_before_entry = { |
.name = "confirm-before", |
.name = "confirm-before", |
|
|
}; |
}; |
|
|
static enum cmd_retval |
static enum cmd_retval |
cmd_confirm_before_exec(struct cmd *self, struct cmd_q *cmdq) |
cmd_confirm_before_exec(struct cmd *self, struct cmdq_item *item) |
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct cmd_confirm_before_data *cdata; |
struct cmd_confirm_before_data *cdata; |
struct client *c = cmdq->state.c; |
struct client *c = item->state.c; |
char *cmd, *copy, *new_prompt, *ptr; |
char *cmd, *copy, *new_prompt, *ptr; |
const char *prompt; |
const char *prompt; |
|
|
|
|
} |
} |
|
|
static enum cmd_retval |
static enum cmd_retval |
cmd_confirm_before_error(struct cmd_q *cmdq, void *data) |
cmd_confirm_before_error(struct cmdq_item *item, void *data) |
{ |
{ |
char *error = data; |
char *error = data; |
|
|
cmdq_error(cmdq, "%s", error); |
cmdq_error(item, "%s", error); |
free(error); |
free(error); |
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
|
struct cmd_confirm_before_data *cdata = data; |
struct cmd_confirm_before_data *cdata = data; |
struct client *c = cdata->client; |
struct client *c = cdata->client; |
struct cmd_list *cmdlist; |
struct cmd_list *cmdlist; |
struct cmd_q *new_cmdq; |
struct cmdq_item *new_item; |
char *cause; |
char *cause; |
|
|
if (c->flags & CLIENT_DEAD) |
if (c->flags & CLIENT_DEAD) |
|
|
|
|
if (cmd_string_parse(cdata->cmd, &cmdlist, NULL, 0, &cause) != 0) { |
if (cmd_string_parse(cdata->cmd, &cmdlist, NULL, 0, &cause) != 0) { |
if (cause != NULL) { |
if (cause != NULL) { |
new_cmdq = cmdq_get_callback(cmd_confirm_before_error, |
new_item = cmdq_get_callback(cmd_confirm_before_error, |
cause); |
cause); |
} else |
} else |
new_cmdq = NULL; |
new_item = NULL; |
} else { |
} else { |
new_cmdq = cmdq_get_command(cmdlist, NULL, NULL, 0); |
new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); |
cmd_list_free(cmdlist); |
cmd_list_free(cmdlist); |
} |
} |
|
|
if (new_cmdq != NULL) |
if (new_item != NULL) |
cmdq_append(c, new_cmdq); |
cmdq_append(c, new_item); |
|
|
return (0); |
return (0); |
} |
} |