rc: make read not ignore interrupts/errors (again)

http://codereview.appspot.com/110042
This commit is contained in:
Michael Teichgräber 2009-08-23 13:25:44 -04:00
parent 375b78fb11
commit e066b12927

View file

@ -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;
}