version 1.81, 2020/04/10 07:44:26 |
version 1.82, 2020/04/13 08:26:27 |
|
|
{ |
{ |
struct cmdq_item *item, *first = NULL, *last = NULL; |
struct cmdq_item *item, *first = NULL, *last = NULL; |
struct cmd *cmd; |
struct cmd *cmd; |
|
const struct cmd_entry *entry; |
struct cmdq_shared *shared = NULL; |
struct cmdq_shared *shared = NULL; |
u_int group = 0; |
u_int group, last_group = 0; |
|
|
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { |
cmd = cmd_list_first(cmdlist, &group); |
if (cmd->group != group) { |
while (cmd != NULL) { |
|
if (group != last_group) { |
shared = xcalloc(1, sizeof *shared); |
shared = xcalloc(1, sizeof *shared); |
if (current != NULL) |
if (current != NULL) |
cmd_find_copy_state(&shared->current, current); |
cmd_find_copy_state(&shared->current, current); |
|
|
cmd_find_clear_state(&shared->current, 0); |
cmd_find_clear_state(&shared->current, 0); |
if (m != NULL) |
if (m != NULL) |
memcpy(&shared->mouse, m, sizeof shared->mouse); |
memcpy(&shared->mouse, m, sizeof shared->mouse); |
group = cmd->group; |
last_group = group; |
} |
} |
|
entry = cmd_get_entry(cmd); |
|
|
item = xcalloc(1, sizeof *item); |
item = xcalloc(1, sizeof *item); |
xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item); |
xasprintf(&item->name, "[%s/%p]", entry->name, item); |
item->type = CMDQ_COMMAND; |
item->type = CMDQ_COMMAND; |
|
|
item->group = cmd->group; |
item->group = group; |
item->flags = flags; |
item->flags = flags; |
|
|
item->shared = shared; |
item->shared = shared; |
|
|
if (last != NULL) |
if (last != NULL) |
last->next = item; |
last->next = item; |
last = item; |
last = item; |
|
|
|
cmd = cmd_list_next(cmd, &group); |
} |
} |
return (first); |
return (first); |
} |
} |
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |
|
|
value = args_get(item->cmd->args, flag->flag); |
value = args_get(cmd_get_args(item->cmd), flag->flag); |
if (cmd_find_target(fs, item, value, flag->type, flag->flags) != 0) { |
if (cmd_find_target(fs, item, value, flag->type, flag->flags) != 0) { |
cmd_find_clear_state(fs, 0); |
cmd_find_clear_state(fs, 0); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
|
|
const char *name = cmdq_name(c); |
const char *name = cmdq_name(c); |
struct cmdq_shared *shared = item->shared; |
struct cmdq_shared *shared = item->shared; |
struct cmd *cmd = item->cmd; |
struct cmd *cmd = item->cmd; |
const struct cmd_entry *entry = cmd->entry; |
const struct cmd_entry *entry = cmd_get_entry(cmd); |
enum cmd_retval retval; |
enum cmd_retval retval; |
struct cmd_find_state *fsp, fs; |
struct cmd_find_state *fsp, fs; |
int flags; |
int flags; |
|
|
struct client *c = item->client; |
struct client *c = item->client; |
struct cmd *cmd = item->cmd; |
struct cmd *cmd = item->cmd; |
va_list ap; |
va_list ap; |
char *msg; |
char *msg, *tmp; |
char *tmp; |
const char *file; |
|
u_int line; |
|
|
va_start(ap, fmt); |
va_start(ap, fmt); |
xvasprintf(&msg, fmt, ap); |
xvasprintf(&msg, fmt, ap); |
|
|
|
|
log_debug("%s: %s", __func__, msg); |
log_debug("%s: %s", __func__, msg); |
|
|
if (c == NULL) |
if (c == NULL) { |
cfg_add_cause("%s:%u: %s", cmd->file, cmd->line, msg); |
cmd_get_source(cmd, &file, &line); |
else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) { |
cfg_add_cause("%s:%u: %s", file, line, msg); |
|
} else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) { |
if (~c->flags & CLIENT_UTF8) { |
if (~c->flags & CLIENT_UTF8) { |
tmp = msg; |
tmp = msg; |
msg = utf8_sanitize(tmp); |
msg = utf8_sanitize(tmp); |