From 4b2cbddf2fdd394d4a91735237b266f9b026123c Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Thu, 3 Sep 2026 22:42:12 +0000 Subject: Add waitpids, waitpids_nohang, refactor wait stuff Also fix fd_cat doc --- src/libstddjb/waitpids.c | 20 ++++++++++++++++++++ src/libstddjb/waitpids_nohang.c | 13 +++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/libstddjb/waitpids.c (limited to 'src/libstddjb') diff --git a/src/libstddjb/waitpids.c b/src/libstddjb/waitpids.c new file mode 100644 index 0000000..47c9c34 --- /dev/null +++ b/src/libstddjb/waitpids.c @@ -0,0 +1,20 @@ +/* ISC license. */ + +#include +#include + +#include + + /* + waitpids: blocking wait, don't reap anything unlisted + */ + +size_t waitpids (pid_t const *pids, size_t len, int *wstat) +{ + for (size_t i = 0 ; i < len ; i++) + { + pid_t r = wait_pid(pids[i], wstat) ; + if (r == (pid_t)-1) return i ; + } + return len ; +} diff --git a/src/libstddjb/waitpids_nohang.c b/src/libstddjb/waitpids_nohang.c index 23f03de..e731d4d 100644 --- a/src/libstddjb/waitpids_nohang.c +++ b/src/libstddjb/waitpids_nohang.c @@ -1,19 +1,24 @@ /* ISC license. */ +#include #include + #include /* waitpids_nohang (defined here): only reap pids, don't touch the rest */ -int waitpids_nohang (pid_t const *pids, unsigned int len, int *wstat) +int waitpids_nohang (pid_t const *pids, size_t len, int *wstat, size_t *n) { - for (unsigned int i = 0 ; i < len ; i++) + for (size_t i = 0 ; i < len ; i++) { pid_t r = waitpid_nohang(pids[i], wstat) ; - if (r == -1) return -1-i ; - else if (r == pids[i]) return 1+i ; + if (r == (pid_t)-1 || r == pids[i]) + { + *n = i ; + return r == (pid_t)-1 ? -1 : 1 ; + } } return 0 ; } -- cgit v1.3.1