From 6cb26597a20b50666834d542ea7446d2be89bf1a Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 13 Jan 2026 17:49:00 +0100 Subject: [PATCH] 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 --- hw/xfree86/os-support/bsd/bsd_init.c | 96 ++++++++++++++-------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/hw/xfree86/os-support/bsd/bsd_init.c b/hw/xfree86/os-support/bsd/bsd_init.c index eebd585790..23dbb3649a 100644 --- a/hw/xfree86/os-support/bsd/bsd_init.c +++ b/hw/xfree86/os-support/bsd/bsd_init.c @@ -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