summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-07-12 21:40:43 +0200
committerLennart Poettering <lennart@poettering.net>2010-07-12 21:40:43 +0200
commit3fe5e5d476f6a653e303913aff6c438807b80b3b (patch)
tree9d25f90c3ff9b9af6081160a1edd803291cde235
parent7bc0351dd8bdd5045101616d304a3f16ecb91e5a (diff)
util: reset terminal even harder
-rw-r--r--src/util.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/util.c b/src/util.c
index b5513dd74c..e5d845609d 100644
--- a/src/util.c
+++ b/src/util.c
@@ -47,6 +47,7 @@
#include <sys/utsname.h>
#include <pwd.h>
#include <netinet/ip.h>
+#include <linux/kd.h>
#include "macro.h"
#include "util.h"
@@ -1844,10 +1845,22 @@ int ask(char *ret, const char *replies, const char *text, ...) {
int reset_terminal(int fd) {
struct termios termios;
int r = 0;
+ long arg;
+
+ /* Set terminal to some sane defaults */
assert(fd >= 0);
- /* Set terminal to some sane defaults */
+ /* First, unlock termios */
+ zero(termios);
+ ioctl(fd, TIOCSLCKTRMIOS, &termios);
+
+ /* Disable exclusive mode, just in case */
+ ioctl(fd, TIOCNXCL);
+
+ /* Enable console unicode mode */
+ arg = K_UNICODE;
+ ioctl(fd, KDSKBMODE, &arg);
if (tcgetattr(fd, &termios) < 0) {
r = -errno;