[git commit] setsid: implement -c

Denys Vlasenko vda.linux at googlemail.com
Sun Jan 17 00:10:53 UTC 2016


commit: http://git.busybox.net/busybox/commit/?id=ccf7f0e4d3aed3bd9f46a239d9033cd773e67ab8
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
setsid_main                                           53      96     +43
packed_usage                                       30846   30833     -13

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/setsid.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/miscutils/setsid.c b/miscutils/setsid.c
index 637081b..1b27377 100644
--- a/miscutils/setsid.c
+++ b/miscutils/setsid.c
@@ -15,19 +15,22 @@
  */
 
 //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");
+	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);
 }


More information about the busybox-cvs mailing list