summaryrefslogtreecommitdiff
path: root/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'input.c')
-rw-r--r--input.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/input.c b/input.c
index f59f29e..0f649e4 100644
--- a/input.c
+++ b/input.c
@@ -117,10 +117,18 @@ static int fdgchar() {
do {
r = rc_read(istack->fd, inbuf + 2, BUFSIZE);
sigchk();
- if (errno == EAGAIN) {
+ switch (errno) {
+ case EAGAIN:
if (!makeblocking(istack->fd))
panic("not O_NONBLOCK");
errno = EINTR;
+ break;
+ case EIO:
+ if (makesamepgrp(istack->fd))
+ errno = EINTR;
+ else
+ errno = EIO;
+ break;
}
} while (r < 0 && errno == EINTR);
if (r < 0) {