diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-08-11 20:29:04 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-08-11 20:29:04 +0000 |
commit | 4ec8ade11c23eec4b652cdd7ea47ddf346b7be93 (patch) | |
tree | 09c10407ee9b41eedbad21365f308bdfea3dc5f8 | |
parent | ff65e3754565f1d878c70257e96f6aea09c1c90e (diff) | |
download | rtmux-4ec8ade11c23eec4b652cdd7ea47ddf346b7be93.tar.gz rtmux-4ec8ade11c23eec4b652cdd7ea47ddf346b7be93.tar.bz2 rtmux-4ec8ade11c23eec4b652cdd7ea47ddf346b7be93.zip |
Add a TTY_OPENED flag and tidy a little.
-rw-r--r-- | tmux.h | 1 | ||||
-rw-r--r-- | tty.c | 34 |
2 files changed, 18 insertions, 17 deletions
@@ -869,6 +869,7 @@ struct tty { #define TTY_ESCAPE 0x4 #define TTY_UTF8 0x8 #define TTY_STARTED 0x10 +#define TTY_OPENED 0x20 int flags; int term_flags; @@ -80,8 +80,11 @@ tty_open(struct tty *tty, const char *overrides, char **cause) tty->log_fd = -1; tty->term = tty_term_find(tty->termname, tty->fd, overrides, cause); - if (tty->term == NULL) - goto error; + if (tty->term == NULL) { + tty_close(tty); + return (-1); + } + tty->flags |= TTY_OPENED; tty->in = buffer_create(BUFSIZ); tty->out = buffer_create(BUFSIZ); @@ -95,12 +98,6 @@ tty_open(struct tty *tty, const char *overrides, char **cause) tty_fill_acs(tty); return (0); - -error: - close(tty->fd); - tty->fd = -1; - - return (-1); } void @@ -289,9 +286,6 @@ tty_get_acs(struct tty *tty, u_char ch) void tty_close(struct tty *tty) { - if (tty->fd == -1) - return; - if (tty->log_fd != -1) { close(tty->log_fd); tty->log_fd = -1; @@ -299,14 +293,20 @@ tty_close(struct tty *tty) tty_stop_tty(tty); - tty_term_free(tty->term); - tty_keys_free(tty); + if (tty->flags & TTY_OPENED) { + tty_term_free(tty->term); + tty_keys_free(tty); + + buffer_destroy(tty->in); + buffer_destroy(tty->out); - close(tty->fd); - tty->fd = -1; + tty->flags &= ~TTY_OPENED; + } - buffer_destroy(tty->in); - buffer_destroy(tty->out); + if (tty->fd != -1) { + close(tty->fd); + tty->fd = -1; + } } void |