From e066b12927b496c9f3b442a5928bacfb48e6334e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Teichgr=C3=A4ber?= Date: Sun, 23 Aug 2009 13:25:44 -0400 Subject: rc: make read not ignore interrupts/errors (again) http://codereview.appspot.com/110042 --- src/cmd/rc/unixcrap.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3