summaryrefslogtreecommitdiff
path: root/system-bsd.c
diff options
context:
space:
mode:
authortgoodwin <tgoodwin>1998-02-18 17:10:53 +0000
committerToby Goodwin <toby@paccrat.org>2015-05-16 21:23:04 +0100
commiteab21e5857e7b19a06196ec7a9c197bc599560a0 (patch)
treee561d49b929546eae5d94e6bdcb4730d6ee5a948 /system-bsd.c
parentbb225300e267a55fb40cf082de04567129652bda (diff)
reinstate rc_wait (but right this time)
Diffstat (limited to 'system-bsd.c')
-rw-r--r--system-bsd.c20
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) {