According to the comment in the Linux kernel source file
drivers/tty/vt/vt_ioctl.c /dev/tty0 points to /dev/console,
so we should just go to /dev/console, and virtual terminals
are always labeled /dev/ttyN where N is 1..MAX_NR_CONSOLES,
so only check /dev/ttyN.

Signed-off-by: Cody Maloney <[email protected]>
---
 hw/xfree86/os-support/linux/lnx_init.c |   39 ++++++-------------------------
 1 files changed, 8 insertions(+), 31 deletions(-)

diff --git a/hw/xfree86/os-support/linux/lnx_init.c 
b/hw/xfree86/os-support/linux/lnx_init.c
index 77dfb2f..04518f3 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -76,17 +76,17 @@ switch_to(int vt, const char *from)
 void
 xf86OpenConsole(void)
 {
-    int i, fd = -1, ret;
+    int fd = -1, ret;
     struct vt_mode VT;
     struct vt_stat vts;
     MessageType from = X_PROBED;
-    char *tty0[] = { "/dev/tty0", "/dev/vc/0", NULL };
-    char *vcs[] = { "/dev/vc/%d", "/dev/tty%d", NULL };
+    const char *console_fname = "/dev/console";
+    char *vcs = "/dev/tty%d";
 
     if (serverGeneration == 1) {
 
        /* when KeepTty check if we're run with euid==0 */
-       if (KeepTty && geteuid() != 0) 
+       if (KeepTty && geteuid() != 0)
            FatalError("xf86OpenConsole:"
                       " Server must be suid root for option \"KeepTTY\"\n");
 
@@ -96,17 +96,11 @@ xf86OpenConsole(void)
        if (xf86Info.vtno != -1) {
            from = X_CMDLINE;
        } else {
+           fd = open(console_fname, O_WRONLY, 0);
 
-           i=0;
-           while (tty0[i] != NULL) {
-               if ((fd = open(tty0[i],O_WRONLY,0)) >= 0)
-                 break;
-               i++;
-           }
-           
            if (fd < 0)
                FatalError(
-                   "xf86OpenConsole: Cannot open /dev/tty0 (%s)\n",
+                   "xf86OpenConsole: Cannot open /dev/console to use VT ioctls 
(%s)\n",
                    strerror(errno));
 
             if (ShareVTs)
@@ -149,13 +143,8 @@ xf86OpenConsole(void)
                        strerror(errno));
        }
 
-        i=0;
-        while (vcs[i] != NULL) {
-            sprintf(vtname, vcs[i], xf86Info.vtno); /* /dev/tty1-64 */
-           if ((xf86Info.consoleFd = open(vtname, O_RDWR|O_NDELAY, 0)) >= 0)
-               break;
-            i++;
-        }
+        sprintf(vtname, vcs, xf86Info.vtno); /* /dev/tty1-64 */
+        xf86Info.consoleFd = open(vtname, O_RDWR|O_NDELAY, 0);
 
        if (xf86Info.consoleFd < 0)
            FatalError("xf86OpenConsole: Cannot open virtual console"
@@ -172,18 +161,6 @@ xf86OpenConsole(void)
        else
            activeVT = vts.v_active;
 
-#if 0
-       if (!KeepTty) {
-           /*
-            * Detach from the controlling tty to avoid char loss
-            */
-           if ((i = open("/dev/tty",O_RDWR)) >= 0) {
-               SYSCALL(ioctl(i, TIOCNOTTY, 0));
-               close(i);
-           }
-       }
-#endif
-
         if (!ShareVTs)
         {
             struct termios nTty;
-- 
1.7.5.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to