libbb: introduce and use safe_waitpid (loops in EINTR)
*: use more approproate (shorter) versions of wait()

function                                             old     new   delta
safe_waitpid                                           -      48     +48
wait_any_nohang                                        -      17     +17
send_tree                                            365     369      +4
processorstop                                        432     435      +3
text_yank                                            110     108      -2
make_human_readable_str                              202     200      -2
crond_main                                          1368    1366      -2
handle_sigchld                                        49      43      -6
reapchild                                            166     159      -7
custom                                               260     250     -10
checkscript                                          191     177     -14
wait_nohang                                           17       -     -17
wait_pid                                              43       -     -43
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 2/7 up/down: 72/-103)           Total: -31 bytes

diff --git a/networking/httpd.c b/networking/httpd.c
index 87dc4b7..7294975 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1152,7 +1152,7 @@
 		count = safe_poll(pfd, 3, -1);
 		if (count <= 0) {
 #if 0
-			if (waitpid(pid, &status, WNOHANG) <= 0) {
+			if (safe_waitpid(pid, &status, WNOHANG) <= 0) {
 				/* Weird. CGI didn't exit and no fd's
 				 * are ready, yet poll returned?! */
 				continue;
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index 31911cd..68ea01a 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -944,7 +944,7 @@
 			execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, my_environ);
 			exit(127);
 		}
-		waitpid(child, &status, 0);
+		safe_waitpid(child, &status, 0);
 		if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
 			return 0;
 		}
@@ -1068,7 +1068,7 @@
 		fprintf(in, "%s\n", map->mapping[i]);
 	}
 	fclose(in);
-	waitpid(pid, &status, 0);
+	safe_waitpid(pid, &status, 0);
 
 	if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
 		/* If the mapping script exited successfully, try to
diff --git a/networking/inetd.c b/networking/inetd.c
index a9c9397..d643dc6 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -1161,7 +1161,7 @@
 	servtab_t *sep;
 
 	for (;;) {
-		pid = wait3(&status, WNOHANG, NULL);
+		pid = wait_any_nohang(&status);
 		if (pid <= 0)
 			break;
 		for (sep = servtab; sep; sep = sep->se_next)
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 108bbf4..0201d26 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -394,7 +394,7 @@
 
 	/* Looping: more than one child may have exited */
 	while (1) {
-		pid = waitpid(-1, NULL, WNOHANG);
+		pid = wait_any_nohang(NULL);
 		if (pid <= 0)
 			break;
 		ts = sessions;
diff --git a/networking/udhcp/script.c b/networking/udhcp/script.c
index 8a18898..71f0333 100644
--- a/networking/udhcp/script.c
+++ b/networking/udhcp/script.c
@@ -232,7 +232,7 @@
 		       name, NULL, envp);
 		bb_perror_msg_and_die("script %s failed", client_config.script);
 	}
-	waitpid(pid, NULL, 0);
+	safe_waitpid(pid, NULL, 0);
 	for (curr = envp; *curr; curr++)
 		free(*curr);
 	free(envp);