From eab21e5857e7b19a06196ec7a9c197bc599560a0 Mon Sep 17 00:00:00 2001 From: tgoodwin Date: Wed, 18 Feb 1998 17:10:53 +0000 Subject: reinstate rc_wait (but right this time) --- system-bsd.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'system-bsd.c') diff --git a/system-bsd.c b/system-bsd.c index 1f62693..6bf7bb8 100644 --- a/system-bsd.c +++ b/system-bsd.c @@ -32,6 +32,7 @@ extern void writeall(int fd, char *buf, size_t remain) { extern int rc_read(int fd, char *buf, size_t n) { ssize_t r; + interrupt_happened = FALSE; if (!sigsetjmp(slowbuf.j, 1)) { slow = TRUE; @@ -49,6 +50,25 @@ extern int rc_read(int fd, char *buf, size_t n) { return r; } +static r = -1; +extern pid_t rc_wait(int *stat) { + interrupt_happened = FALSE; + if (!sigsetjmp(slowbuf.j, 1)) { + slow = TRUE; + if (!interrupt_happened) + r = wait(stat); + else + r = -2; + } else + r = -2; + slow = FALSE; + if (r == -2) { + errno = EINTR; + r = -1; + } + return r; +} + /* signal-safe readline wrapper */ #if READLINE extern char *rc_readline(char *prompt) { -- cgit v1.2.3