Discussion:
[BusyBox] New applet: openvt
Quy Tonthat
2003-07-19 13:33:46 UTC
Permalink
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy

-------------- next part --------------
--- ./usage.h- Sat Apr 27 11:31:31 2002
+++ ./usage.h Fri Aug 9 02:22:43 2002
@@ -1860,3 +1860,10 @@
"FILE"
#define zcat_full_usage \
"Uncompress to stdout."
+
+#define openvt_trivial_usage \
+ "<vtnum> <COMMAND> [ARGS...]"
+#define openvt_full_usage \
+ "Start a command on a new virtual terminal"
+#define openvt_example_usage \
+ "openvt 2 /bin/ash\n"
--- ./Config.h- Sat Apr 6 14:22:15 2002
+++ ./Config.h Fri Aug 9 01:04:51 2002
@@ -87,6 +87,7 @@
#define BB_MV
//#define BB_NC
//#define BB_NSLOOKUP
+#define BB_OPENVT
#define BB_PIDOF
//#define BB_PING
//#define BB_PIVOT_ROOT
--- ./openvt.c- Tue Sep 3 17:18:13 2002
+++ ./openvt.c Sat Sep 7 00:02:52 2002
@@ -0,0 +1,76 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * openvt.c - open a vt to run a command.
+ *
+ * busyboxed by Quy Tonthat <***@signal3.com>
+ */
+
+/* getopt not needed */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/types.h>
+#include "busybox.h"
+
+#define VTNAME "/dev/tty%d"
+
+int openvt_main(int argc, char **argv)
+{
+ int pid;
+ int fd;
+ int vtno;
+ char vtname[sizeof VTNAME + 2];
+ char * cmd = NULL;
+ char * cmd_args = NULL;
+
+ if (argc < 3)
+ show_usage();
+ if (!isdigit(argv[1][0]))
+ show_usage();
+
+ vtno = (int) atol(argv[1]);
+ /* if (vtno <= 0 || vtno > 63) */
+ if (vtno <= 0 || vtno > 12)
+ error_msg_and_die("Illegal vt number (%d)", vtno);
+ sprintf(vtname, VTNAME, vtno);
+
+ cmd = argv[2];
+ cmd_args = xmalloc(80);
+ cmd_args[0] = '\0';
+
+ if((pid = fork()) == 0) {
+ /* leave current vt */
+#ifdef ESIX_5_3_2_D
+ if (setpgrp() < 0) {
+#else
+ if (setsid() < 0) {
+#endif
+ perror_msg_and_die("Unable to set new session");
+ }
+ close(0); /* so that new vt becomes stdin */
+
+ /* and grab new one */
+ if ((fd = open(vtname, O_RDWR)) == -1)
+ perror_msg_and_die("could not open %s", vtname);
+ close(1);
+ close(2);
+ dup(fd);
+ dup(fd);
+ execvp(cmd, &argv[2]);
+ /*execlp(cmd, cmd_args);*/
+ _exit(1);
+ }
+ return EXIT_SUCCESS;
+}
+
+
+/*
+Local Variables:
+c-file-style: "linux"
+c-basic-offset: 4
+tab-width: 4
+End:
+*/
--- ./applets.h- Wed Mar 20 13:10:21 2002
+++ ./applets.h Fri Aug 9 01:03:19 2002
@@ -299,6 +299,9 @@
#ifdef BB_NSLOOKUP
APPLET(nslookup, nslookup_main, _BB_DIR_USR_BIN)
#endif
+#ifdef BB_OPENVT
+ APPLET(openvt, openvt_main, _BB_DIR_USR_BIN)
+#endif
#ifdef BB_PIDOF
APPLET(pidof, pidof_main, _BB_DIR_BIN)
#endif
Glenn McGrath
2003-07-19 13:33:47 UTC
Permalink
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
Im wondering, what is the purpose of the two dup(fd); statements in this
instance ?

+ /* and grab new one */
+ if ((fd = open(vtname, O_RDWR)) == -1)
+ perror_msg_and_die("could not open %s", vtname);
+ close(1);
+ close(2);
+ dup(fd);
+ dup(fd);
+ execvp(cmd, &argv[2]);
+ /*execlp(cmd, cmd_args);*/
+ _exit(1);
+ }
+ return EXIT_SUCCESS;
+}



