aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/rc/unixcrap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/rc/unixcrap.c')
-rw-r--r--src/cmd/rc/unixcrap.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/cmd/rc/unixcrap.c b/src/cmd/rc/unixcrap.c
index d71cbc38..9393fb23 100644
--- a/src/cmd/rc/unixcrap.c
+++ b/src/cmd/rc/unixcrap.c
@@ -222,8 +222,11 @@ readnb(int fd, char *buf, long cnt)
int flgs;
didreset = 0;
- while((n = read(fd, buf, cnt)) == -1)
- if(!didreset && errno == EAGAIN){
+again:
+ n = read(fd, buf, cnt);
+ if(n == -1)
+ if(errno == EAGAIN){
+ if(!didreset){
if((flgs = fcntl(fd, F_GETFL, 0)) == -1)
return -1;
flgs &= ~O_NONBLOCK;
@@ -231,6 +234,8 @@ readnb(int fd, char *buf, long cnt)
return -1;
didreset = 1;
}
+ goto again;
+ }
return n;
}