hust testsuite: fix a false positive
[oweals/busybox.git] / miscutils / setsid.c
index 637081b6ccdad0b03212f51235f99bdea116f123..9bddc2fcf0ba6d69bad108567bcd1a0ce4fbddb8 100644 (file)
  */
 
 //usage:#define setsid_trivial_usage
-//usage:       "PROG ARGS"
+//usage:       "[-c] PROG ARGS"
 //usage:#define setsid_full_usage "\n\n"
 //usage:       "Run PROG in a new session. PROG will have no controlling terminal\n"
-//usage:       "and will not be affected by keyboard signals (Ctrl-C etc).\n"
-//usage:       "See setsid(2) for details."
+//usage:       "and will not be affected by keyboard signals (^C etc).\n"
+//usage:     "\n       -c      Set controlling terminal to stdin"
 
 #include "libbb.h"
 
 int setsid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int setsid_main(int argc UNUSED_PARAM, char **argv)
 {
-       if (!argv[1])
-               bb_show_usage();
+       unsigned opt;
+
+       opt_complementary = "-1"; /* at least one arg */
+       opt = getopt32(argv, "+c"); /* +: stop on first non-opt */
+       argv += optind;
 
        /* setsid() is allowed only when we are not a process group leader.
         * Otherwise our PID serves as PGID of some existing process group
@@ -61,6 +64,10 @@ int setsid_main(int argc UNUSED_PARAM, char **argv)
                setsid();
        }
 
-       argv++;
+       if (opt) {
+               /* -c: set (with stealing) controlling tty */
+               ioctl(0, TIOCSCTTY, 1);
+       }
+
        BB_EXECVP_or_die(argv);
 }