diff options
author | Russ Cox <rsc@swtch.com> | 2021-01-14 09:59:54 -0500 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2021-01-14 09:59:54 -0500 |
commit | c3ae85a004c8714fc653629a983327d9a15b36da (patch) | |
tree | 11419902559d133c4efcf8a6ca84f5e283bf3074 /src/cmd/rc | |
parent | 0cc1faf015a253ef64b97a8453b6fc959c0ee512 (diff) | |
download | plan9port-c3ae85a004c8714fc653629a983327d9a15b36da.tar.gz plan9port-c3ae85a004c8714fc653629a983327d9a15b36da.tar.bz2 plan9port-c3ae85a004c8714fc653629a983327d9a15b36da.zip |
rc: do not exit on EINTR from read
This happens if lldb attaches to rc.
Diffstat (limited to 'src/cmd/rc')
-rw-r--r-- | src/cmd/rc/io.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/cmd/rc/io.c b/src/cmd/rc/io.c index c2e9d7b4..907ba86f 100644 --- a/src/cmd/rc/io.c +++ b/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; |