changeset 1241:3c855d5a75be

openvt tries opening several devices to get an fd that points to the current console, without a need for read or write permissions. O_RDWR implies that both O_RDONLY and O_WRONLY would work, so skip it. Reindent.
author Isaac Dunham <ibid.ag@gmail.com>
date Thu, 03 Apr 2014 22:43:28 -0500
parents 0d295a46f853
children 2014f64a141b
files toys/pending/deallocvt.c toys/pending/openvt.c
diffstat 2 files changed, 88 insertions(+), 91 deletions(-) [+]
line wrap: on
line diff
--- a/toys/pending/deallocvt.c	Thu Apr 03 18:01:44 2014 -0500
+++ b/toys/pending/deallocvt.c	Thu Apr 03 22:43:28 2014 -0500
@@ -8,13 +8,13 @@
 
 config DEALLOCVT
   bool "deallocvt"
-	depends on OPENVT
+  depends on OPENVT
   default n
   help
-		usage: deallocvt [N]
+    usage: deallocvt [N]
 
-		Deallocate unused virtual terminal /dev/ttyN
-		default value of N is 0, deallocate all unused consoles
+    Deallocate unused virtual terminal /dev/ttyN
+    default value of N is 0, deallocate all unused consoles
 */
 
 #include "toys.h"
@@ -22,16 +22,16 @@
 
 void deallocvt_main(void)
 {
-	int fd;
+  int fd;
 
-	// 0 : deallocate all unused consoles
-	int vt_num = 0;
+  // 0 : deallocate all unused consoles
+  int vt_num = 0;
 
-	if (toys.optargs[0])
-		vt_num = atolx_range(toys.optargs[0], 1, 63);
+  if (toys.optargs[0])
+    vt_num = atolx_range(toys.optargs[0], 1, 63);
 
-	fd = find_console_fd();
-	if (fd < 0)	error_exit("can't open console");
+  fd = find_console_fd();
+  if (fd < 0)  error_exit("can't open console");
 
-	xioctl(fd, VT_DISALLOCATE, (void *)(ptrdiff_t)vt_num);
+  xioctl(fd, VT_DISALLOCATE, (void *)(ptrdiff_t)vt_num);
 }
