diff options
author | 2016-11-02 13:35:36 +0000 | |
---|---|---|
committer | 2016-11-02 13:35:36 +0000 | |
commit | 550c27481db44f3bd8349ab33ba8ed5e198df1ef (patch) | |
tree | 41d116838892904432fa33de022bad8a6d856ca2 /usr.bin/tmux/cmd.c | |
parent | convert DSA and EC manuals from pod to mdoc (diff) | |
download | wireguard-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.c | 27 |
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(¤t, 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(¤t, NULL, 0); + } if (!cmd_find_empty_state(¤t) && !cmd_find_valid_state(¤t)) 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, ¤t, 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, ¤t, 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, ¤t, 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, ¤t, 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 |