From 601f6a1e820462b1df6ff632d112bef241d556b1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 10 Apr 2010 23:36:43 +0200 Subject: main: switch to primary console vt on crash --- util.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'util.c') diff --git a/util.c b/util.c index f3161bd7f3..f9eae6bba1 100644 --- a/util.c +++ b/util.c @@ -34,6 +34,9 @@ #include #include #include +#include +#include +#include #include "macro.h" #include "util.h" @@ -1294,6 +1297,31 @@ bool fstype_is_network(const char *fstype) { return false; } +int chvt(int vt) { + int fd, r = 0; + + if ((fd = open("/dev/tty0", O_RDWR|O_NOCTTY|O_CLOEXEC)) < 0) + return -errno; + + if (vt < 0) { + int tiocl[2] = { + TIOCL_GETKMSGREDIRECT, + 0 + }; + + if (ioctl(fd, TIOCLINUX, tiocl) < 0) + return -errno; + + vt = tiocl[0] <= 0 ? 1 : tiocl[0]; + } + + if (ioctl(fd, VT_ACTIVATE, vt) < 0) + r = -errno; + + close_nointr(r); + return r; +} + static const char *const ioprio_class_table[] = { [IOPRIO_CLASS_NONE] = "none", [IOPRIO_CLASS_RT] = "realtime", -- cgit v1.2.3-54-g00ecf