summaryrefslogtreecommitdiffstats
path: root/cmd.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2016-10-13 12:01:11 +0100
committerThomas Adam <thomas@xteddy.org>2016-10-13 12:01:11 +0100
commit6270392d0448b9c949dcc6698962446ff5988383 (patch)
treedaa1be979c7b8fbd8e18c1fdcb0a9ba8d2fcc01e /cmd.c
parent6551f4bb3b651aa2dba77a98cc42828737b88306 (diff)
parent4d9e6ea3106ea06afa4583254549d525b31ed277 (diff)
Merge branch 'obsd-master'
Diffstat (limited to 'cmd.c')
-rw-r--r--cmd.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/cmd.c b/cmd.c
index 8668efa2..14ef7f21 100644
--- a/cmd.c
+++ b/cmd.c
@@ -455,12 +455,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:
@@ -557,6 +560,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);
}