summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-04-13 18:51:22 +0200
committerLennart Poettering <lennart@poettering.net>2010-04-13 18:51:22 +0200
commitaaf694ca54365997a1ba103832db12605da9023f (patch)
tree58e1a481303ddabb06d3f77ecc481f6db67f040d
parent02a51abad1d6f334599c8d648b18d000b6118eb5 (diff)
downloadsystemd-aaf694ca54365997a1ba103832db12605da9023f.tar.gz
util: reset nl/cr flags on terminal when resetting
-rw-r--r--util.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/util.c b/util.c
index a1b9f1e0f1..17ee09c1f7 100644
--- a/util.c
+++ b/util.c
@@ -1422,14 +1422,18 @@ int reset_terminal(int fd) {
assert(fd >= 0);
- /* Set terminal up for job control */
+ /* Set terminal to some sane defaults */
if (tcgetattr(fd, &termios) < 0) {
r = -errno;
goto finish;
}
- termios.c_iflag &= ~(IGNBRK | BRKINT);
+ /* We only reset the stuff that matters to the software. How
+ * hardware is set up we don't touch assuming that somebody
+ * else will do that for us */
+
+ termios.c_iflag &= ~(IGNBRK | BRKINT | ISTRIP | INLCR | IGNCR | IUCLC);
termios.c_iflag |= ICRNL | IMAXBEL | IUTF8;
termios.c_oflag |= ONLCR;
termios.c_cflag |= CREAD;
@@ -1446,6 +1450,8 @@ int reset_terminal(int fd) {
termios.c_cc[VLNEXT] = 026; /* ^V */
termios.c_cc[VWERASE] = 027; /* ^W */
termios.c_cc[VREPRINT] = 022; /* ^R */
+ termios.c_cc[VEOL] = 0;
+ termios.c_cc[VEOL2] = 0;
termios.c_cc[VTIME] = 0;
termios.c_cc[VMIN] = 1;