- sed -e "s/char[[:space:]]*\*[[:space:]]*argv\[\]/char **argv/g"
[oweals/busybox.git] / miscutils / setsid.c
index 39be54621c1ae1adc9834c46409067836055e6dd..1abb54530ee3c8abc749040ebd7e6c738a2e9804 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 /*
  * setsid.c -- execute a command in a new session
  * Rick Sladkey <jrs@world.std.com>
  * - busyboxed
  */
 
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
 #include "busybox.h"
 
-int
-setsid_main(int argc, char *argv[]) {
-
-       if (argc < 2) {
+int setsid_main(int argc, char **argv);
+int setsid_main(int argc, char **argv)
+{
+       if (argc < 2)
                bb_show_usage();
-       }
 
-       if (getpgrp() == getpid()) {
-               switch(fork()){
-               case -1:
-                       bb_perror_msg_and_die("fork");
-               case 0:
-                       break;
-               default:        /* parent */
-                       exit(0);
-               }
-               /* child falls through */
-       }
+       /* Comment why is this necessary? */
+       if (getpgrp() == getpid())
+               forkexit_or_rexec(argv);
 
        setsid();  /* no error possible */
 
-       execvp(argv[1], argv + 1);
-
+       BB_EXECVP(argv[1], argv + 1);
        bb_perror_msg_and_die("%s", argv[1]);
-
 }