aboutsummaryrefslogtreecommitdiffstats
path: root/src/os/linux-os_kbspecials.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/linux-os_kbspecials.c')
-rw-r--r--src/os/linux-os_kbspecials.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/os/linux-os_kbspecials.c b/src/os/linux-os_kbspecials.c
new file mode 100644
index 0000000..0d407ab
--- /dev/null
+++ b/src/os/linux-os_kbspecials.c
@@ -0,0 +1,33 @@
+/* ISC license. */
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include <sys/reboot.h>
+#include <sys/ioctl.h>
+#include <linux/kd.h>
+
+#include <skalibs/strerr2.h>
+#include <skalibs/sig.h>
+
+#include "os.h"
+
+void os_kbspecials (int inns)
+{
+ int fd ;
+ if (inns) return ;
+ fd = open("/dev/tty0", O_RDONLY | O_NOCTTY) ;
+ if (fd < 0)
+ strerr_warnwu2sys("open /dev/", "tty0 (kbrequest will not be handled)") ;
+ else
+ {
+ if (ioctl(fd, KDSIGACCEPT, SIGWINCH) < 0)
+ strerr_warnwu2sys("ioctl KDSIGACCEPT on ", "tty0 (kbrequest will not be handled)") ;
+ close(fd) ;
+ }
+
+ sig_block(SIGINT) ; /* don't panic on early cad before s6-svscan catches it */
+ if (reboot(RB_DISABLE_CAD) == -1)
+ strerr_warnwu1sys("trap ctrl-alt-del") ;
+}