From: Ray Strode Date: Wed, 30 Nov 2022 19:07:29 +0000 (-0500) Subject: terminal-util: Set OPOST when setting ONLCR X-Git-Tag: v253-rc1~404 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9fe26523a189435d75b9d745188e09c17928d89e;p=thirdparty%2Fsystemd.git terminal-util: Set OPOST when setting ONLCR reset_terminal_fd sets certain minimum required terminal attributes that systemd relies on. One of those attributes is `ONLCR` which ensures that when a new line is sent to the terminal, that the cursor not only moves to the next line, but also moves to the very beginning of that line. In order for `ONLCR` to work, the terminal needs to perform output post-processing. That requires an additional attribute, `OPOST`, which reset_terminal_fd currently fails to ensure is set. In most cases `OPOST` (and `ONLCR` actually) are both set anyway, so it's not an issue, but it could be a problem if, e.g., the terminal was put in raw mode by a program and the program unexpectedly died before restoring settings. This commit ensures when `ONLCR` is set `OPOST` is set too, which is the only thing that really makes sense to do. --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 8fa9986a768..7bc2f71bcfd 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -268,7 +268,7 @@ int reset_terminal_fd(int fd, bool switch_to_text) { termios.c_iflag &= ~(IGNBRK | BRKINT | ISTRIP | INLCR | IGNCR | IUCLC); termios.c_iflag |= ICRNL | IMAXBEL | IUTF8; - termios.c_oflag |= ONLCR; + termios.c_oflag |= ONLCR | OPOST; termios.c_cflag |= CREAD; termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOPRT | ECHOKE;