diff options
Diffstat (limited to 'cmd.c')
-rw-r--r-- | cmd.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -456,12 +456,15 @@ cmd_prepare_state_flag(char c, const char *target, enum cmd_entry_flag flag, current = &parent->state.tflag; else if (c == 's') current = &parent->state.sflag; - } else { + } + 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)) + fatalx("invalid current state"); switch (flag) { case CMD_NONE: @@ -558,6 +561,13 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq, struct cmd_q *parent) if (error != 0) return (error); + if (!cmd_find_empty_state(&state->tflag) && + !cmd_find_valid_state(&state->tflag)) + fatalx("invalid -t state"); + if (!cmd_find_empty_state(&state->sflag) && + !cmd_find_valid_state(&state->sflag)) + fatalx("invalid -s state"); + return (0); } |