NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: install/54932: A green message overwrite part of screen in sysinst on laptop
The following reply was made to PR install/54932; it has been noted by GNATS.
From: Andreas Gustafsson <gson%gson.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: install/54932: A green message overwrite part of screen in sysinst on laptop
Date: Sat, 27 Jun 2026 15:07:20 +0300
A few weeks ago, I wrote:
> Sysinst already intercepts kernel messages using TIOCCONS, but only while
> running external commands. It should intercept them at all times.
I propose the following patch.
Index: src/usr.sbin/sysinst/defs.h
===================================================================
RCS file: /cvsroot/src/usr.sbin/sysinst/defs.h,v
retrieving revision 1.95
diff -u -r1.95 defs.h
--- src/usr.sbin/sysinst/defs.h 26 Apr 2026 13:31:47 -0000 1.95
+++ src/usr.sbin/sysinst/defs.h 15 Jun 2026 16:21:19 -0000
@@ -919,6 +919,8 @@
struct disk_partitions*);
void free_install_desc(struct install_partition_desc*);
bool may_swap_if_not_sdmmc(const char*);
+void redirect_console(int, int);
+void discard_console_output(void);
/* from target.c */
#if defined(DEBUG) || defined(DEBUG_ROOT)
Index: src/usr.sbin/sysinst/main.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/sysinst/main.c,v
retrieving revision 1.36
diff -u -r1.36 main.c
--- src/usr.sbin/sysinst/main.c 26 Apr 2026 13:31:47 -0000 1.36
+++ src/usr.sbin/sysinst/main.c 15 Jun 2026 16:21:19 -0000
@@ -274,6 +274,9 @@
no_https = 1;
}
+ /* Prevent kernel conole messages from messing up the display */
+ discard_console_output();
+
/* initialize message window */
if (menu_init()) {
__menu_initerror();
Index: src/usr.sbin/sysinst/run.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/sysinst/run.c,v
retrieving revision 1.16
diff -u -r1.16 run.c
--- src/usr.sbin/sysinst/run.c 4 Oct 2024 15:11:09 -0000 1.16
+++ src/usr.sbin/sysinst/run.c 15 Jun 2026 16:21:19 -0000
@@ -419,7 +419,6 @@
char *cp, *ncp;
struct termios rtt, tt;
struct timeval tmo;
- static int do_tioccons = 2;
(void)tcgetattr(STDIN_FILENO, &tt);
if (openpty(&master, &slave, NULL, &tt, win) == -1) {
@@ -433,20 +432,7 @@
ttysig_ignore = 1;
ioctl(master, TIOCPKT, &ttysig_ignore);
- /* Try to get console output into our pipe */
- if (do_tioccons) {
- if (ioctl(slave, TIOCCONS, &do_tioccons) == 0
- && do_tioccons == 2) {
- /* test our output - we don't want it grabbed */
- write(1, " \b", 2);
- ioctl(master, FIONREAD, &do_tioccons);
- if (do_tioccons != 0) {
- do_tioccons = 0;
- ioctl(slave, TIOCCONS, &do_tioccons);
- } else
- do_tioccons = 1;
- }
- }
+ redirect_console(master, slave);
if (logfp)
fflush(logfp);
@@ -589,6 +575,7 @@
}
close(master);
close(slave);
+ discard_console_output();
if (logfp)
fflush(logfp);
Index: src/usr.sbin/sysinst/util.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/sysinst/util.c,v
retrieving revision 1.78
diff -u -r1.78 util.c
--- src/usr.sbin/sysinst/util.c 5 Aug 2025 14:52:43 -0000 1.78
+++ src/usr.sbin/sysinst/util.c 15 Jun 2026 16:21:20 -0000
@@ -193,6 +193,8 @@
programs available on install media */
int have_raid, have_vnd, have_cgd, have_lvm, have_gpt, have_dk;
+int console_tty = -1; /* tty where console is currently redirected */
+
/*
* local prototypes
*/
@@ -2682,3 +2684,48 @@
return strncmp(parent, "sdmmc", 5) != 0;
}
#endif
+
+/*
+ * Redirect console output to the pty associated with master/slave
+ */
+void
+redirect_console(int master, int slave) {
+ static int do_tioccons = 2;
+ /* Try to get console output into our pipe */
+ if (do_tioccons) {
+ /* Turn off any existing console redirection */
+ if (console_tty != -1) {
+ int off = 0;
+ ioctl(console_tty, TIOCCONS, &off);
+ console_tty = -1;
+ }
+ if (ioctl(slave, TIOCCONS, &do_tioccons) == 0) {
+ console_tty = slave;
+ if (do_tioccons == 2) {
+ /* test our output - we don't want it grabbed */
+ write(1, " \b", 2);
+ ioctl(master, FIONREAD, &do_tioccons);
+ if (do_tioccons != 0) {
+ do_tioccons = 0;
+ ioctl(slave, TIOCCONS, &do_tioccons);
+ console_tty = -1;
+ } else
+ do_tioccons = 1;
+ }
+ }
+ }
+}
+
+/*
+ * Redirect console output to nowhere
+ */
+void
+discard_console_output(void) {
+ static int master = -1, slave = -1;
+ if (slave == -1)
+ /* Return value ignored */
+ openpty(&master, &slave, NULL, NULL, NULL);
+ if (slave == -1)
+ return;
+ redirect_console(master, slave);
+}
Home |
Main Index |
Thread Index |
Old Index