diff options
| author | tgoodwin <tgoodwin> | 1998-02-18 17:10:53 +0000 |
|---|---|---|
| committer | Toby Goodwin <toby@paccrat.org> | 2015-05-16 21:23:04 +0100 |
| commit | eab21e5857e7b19a06196ec7a9c197bc599560a0 (patch) | |
| tree | e561d49b929546eae5d94e6bdcb4730d6ee5a948 /system-bsd.c | |
| parent | bb225300e267a55fb40cf082de04567129652bda (diff) | |
reinstate rc_wait (but right this time)
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) { |