From 76147e92d4bd12c27ef56d8ab9b1203ee3eeb927 Mon Sep 17 00:00:00 2001 From: Paul LeoNerd Evans Date: Mon, 3 Nov 2008 21:08:34 +0000 Subject: Better handling in termkey_waitkey() of EOF conditions --- termkey.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/termkey.c b/termkey.c index b969e83..7b42d14 100644 --- a/termkey.c +++ b/termkey.c @@ -510,17 +510,25 @@ termkey_result termkey_waitkey(termkey_t *tk, termkey_key *key) case TERMKEY_RES_AGAIN: { + if(tk->is_closed) + // We're closed now. Never going to get more bytes so just go with + // what we have + return termkey_getkey_force(tk, key); + struct pollfd fd; fd.fd = tk->fd; fd.events = POLLIN; - int pollres = poll(&fd, 1, tk->waittime); + poll(&fd, 1, tk->waittime); - if(pollres == 0) - return termkey_getkey_force(tk, key); + if(fd.revents & (POLLIN|POLLHUP|POLLERR)) + ret = termkey_advisereadable(tk); + else + ret = TERMKEY_RES_NONE; - termkey_advisereadable(tk); + if(ret == TERMKEY_RES_NONE) + return termkey_getkey_force(tk, key); } break; } -- cgit v1.2.3-70-g09d2