aboutsummaryrefslogtreecommitdiff
path: root/tty.c
diff options
context:
space:
mode:
Diffstat (limited to 'tty.c')
-rw-r--r--tty.c34
1 files changed, 17 insertions, 17 deletions
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