aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-08-11 20:29:04 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-08-11 20:29:04 +0000
commit4ec8ade11c23eec4b652cdd7ea47ddf346b7be93 (patch)
tree09c10407ee9b41eedbad21365f308bdfea3dc5f8
parentff65e3754565f1d878c70257e96f6aea09c1c90e (diff)
downloadrtmux-4ec8ade11c23eec4b652cdd7ea47ddf346b7be93.tar.gz
rtmux-4ec8ade11c23eec4b652cdd7ea47ddf346b7be93.tar.bz2
rtmux-4ec8ade11c23eec4b652cdd7ea47ddf346b7be93.zip
Add a TTY_OPENED flag and tidy a little.
-rw-r--r--tmux.h1
-rw-r--r--tty.c34
2 files changed, 18 insertions, 17 deletions
diff --git a/tmux.h b/tmux.h
index 060d2bd1..53590eaf 100644
--- a/tmux.h
+++ b/tmux.h
@@ -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;
diff --git a/tty.c b/tty.c
index 1584444e..1da0c2ff 100644
--- a/tty.c
+++ b/tty.c
@@ -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