summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/cmd.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2016-11-02 13:35:36 +0000
committernicm <nicm@openbsd.org>2016-11-02 13:35:36 +0000
commit550c27481db44f3bd8349ab33ba8ed5e198df1ef (patch)
tree41d116838892904432fa33de022bad8a6d856ca2 /usr.bin/tmux/cmd.c
parentconvert DSA and EC manuals from pod to mdoc (diff)
downloadwireguard-openbsd-550c27481db44f3bd8349ab33ba8ed5e198df1ef.tar.xz
wireguard-openbsd-550c27481db44f3bd8349ab33ba8ed5e198df1ef.zip
Make an empty state on error rather than leaving something partially
created (which now is now a fatal() later).
Diffstat (limited to 'usr.bin/tmux/cmd.c')
-rw-r--r--usr.bin/tmux/cmd.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/usr.bin/tmux/cmd.c b/usr.bin/tmux/cmd.c
index 32e9c0f67ba..fd54bcbfd98 100644
--- a/usr.bin/tmux/cmd.c
+++ b/usr.bin/tmux/cmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd.c,v 1.127 2016/10/21 13:51:59 nicm Exp $ */
+/* $OpenBSD: cmd.c,v 1.128 2016/11/02 13:35:36 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -451,8 +451,11 @@ cmd_prepare_state_flag(char c, const char *target, enum cmd_entry_flag flag,
log_debug("%s: flag %c %d %#x", __func__, c, flag, targetflags);
error = cmd_find_current(&current, item, targetflags);
- if (error != 0 && ~targetflags & CMD_FIND_QUIET)
- return (-1);
+ if (error != 0) {
+ if (~targetflags & CMD_FIND_QUIET)
+ return (-1);
+ cmd_find_clear_state(&current, NULL, 0);
+ }
if (!cmd_find_empty_state(&current) && !cmd_find_valid_state(&current))
fatalx("invalid current state");
@@ -467,8 +470,8 @@ cmd_prepare_state_flag(char c, const char *target, enum cmd_entry_flag flag,
case CMD_SESSION_WITHPANE:
error = cmd_find_target(fs, &current, item, target,
CMD_FIND_SESSION, targetflags);
- if (error != 0 && ~targetflags & CMD_FIND_QUIET)
- return (-1);
+ if (error != 0)
+ goto error;
break;
case CMD_MOVEW_R:
error = cmd_find_target(fs, &current, item, target,
@@ -482,21 +485,27 @@ cmd_prepare_state_flag(char c, const char *target, enum cmd_entry_flag flag,
case CMD_WINDOW_INDEX:
error = cmd_find_target(fs, &current, item, target,
CMD_FIND_WINDOW, targetflags);
- if (error != 0 && ~targetflags & CMD_FIND_QUIET)
- return (-1);
+ if (error != 0)
+ goto error;
break;
case CMD_PANE:
case CMD_PANE_CANFAIL:
case CMD_PANE_MARKED:
error = cmd_find_target(fs, &current, item, target,
CMD_FIND_PANE, targetflags);
- if (error != 0 && ~targetflags & CMD_FIND_QUIET)
- return (-1);
+ if (error != 0)
+ goto error;
break;
default:
fatalx("unknown %cflag %d", c, flag);
}
return (0);
+
+error:
+ if (~targetflags & CMD_FIND_QUIET)
+ return (-1);
+ cmd_find_clear_state(fs, NULL, 0);
+ return (0);
}
int