Compatibility fixes:

grep: support -z
find: support --mindepth
  together +45 bytes
cpio: support -p (configurable, +230 bytes)
libbb: tweaks for cpio

diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c
index 50dc3af..f64239a 100644
--- a/libbb/vfork_daemon_rexec.c
+++ b/libbb/vfork_daemon_rexec.c
@@ -251,35 +251,33 @@
 	bb_perror_msg_and_die("exec %s", bb_busybox_exec_path);
 }
 
-void FAST_FUNC forkexit_or_rexec(char **argv)
+pid_t FAST_FUNC fork_or_rexec(char **argv)
 {
 	pid_t pid;
 	/* Maybe we are already re-execed and come here again? */
 	if (re_execed)
-		return;
+		return 0; /* child */
 
 	pid = vfork();
 	if (pid < 0) /* wtf? */
 		bb_perror_msg_and_die("vfork");
 	if (pid) /* parent */
-		exit(EXIT_SUCCESS);
+		return pid;
 	/* child - re-exec ourself */
 	re_exec(argv);
 }
 #else
 /* Dance around (void)...*/
-#undef forkexit_or_rexec
-void FAST_FUNC forkexit_or_rexec(void)
+#undef fork_or_rexec
+pid_t FAST_FUNC fork_or_rexec(void)
 {
 	pid_t pid;
 	pid = fork();
 	if (pid < 0) /* wtf? */
 		bb_perror_msg_and_die("fork");
-	if (pid) /* parent */
-		exit(EXIT_SUCCESS);
-	/* child */
+	return pid;
 }
-#define forkexit_or_rexec(argv) forkexit_or_rexec()
+#define fork_or_rexec(argv) fork_or_rexec()
 #endif
 
 /* Due to a #define in libbb.h on MMU systems we actually have 1 argument -
@@ -310,7 +308,8 @@
 		fd = dup(fd); /* have 0,1,2 open at least to /dev/null */
 
 	if (!(flags & DAEMON_ONLY_SANITIZE)) {
-		forkexit_or_rexec(argv);
+		if (fork_or_rexec(argv))
+			exit(EXIT_SUCCESS); /* parent */
 		/* if daemonizing, make sure we detach from stdio & ctty */
 		setsid();
 		dup2(fd, 0);