Accept tcgetattr/tcsetattr failure, fixes problems with fatal() if the

terminal disappears while locked.
pull/1/head
Nicholas Marriott 2011-01-29 08:39:43 +00:00
parent b6bb350289
commit 9fc2c34a3b
1 changed files with 3 additions and 6 deletions

9
tty.c
View File

@ -166,15 +166,13 @@ tty_start_tty(struct tty *tty)
{ {
struct termios tio; struct termios tio;
if (tty->fd == -1) if (tty->fd == -1 || tcgetattr(tty->fd, &tty->tio) != 0)
return; return;
setblocking(tty->fd, 0); setblocking(tty->fd, 0);
bufferevent_enable(tty->event, EV_READ|EV_WRITE); bufferevent_enable(tty->event, EV_READ|EV_WRITE);
if (tcgetattr(tty->fd, &tty->tio) != 0)
fatal("tcgetattr failed");
memcpy(&tio, &tty->tio, sizeof tio); memcpy(&tio, &tty->tio, sizeof tio);
tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|IMAXBEL|ISTRIP); tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|IMAXBEL|ISTRIP);
tio.c_iflag |= IGNBRK; tio.c_iflag |= IGNBRK;
@ -183,9 +181,8 @@ tty_start_tty(struct tty *tty)
ECHOPRT|ECHOKE|ECHOCTL|ISIG); ECHOPRT|ECHOKE|ECHOCTL|ISIG);
tio.c_cc[VMIN] = 1; tio.c_cc[VMIN] = 1;
tio.c_cc[VTIME] = 0; tio.c_cc[VTIME] = 0;
if (tcsetattr(tty->fd, TCSANOW, &tio) != 0) if (tcsetattr(tty->fd, TCSANOW, &tio) == 0)
fatal("tcsetattr failed"); tcflush(tty->fd, TCIOFLUSH);
tcflush(tty->fd, TCIOFLUSH);
tty_putcode(tty, TTYC_SMCUP); tty_putcode(tty, TTYC_SMCUP);