aboutsummaryrefslogtreecommitdiff
path: root/termkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'termkey.c')
-rw-r--r--termkey.c16
1 files 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;
}