=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd.c,v retrieving revision 1.124 retrieving revision 1.125 diff -u -r1.124 -r1.125 --- src/usr.bin/tmux/cmd.c 2016/10/13 10:01:49 1.124 +++ src/usr.bin/tmux/cmd.c 2016/10/16 17:55:14 1.125 @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd.c,v 1.124 2016/10/13 10:01:49 nicm Exp $ */ +/* $OpenBSD: cmd.c,v 1.125 2016/10/16 17:55:14 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -390,12 +390,11 @@ static int cmd_prepare_state_flag(char c, const char *target, enum cmd_entry_flag flag, - struct cmd_q *cmdq, struct cmd_q *parent) + struct cmd_q *cmdq) { int targetflags, error; struct cmd_find_state *fs = NULL; - struct cmd_find_state *current = NULL; - struct cmd_find_state tmp; + struct cmd_find_state current; if (flag == CMD_NONE || flag == CMD_CLIENT || @@ -449,21 +448,12 @@ default: fatalx("unknown %cflag %d", c, flag); } - log_debug("%s: flag %c %d %#x", __func__, c, flag, targetflags); - if (parent != NULL) { - if (c == 't') - current = &parent->state.tflag; - else if (c == 's') - current = &parent->state.sflag; - } - if (current == NULL || !cmd_find_valid_state(current)) { - error = cmd_find_current(&tmp, cmdq, targetflags); - if (error != 0 && ~targetflags & CMD_FIND_QUIET) - return (-1); - current = &tmp; - } - if (!cmd_find_empty_state(current) && !cmd_find_valid_state(current)) + + error = cmd_find_current(¤t, cmdq, targetflags); + if (error != 0 && ~targetflags & CMD_FIND_QUIET) + return (-1); + if (!cmd_find_empty_state(¤t) && !cmd_find_valid_state(¤t)) fatalx("invalid current state"); switch (flag) { @@ -475,13 +465,13 @@ case CMD_SESSION_CANFAIL: case CMD_SESSION_PREFERUNATTACHED: case CMD_SESSION_WITHPANE: - error = cmd_find_target(fs, current, cmdq, target, + error = cmd_find_target(fs, ¤t, cmdq, target, CMD_FIND_SESSION, targetflags); if (error != 0 && ~targetflags & CMD_FIND_QUIET) return (-1); break; case CMD_MOVEW_R: - error = cmd_find_target(fs, current, cmdq, target, + error = cmd_find_target(fs, ¤t, cmdq, target, CMD_FIND_SESSION, CMD_FIND_QUIET); if (error == 0) break; @@ -490,7 +480,7 @@ case CMD_WINDOW_CANFAIL: case CMD_WINDOW_MARKED: case CMD_WINDOW_INDEX: - error = cmd_find_target(fs, current, cmdq, target, + error = cmd_find_target(fs, ¤t, cmdq, target, CMD_FIND_WINDOW, targetflags); if (error != 0 && ~targetflags & CMD_FIND_QUIET) return (-1); @@ -498,7 +488,7 @@ case CMD_PANE: case CMD_PANE_CANFAIL: case CMD_PANE_MARKED: - error = cmd_find_target(fs, current, cmdq, target, + error = cmd_find_target(fs, ¤t, cmdq, target, CMD_FIND_PANE, targetflags); if (error != 0 && ~targetflags & CMD_FIND_QUIET) return (-1); @@ -510,14 +500,14 @@ } int -cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq, struct cmd_q *parent) +cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq) { - const struct cmd_entry *entry = cmd->entry; - struct cmd_state *state = &cmdq->state; - char *tmp; - enum cmd_entry_flag flag; - const char *s; - int error; + const struct cmd_entry *entry = cmd->entry; + struct cmd_state *state = &cmdq->state; + char *tmp; + enum cmd_entry_flag flag; + const char *s; + int error; tmp = cmd_print(cmd); log_debug("preparing state for %s (client %p)", tmp, cmdq->client); @@ -546,18 +536,19 @@ state->c = cmd_find_client(cmdq, s, 1); break; } + log_debug("using client %p", state->c); s = args_get(cmd->args, 't'); log_debug("preparing -t state: target %s", s == NULL ? "none" : s); - error = cmd_prepare_state_flag('t', s, entry->tflag, cmdq, parent); + error = cmd_prepare_state_flag('t', s, entry->tflag, cmdq); if (error != 0) return (error); s = args_get(cmd->args, 's'); log_debug("preparing -s state: target %s", s == NULL ? "none" : s); - error = cmd_prepare_state_flag('s', s, entry->sflag, cmdq, parent); + error = cmd_prepare_state_flag('s', s, entry->sflag, cmdq); if (error != 0) return (error);