version 1.18, 2016/10/16 17:55:14 |
version 1.19, 2016/10/16 19:04:05 |
|
|
|
|
/* Control error callback. */ |
/* Control error callback. */ |
static enum cmd_retval |
static enum cmd_retval |
control_error(struct cmd_q *cmdq, void *data) |
control_error(struct cmdq_item *item, void *data) |
{ |
{ |
struct client *c = cmdq->client; |
struct client *c = item->client; |
char *error = data; |
char *error = data; |
|
|
cmdq_guard(cmdq, "begin", 1); |
cmdq_guard(item, "begin", 1); |
control_write(c, "parse error: %s", error); |
control_write(c, "parse error: %s", error); |
cmdq_guard(cmdq, "error", 1); |
cmdq_guard(item, "error", 1); |
|
|
free(error); |
free(error); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
|
void |
void |
control_callback(struct client *c, int closed, __unused void *data) |
control_callback(struct client *c, int closed, __unused void *data) |
{ |
{ |
char *line, *cause; |
char *line, *cause; |
struct cmd_list *cmdlist; |
struct cmd_list *cmdlist; |
struct cmd *cmd; |
struct cmd *cmd; |
struct cmd_q *cmdq; |
struct cmdq_item *item; |
|
|
if (closed) |
if (closed) |
c->flags |= CLIENT_EXIT; |
c->flags |= CLIENT_EXIT; |
|
|
} |
} |
|
|
if (cmd_string_parse(line, &cmdlist, NULL, 0, &cause) != 0) { |
if (cmd_string_parse(line, &cmdlist, NULL, 0, &cause) != 0) { |
cmdq = cmdq_get_callback(control_error, cause); |
item = cmdq_get_callback(control_error, cause); |
cmdq_append(c, cmdq); |
cmdq_append(c, item); |
} else { |
} else { |
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) |
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) |
cmd->flags |= CMD_CONTROL; |
cmd->flags |= CMD_CONTROL; |
cmdq = cmdq_get_command(cmdlist, NULL, NULL, 0); |
item = cmdq_get_command(cmdlist, NULL, NULL, 0); |
cmdq_append(c, cmdq); |
cmdq_append(c, item); |
cmd_list_free(cmdlist); |
cmd_list_free(cmdlist); |
} |
} |
|
|