diff options
Diffstat (limited to 'system-bsd.c')
| -rw-r--r-- | system-bsd.c | 20 |
1 files changed, 20 insertions, 0 deletions
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) { |