aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstddjb/waitpids_nohang.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstddjb/waitpids_nohang.c')
-rw-r--r--src/libstddjb/waitpids_nohang.c13
1 files changed, 9 insertions, 4 deletions
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 <unistd.h>
#include <sys/wait.h>
+
#include <skalibs/djbunix.h>
/*
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 ;
}