terminal-util: Enable line wrapping in reset_terminal_fd()

The qemu seabios firmware disables serial console line wrapping. Let's
make sure we re-enable it again when we reset a terminal to some sane
defaults.

To avoid potentially blocking on writing to the terminal, we put it
in nonblocking mode and add a timeout of 50ms.
This commit is contained in:
Daan De Meyer 2024-04-19 21:58:18 +02:00
parent e6724664c3
commit f57705d67d
2 changed files with 23 additions and 1 deletions

View file

@ -306,7 +306,29 @@ int reset_terminal_fd(int fd, bool switch_to_text) {
termios.c_cc[VMIN] = 1;
r = RET_NERRNO(tcsetattr(fd, TCSANOW, &termios));
if (r < 0) {
log_debug_errno(r, "Failed to set terminal parameters: %m");
goto finish;
}
if (!terminal_is_dumb()) {
r = fd_nonblock(fd, true);
if (r < 0) {
log_debug_errno(r, "Failed to set terminal to non-blocking mode: %m");
goto finish;
}
/* Enable line wrapping. */
(void) loop_write_full(fd, "\033[?7h", SIZE_MAX, 50 * USEC_PER_MSEC);
if (r > 0) {
r = fd_nonblock(fd, false);
if (r < 0) {
log_debug_errno(r, "Failed to set terminal back to blocking mode: %m");
goto finish;
}
}
}
finish:
/* Just in case, flush all crap out */
(void) tcflush(fd, TCIOFLUSH);

View file

@ -70,7 +70,7 @@ check_result_qemu_hook() {
fi
# Check if the shutdown initrd was executed at all
if ! grep -qE "^Hello from shutdown initrd\s*$" "$console_log"; then
if ! grep -q "Hello from shutdown initrd" "$console_log"; then
derror "Missing 'hello' message from shutdown initrd"
return 1
fi