mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 03:44:06 +00:00
xfree86: os-support: bsd_init: move acquire vt logic into function
Factor out the logic for acquiring a VT into separate function instead of wild goto's. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
@@ -136,6 +136,47 @@ xf86VTKeepTtyIsSet(void)
|
||||
return KeepTty;
|
||||
}
|
||||
|
||||
static void acquire_vt(void)
|
||||
{
|
||||
if (xf86Info.ShareVTs) {
|
||||
close(xf86Info.consoleFd);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* now get the VT
|
||||
*/
|
||||
int result;
|
||||
|
||||
SYSCALL(result = ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno));
|
||||
if (result != 0)
|
||||
LogMessageVerb(X_WARNING, 1, "xf86OpenConsole: VT_ACTIVATE failed\n");
|
||||
|
||||
SYSCALL(result = ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno));
|
||||
if (result != 0)
|
||||
LogMessageVerb(X_WARNING, 1, "xf86OpenConsole: VT_WAITACTIVE failed\n");
|
||||
|
||||
OsSignal(SIGUSR1, xf86VTRequest);
|
||||
|
||||
vtmode_t vtmode = {
|
||||
.mode = VT_PROCESS,
|
||||
.relsig = SIGUSR1,
|
||||
.acqsig = SIGUSR1,
|
||||
.frsig = SIGUSR1
|
||||
};
|
||||
|
||||
if (ioctl(xf86Info.consoleFd, VT_SETMODE, &vtmode) < 0)
|
||||
FatalError("xf86OpenConsole: VT_SETMODE VT_PROCESS failed");
|
||||
|
||||
#if !defined(__OpenBSD__) && !defined(USE_DEV_IO) && !defined(USE_I386_IOPL)
|
||||
if (ioctl(xf86Info.consoleFd, KDENABIO, 0) < 0)
|
||||
FatalError("xf86OpenConsole: KDENABIO failed (%s)", strerror(errno));
|
||||
#endif
|
||||
|
||||
if (ioctl(xf86Info.consoleFd, KDSETMODE, KD_GRAPHICS) < 0)
|
||||
FatalError("xf86OpenConsole: KDSETMODE KD_GRAPHICS failed");
|
||||
}
|
||||
|
||||
void
|
||||
xf86OpenConsole(void)
|
||||
{
|
||||
@@ -195,10 +236,13 @@ xf86OpenConsole(void)
|
||||
* As of FreeBSD 2.2.8, syscons driver does not need the #1 vt
|
||||
* switching anymore.
|
||||
*/
|
||||
goto acquire_vt;
|
||||
acquire_vt();
|
||||
return;
|
||||
|
||||
case PCVT:
|
||||
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
|
||||
goto acquire_vt;
|
||||
acquire_vt();
|
||||
return;
|
||||
#endif
|
||||
#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 200000000))
|
||||
/*
|
||||
@@ -213,51 +257,8 @@ xf86OpenConsole(void)
|
||||
sleep(1);
|
||||
}
|
||||
#endif
|
||||
acquire_vt:
|
||||
if (!xf86Info.ShareVTs) {
|
||||
int result;
|
||||
/*
|
||||
* now get the VT
|
||||
*/
|
||||
SYSCALL(result =
|
||||
ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno));
|
||||
if (result != 0) {
|
||||
LogMessageVerb(X_WARNING, 1, "xf86OpenConsole: VT_ACTIVATE failed\n");
|
||||
}
|
||||
SYSCALL(result =
|
||||
ioctl(xf86Info.consoleFd, VT_WAITACTIVE,
|
||||
xf86Info.vtno));
|
||||
if (result != 0) {
|
||||
LogMessageVerb(X_WARNING, 1,
|
||||
"xf86OpenConsole: VT_WAITACTIVE failed\n");
|
||||
}
|
||||
|
||||
OsSignal(SIGUSR1, xf86VTRequest);
|
||||
|
||||
vtmode_t vtmode = {
|
||||
.mode = VT_PROCESS,
|
||||
.relsig = SIGUSR1,
|
||||
.acqsig = SIGUSR1,
|
||||
.frsig = SIGUSR1
|
||||
};
|
||||
|
||||
if (ioctl(xf86Info.consoleFd, VT_SETMODE, &vtmode) < 0) {
|
||||
FatalError("xf86OpenConsole: VT_SETMODE VT_PROCESS failed");
|
||||
}
|
||||
#if !defined(__OpenBSD__) && !defined(USE_DEV_IO) && !defined(USE_I386_IOPL)
|
||||
if (ioctl(xf86Info.consoleFd, KDENABIO, 0) < 0) {
|
||||
FatalError("xf86OpenConsole: KDENABIO failed (%s)",
|
||||
strerror(errno));
|
||||
}
|
||||
#endif
|
||||
if (ioctl(xf86Info.consoleFd, KDSETMODE, KD_GRAPHICS) < 0) {
|
||||
FatalError("xf86OpenConsole: KDSETMODE KD_GRAPHICS failed");
|
||||
}
|
||||
}
|
||||
else { /* xf86Info.ShareVTs */
|
||||
close(xf86Info.consoleFd);
|
||||
}
|
||||
break;
|
||||
acquire_vt();
|
||||
return;
|
||||
#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */
|
||||
#ifdef WSCONS_SUPPORT
|
||||
case WSCONS:
|
||||
@@ -277,7 +278,6 @@ acquire_vt:
|
||||
}
|
||||
#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef SYSCONS_SUPPORT
|
||||
|
||||
Reference in New Issue
Block a user