From ab99ca723136dfbd689154bd179bf91e749ceaa9 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 3 Nov 2001 13:12:15 +0000 Subject: [PATCH] Quit if terminal gets lost. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1960 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/fe-text/gui-readline.c | 6 ++++++ src/fe-text/term-terminfo.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c index 61523d9d..ac166f2d 100644 --- a/src/fe-text/gui-readline.c +++ b/src/fe-text/gui-readline.c @@ -331,6 +331,12 @@ void readline(void) int ret, i; ret = term_gets(buffer, sizeof(buffer)); + if (ret == -1) { + /* lost terminal */ + signal_emit("command quit", 1, "Lost terminal"); + return; + } + for (i = 0; i < ret; i++) handle_key(buffer[i]); } diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c index 85ac193b..88296131 100644 --- a/src/fe-text/term-terminfo.c +++ b/src/fe-text/term-terminfo.c @@ -328,6 +328,14 @@ void term_stop(void) int term_gets(unsigned char *buffer, int size) { + int ret; + /* fread() doesn't work */ - return read(fileno(current_term->in), buffer, size); + ret = read(fileno(current_term->in), buffer, size); + if (ret == 0) + ret = -1;/* EOF - terminal got lost */ + else if (ret == -1 && (errno == EINTR || errno == EAGAIN)) + ret = 0; + + return ret; }