--- a/toys/pending/openvt.c	Thu Apr 03 18:01:44 2014 -0500
+++ b/toys/pending/openvt.c	Thu Apr 03 22:43:28 2014 -0500
@@ -27,108 +27,105 @@
 #include <linux/kd.h>
 
 GLOBALS(
-	unsigned long vt_num;
+  unsigned long vt_num;
 )
 
 int find_console_fd(void)
 {
-	char *console_name[] = {"/dev/tty", "/dev/tty0", "/dev/console"};
-	int i;
-	int fd;
-	char arg;
+  char *console_name[] = {"/dev/tty", "/dev/tty0", "/dev/console"};
+  int i;
+  int fd;
+  char arg;
 
-	for (i = 0; i < 3; i++) {
-		fd = open(console_name[i], O_RDWR);
-		if (fd < 0 && errno == EACCES)
-			fd = open(console_name[i], O_RDONLY);
+  for (i = 0; i < 3; i++) {
+    fd = open(console_name[i], O_RDONLY);
+    if (fd < 0 && errno == EACCES)
+      fd = open(console_name[i], O_WRONLY);
 
-		if (fd < 0 && errno == EACCES)
-			fd = open(console_name[i], O_WRONLY);
+    if (fd >= 0) {
+      arg = 0;
+      if (0 == ioctl(fd, KDGKBTYPE, &arg))
+        return fd;
+      else
+        close(fd);
+    }
+  }
 
-		if (fd >= 0) {
-			arg = 0;
-			if (0 == ioctl(fd, KDGKBTYPE, &arg))
-				return fd;
-			else
-				close(fd);
-		}
-	}
+  /* check std fd 0, 1 and 2 */
+  for (fd = 0; fd < 3; fd++) {
+    arg = 0;
+    if (0 == ioctl(fd, KDGKBTYPE, &arg))
+      return fd;
+  }
 
-	/* check std fd 0, 1 and 2 */
-	for (fd = 0; fd < 3; fd++) {
-		arg = 0;
-		if (0 == ioctl(fd, KDGKBTYPE, &arg))
-			return fd;
-	}
-
-	return -1;
+  return -1;
 }
 
 int xvtnum(int fd)
 {
-	int ret;
+  int ret;
 
-	ret = ioctl(fd, VT_OPENQRY, (int *)&TT.vt_num);
-	if (ret != 0 || TT.vt_num <= 0) perror_exit("can't find open VT");
+  ret = ioctl(fd, VT_OPENQRY, (int *)&TT.vt_num);
+  if (ret != 0 || TT.vt_num <= 0) perror_exit("can't find open VT");
 
-	return TT.vt_num;
+  return TT.vt_num;
 }
 
 void openvt_main(void)
 {
-	int fd = -1, vt_fd = -1, pid, ret = 0;
-	struct vt_stat vstate;
+  int fd = -1, vt_fd = -1, pid, ret = 0;
+  struct vt_stat vstate;
 
-	if (!(toys.optflags & FLAG_c)) {
-		// check if fd 0,1 or 2 is already opened
-		for (fd = 0; fd < 3; fd++)
-			if (!ioctl(fd, VT_GETSTATE, &vstate)) {
-				ret = xvtnum(fd);
-				break;
-			}
+  if (!(toys.optflags & FLAG_c)) {
+    // check if fd 0,1 or 2 is already opened
+    for (fd = 0; fd < 3; fd++)
+      if (!ioctl(fd, VT_GETSTATE, &vstate)) {
+        ret = xvtnum(fd);
+        break;
+      }
 
-		// find VT number using /dev/console
-		if (!ret) {
-			fd = xopen("/dev/console", O_RDONLY | O_NONBLOCK);
-			xioctl(fd, VT_GETSTATE, &vstate);
-			xvtnum(fd);
-		}
-	}
+    // find VT number using /dev/console
+    if (!ret) {
+      fd = xopen("/dev/console", O_RDONLY | O_NONBLOCK);
+      xioctl(fd, VT_GETSTATE, &vstate);
+      xvtnum(fd);
+    }
+  }
 
-	sprintf(toybuf, "/dev/tty%lu", TT.vt_num);
-	fd = find_console_fd();
-	xioctl(fd, VT_GETSTATE, &vstate);
+  sprintf(toybuf, "/dev/tty%lu", TT.vt_num);
+  fd = find_console_fd();
+  xioctl(fd, VT_GETSTATE, &vstate);
 
-	close(0);	//new vt becomes stdin
-	vt_fd = xopen(toybuf, O_RDWR);
-	if (toys.optflags & FLAG_s) {
-		ioctl(vt_fd, VT_ACTIVATE, TT.vt_num);
-		ioctl(vt_fd, VT_WAITACTIVE, TT.vt_num);
-	}
+  close(0);  //new vt becomes stdin
+  vt_fd = xopen(toybuf, O_RDWR);
+  if (toys.optflags & FLAG_s) {
+    ioctl(vt_fd, VT_ACTIVATE, TT.vt_num);
+    ioctl(vt_fd, VT_WAITACTIVE, TT.vt_num);
+  }
 
-	close(1);
-	close(2);
-	dup2(vt_fd, 1);
-	dup2(vt_fd, 2);
-	while (vt_fd > 2)
-		close(vt_fd--);
+  close(1);
+  close(2);
+  dup2(vt_fd, 1);
+  dup2(vt_fd, 2);
+  while (vt_fd > 2)
+    close(vt_fd--);
 
-	pid = vfork();
-	if (pid < 0)	perror_exit("Fork failed");
-	else if (!pid) {
-		setsid();
-		ioctl(vt_fd, TIOCSCTTY, 0);
-		xexec(toys.optargs);
-	}
+  pid = vfork();
+  if (pid < 0)  perror_exit("Fork failed");
+  else if (!pid) {
+    setsid();
+    ioctl(vt_fd, TIOCSCTTY, 0);
+    xexec(toys.optargs);
+  }
 
-	if (toys.optflags & FLAG_w) {
-		while (-1 == waitpid(pid, NULL, 0) && errno == EINTR)
-			;
-		if (toys.optflags & FLAG_s) {
-			ioctl(fd, VT_ACTIVATE, vstate.v_active);
-			ioctl(fd, VT_WAITACTIVE, vstate.v_active);
-			//check why deallocate isn't working here
-			xioctl(fd, VT_DISALLOCATE, (void *)(ptrdiff_t)TT.vt_num); 
-		}
-	}
+  if (toys.optflags & FLAG_w) {
+    while (-1 == waitpid(pid, NULL, 0) && errno == EINTR)
+      ;
+    if (toys.optflags & FLAG_s) {
+      ioctl(fd, VT_ACTIVATE, vstate.v_active);
+      ioctl(fd, VT_WAITACTIVE, vstate.v_active);
+      //check why deallocate isn't working here
+      xioctl(fd, VT_DISALLOCATE, (void *)(ptrdiff_t)TT.vt_num); 
+    }
+  }
 }