summaryrefslogtreecommitdiff
path: root/system-bsd.c
diff options
context:
space:
mode:
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) {