From 03417610742c4a67bb0345a8fa0fb4e13dee07f7 Mon Sep 17 00:00:00 2001 From: rsc Date: Mon, 27 Dec 2004 19:11:21 +0000 Subject: add awaitfor and waitfor --- src/lib9/await.c | 14 ++++++++++---- src/lib9/wait.c | 23 +++++++++++++++++------ 2 files changed, 27 insertions(+), 10 deletions(-) (limited to 'src/lib9') diff --git a/src/lib9/await.c b/src/lib9/await.c index b7d9265a..afc5f9e3 100644 --- a/src/lib9/await.c +++ b/src/lib9/await.c @@ -74,7 +74,7 @@ _p9strsig(char *s) } static int -_await(char *str, int n, int opt) +_await(int pid4, char *str, int n, int opt) { int pid, status, cd; struct rusage ru; @@ -82,7 +82,7 @@ _await(char *str, int n, int opt) ulong u, s; for(;;){ - pid = wait3(&status, opt, &ru); + pid = wait4(pid4, &status, opt, &ru); if(pid <= 0) return -1; u = ru.ru_utime.tv_sec*1000+((ru.ru_utime.tv_usec+500)/1000); @@ -108,12 +108,18 @@ _await(char *str, int n, int opt) int await(char *str, int n) { - return _await(str, n, 0); + return _await(-1, str, n, 0); } int awaitnohang(char *str, int n) { - return _await(str, n, WNOHANG); + return _await(-1, str, n, WNOHANG); +} + +int +awaitfor(int pid, char *str, int n) +{ + return _await(pid, str, n, 0); } diff --git a/src/lib9/wait.c b/src/lib9/wait.c index 856f85c0..31d8c02a 100644 --- a/src/lib9/wait.c +++ b/src/lib9/wait.c @@ -2,13 +2,12 @@ #include static Waitmsg* -_wait(int nohang) +_wait(int n, char *buf) { - int n, l; - char buf[512], *fld[5]; + int l; + char *fld[5]; Waitmsg *w; - n = (nohang ? awaitnohang : await)(buf, sizeof buf-1); if(n <= 0) return nil; buf[n] = '\0'; @@ -32,12 +31,24 @@ _wait(int nohang) Waitmsg* wait(void) { - return _wait(0); + char buf[256]; + + return _wait(await(buf, sizeof buf-1), buf); } Waitmsg* waitnohang(void) { - return _wait(1); + char buf[256]; + + return _wait(awaitnohang(buf, sizeof buf-1), buf); +} + +Waitmsg* +waitfor(int pid) +{ + char buf[256]; + + return _wait(awaitfor(pid, buf, sizeof buf-1), buf); } -- cgit v1.2.3