Glenn
Quy Tonthat
2003-07-19 13:33:47 UTC
Permalink
Post by Glenn McGrath
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
Im wondering, what is the purpose of the two dup(fd); statements in this
instance ?
+ /* and grab new one */
+ if ((fd = open(vtname, O_RDWR)) == -1)
+ perror_msg_and_die("could not open %s", vtname);
+ close(1);
+ close(2);
+ dup(fd);
+ dup(fd);
+ execvp(cmd, &argv[2]);
+ /*execlp(cmd, cmd_args);*/
+ _exit(1);
+ }
+ return EXIT_SUCCESS;
+}
Glenn
Just to make sure stdout and stderr of the child will go to the vt.
Quy
Quy Tonthat
2002-09-16 00:00:03 UTC
Permalink
Post by Glenn McGrath
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
Im wondering, what is the purpose of the two dup(fd); statements in this
instance ?
+ /* and grab new one */
+ if ((fd = open(vtname, O_RDWR)) == -1)
+ perror_msg_and_die("could not open %s", vtname);
+ close(1);
+ close(2);
+ dup(fd);
+ dup(fd);
+ execvp(cmd, &argv[2]);
+ /*execlp(cmd, cmd_args);*/
+ _exit(1);
+ }
+ return EXIT_SUCCESS;
+}
Glenn
Just to make sure stdout and stderr of the child will go to the vt.
Quy
Glenn McGrath
2003-07-19 13:33:47 UTC
Permalink
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
I commited it to unstable, i should have checked beforehand but it doesnt
mention the license at the top of openvt.c, is it safe to assume its GPL
v2 or later ?



Glenn
Quy Tonthat
2003-07-19 13:33:47 UTC
Permalink
Post by Glenn McGrath
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
I commited it to unstable, i should have checked beforehand but it doesnt
mention the license at the top of openvt.c, is it safe to assume its GPL
v2 or later ?
Glenn
Yes, it's GPL V2.
Sorry for missing the license header. Feel free to add it in if you like.

Quy
Quy Tonthat
2002-09-16 02:41:03 UTC
Permalink
Post by Glenn McGrath
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
I commited it to unstable, i should have checked beforehand but it doesnt
mention the license at the top of openvt.c, is it safe to assume its GPL
v2 or later ?
Glenn
Yes, it's GPL V2.
Sorry for missing the license header. Feel free to add it in if you like.

Quy

Quy Tonthat
2002-09-06 13:29:03 UTC
Permalink
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: openvt-020906.diff
Url: http://lists.busybox.net/pipermail/busybox/attachments/20020906/c35699ae/attachment.diff
Glenn McGrath
2002-09-15 17:47:03 UTC
Permalink
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
Im wondering, what is the purpose of the two dup(fd); statements in this
instance ?

+ /* and grab new one */
+ if ((fd = open(vtname, O_RDWR)) == -1)
+ perror_msg_and_die("could not open %s", vtname);
+ close(1);
+ close(2);
+ dup(fd);
+ dup(fd);
+ execvp(cmd, &argv[2]);
+ /*execlp(cmd, cmd_args);*/
+ _exit(1);
+ }
+ return EXIT_SUCCESS;
+}



Glenn
Glenn McGrath
2002-09-16 02:27:03 UTC
Permalink
On Sat, 07 Sep 2002 00:27:20 +1000
Post by Quy Tonthat
Hi,
Just a simple implementation of open that starts a vt on the console.
I often use it for init to start up shell's on console. Hope it can be
any use
for someone else.
Quy
I commited it to unstable, i should have checked beforehand but it doesnt
mention the license at the top of openvt.c, is it safe to assume its GPL
v2 or later ?



Glenn
Loading...