aboutsummaryrefslogtreecommitdiff
path: root/initd/signal_linux.c
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@tele2.at>2018-04-15 13:21:34 +0200
committerDavid Oberhollenzer <david.oberhollenzer@tele2.at>2018-04-15 13:24:13 +0200
commit2cb64e48fcd664067f4bd87e8f46fad694c3c979 (patch)
treeebec8a79b361a0f0b5eb05da1f52f56ee974b368 /initd/signal_linux.c
parent6e839a4ad544218317ceebd85e83ab5a8a8e21cc (diff)
Move initd signal setup to platform specific file
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
Diffstat (limited to 'initd/signal_linux.c')
-rw-r--r--initd/signal_linux.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/initd/signal_linux.c b/initd/signal_linux.c
new file mode 100644
index 0000000..aed049b
--- /dev/null
+++ b/initd/signal_linux.c
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+/*
+ * Copyright (C) 2018 - David Oberhollenzer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+#include <stdio.h>
+
+#include "init.h"
+
+int sigsetup(void)
+{
+ sigset_t mask;
+ int sfd;
+
+ sigfillset(&mask);
+ if (sigprocmask(SIG_SETMASK, &mask, NULL) == -1) {
+ perror("sigprocmask");
+ return -1;
+ }
+
+ sfd = signalfd(-1, &mask, SFD_CLOEXEC);
+ if (sfd == -1) {
+ perror("signalfd");
+ return -1;
+ }
+
+ if (reboot(LINUX_REBOOT_CMD_CAD_OFF))
+ perror("cannot disable CTRL+ALT+DEL");
+
+ return sfd;
+}
+
+void sigreset(void)
+{
+ sigset_t mask;
+
+ sigemptyset(&mask);
+ sigprocmask(SIG_SETMASK, &mask, NULL);
+}