Commit Diff


commit - 0cc1faf015a253ef64b97a8453b6fc959c0ee512
commit + c3ae85a004c8714fc653629a983327d9a15b36da
blob - c2e9d7b4698e08665a504ed1721f48523e93f8b2
blob + 907ba86fbf6b39a9b095a54d475fafc0a965b6aa
--- src/cmd/rc/io.c
+++ src/cmd/rc/io.c
@@ -1,4 +1,5 @@
 #include <limits.h>
+#include <errno.h>
 #include "rc.h"
 #include "exec.h"
 #include "io.h"
@@ -257,7 +258,15 @@ int
 emptybuf(io *f)
 {
 	int n;
-	if(f->fd==-1 || (n = Read(f->fd, f->buf, NBUF))<=0) return EOF;
+	if(f->fd==-1)
+		return EOF;
+Loop:
+	errno = 0;
+	n = Read(f->fd, f->buf, NBUF);
+	if(n < 0 && errno == EINTR)
+		goto Loop;
+	if(n <= 0)
+		return EOF;
 	f->bufp = f->buf;
 	f->ebuf = f->buf+n;
 	return *f->bufp++&0xff;