]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util: split out signal-util.[ch] from util.[ch]
authorLennart Poettering <lennart@poettering.net>
Fri, 29 May 2015 18:14:11 +0000 (20:14 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 29 May 2015 18:14:11 +0000 (20:14 +0200)
No functional changes.

50 files changed:
Makefile.am
src/core/busname.c
src/core/dbus-kill.c
src/core/execute.c
src/core/kill.c
src/core/load-fragment.c
src/core/main.c
src/core/manager.c
src/core/service.c
src/core/socket.c
src/fsck/fsck.c
src/import/export.c
src/import/import-common.c
src/import/import.c
src/import/importd.c
src/import/pull-common.c
src/import/pull.c
src/journal-remote/journal-remote.c
src/journal-remote/journal-upload.c
src/journal/coredumpctl.c
src/journal/journald-server.c
src/libsystemd/sd-bus/bus-socket.c
src/libsystemd/sd-bus/bus-util.c
src/libsystemd/sd-event/sd-event.c
src/libsystemd/sd-event/test-event.c
src/login/loginctl.c
src/login/logind.c
src/machine/machinectl.c
src/machine/machined.c
src/network/networkd-wait-online.c
src/network/networkd.c
src/nspawn/nspawn.c
src/remount-fs/remount-fs.c
src/resolve/resolved.c
src/run/run.c
src/shared/ask-password-api.c
src/shared/log.c
src/shared/machine-pool.c
src/shared/process-util.c
src/shared/pty.c
src/shared/signal-util.c [new file with mode: 0644]
src/shared/signal-util.h [new file with mode: 0644]
src/shared/util.c
src/shared/util.h
src/systemctl/systemctl.c
src/test/test-pty.c
src/test/test-util.c
src/timesync/timesyncd.c
src/tty-ask-password-agent/tty-ask-password-agent.c
src/udev/udev-event.c

index c7da2f2dd01886c41c05e5985c6d4bb5c18551b5..06512ae3840981daa2bcfbfac450de50842bc0ec 100644 (file)
@@ -785,6 +785,8 @@ libsystemd_shared_la_SOURCES = \
        src/shared/time-util.h \
        src/shared/locale-util.c \
        src/shared/locale-util.h \
+       src/shared/signal-util.c \
+       src/shared/signal-util.h \
        src/shared/mempool.c \
        src/shared/mempool.h \
        src/shared/hashmap.c \
index 17b85134e8580b2c8bcf5f49217de9c4a1f00a3a..11f3b980093ef950cb6435ddb254ddf70a56ed06 100644 (file)
 #include <sys/mman.h>
 
 #include "special.h"
+#include "formats-util.h"
+#include "signal-util.h"
 #include "bus-kernel.h"
 #include "bus-internal.h"
 #include "bus-util.h"
-#include "service.h"
 #include "kdbus.h"
 #include "bus-policy.h"
+#include "service.h"
 #include "dbus-busname.h"
 #include "busname.h"
-#include "formats-util.h"
 
 static const UnitActiveState state_translation_table[_BUSNAME_STATE_MAX] = {
         [BUSNAME_DEAD] = UNIT_INACTIVE,
index fb29e147cbd0910b2f817b1528b5b3a833bd9305..3b8116281c019ce45e28184339e5a77102457d78 100644 (file)
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
+#include "signal-util.h"
+#include "bus-util.h"
+
 #include "kill.h"
 #include "dbus-kill.h"
-#include "bus-util.h"
 
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_kill_mode, kill_mode, KillMode);
 
index e88a2dc0edd3f00e0d8bd1566dc702c147d55aff..4120493bda81d0e4fd9b67c11ac9064e67ce5979 100644 (file)
 #include <sys/apparmor.h>
 #endif
 
+#include "sd-messages.h"
 #include "rm-rf.h"
-#include "execute.h"
 #include "strv.h"
 #include "macro.h"
 #include "capability.h"
 #include "util.h"
 #include "log.h"
-#include "sd-messages.h"
 #include "ioprio.h"
 #include "securebits.h"
 #include "namespace.h"
@@ -79,6 +78,7 @@
 #include "formats-util.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
 
 #ifdef HAVE_APPARMOR
 #include "apparmor-util.h"
@@ -88,6 +88,8 @@
 #include "seccomp-util.h"
 #endif
 
+#include "execute.h"
+
 #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
 #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC)
 
index 60a510eae6241af2e5d25a85bb5ffdb551e94a2d..2de71c6bf9551a52273edf70da758d2ae0e1eb79 100644 (file)
@@ -19,9 +19,9 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-
-#include "kill.h"
 #include "util.h"
+#include "signal-util.h"
+#include "kill.h"
 
 void kill_context_init(KillContext *c) {
         assert(c);
index 9415e92c90466a04d2c9d33072f9d4f7e522f302..c95c11014c729b7dc309d3a3f8dbc04f4db3808f 100644 (file)
@@ -52,6 +52,7 @@
 #include "errno-list.h"
 #include "af-list.h"
 #include "cap-list.h"
+#include "signal-util.h"
 #include "bus-internal.h"
 
 #ifdef HAVE_SECCOMP
index 212ab901b18f49ec7492dec081c0f8a51b2c75c0..674e47e788ac8e64ec298cf926baf68b59893ef6 100644 (file)
 #include "bus-error.h"
 #include "bus-util.h"
 #include "selinux-util.h"
+#include "formats-util.h"
+#include "process-util.h"
+#include "terminal-util.h"
+#include "signal-util.h"
 #include "manager.h"
 #include "dbus-manager.h"
 #include "load-fragment.h"
@@ -72,9 +76,6 @@
 #include "ima-setup.h"
 #include "smack-setup.h"
 #include "kmod-setup.h"
-#include "formats-util.h"
-#include "process-util.h"
-#include "terminal-util.h"
 
 static enum {
         ACTION_RUN,
index b931b0d71d83ae4889b5ce0d8550d97c5f61a453..ae473d05c2d88f3625228aa7ebfec8b82301e69d 100644 (file)
@@ -40,8 +40,6 @@
 #include "sd-daemon.h"
 #include "sd-messages.h"
 
-#include "manager.h"
-#include "transaction.h"
 #include "hashmap.h"
 #include "macro.h"
 #include "strv.h"
 #include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-util.h"
-#include "dbus.h"
-#include "dbus-unit.h"
-#include "dbus-job.h"
-#include "dbus-manager.h"
 #include "bus-kernel.h"
 #include "time-util.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
+#include "dbus.h"
+#include "dbus-unit.h"
+#include "dbus-job.h"
+#include "dbus-manager.h"
+#include "manager.h"
+#include "transaction.h"
 
 /* Initial delay and the interval for printing status messages about running jobs */
 #define JOBS_IN_PROGRESS_WAIT_USEC (5*USEC_PER_SEC)
index 07347b99a44798bf23de192f40f0017f1557ade0..c7e65772ea44183db6f6e2b768339f25d45e6fc5 100644 (file)
@@ -47,6 +47,7 @@
 #include "bus-kernel.h"
 #include "formats-util.h"
 #include "process-util.h"
+#include "signal-util.h"
 
 static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
         [SERVICE_DEAD] = UNIT_INACTIVE,
index 17b8a5059db363c881d40ebb961672a0ca600ac3..fc5eb1464ad50a3e3bfe8b53f854986c03528147 100644 (file)
@@ -47,8 +47,9 @@
 #include "selinux-util.h"
 #include "dbus-socket.h"
 #include "unit.h"
-#include "socket.h"
 #include "formats-util.h"
+#include "signal-util.h"
+#include "socket.h"
 
 static const UnitActiveState state_translation_table[_SOCKET_STATE_MAX] = {
         [SOCKET_DEAD] = UNIT_INACTIVE,
index 9bbe9ff6736dd0607d41f5539e734c5a439ae830..f0e5c5f239548a0e567043644625d8956452ec72 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "util.h"
 #include "process-util.h"
+#include "signal-util.h"
 #include "special.h"
 #include "bus-util.h"
 #include "bus-error.h"
index 201c5ab35688907a8cdf0045b350680ce6c5a746..d4bc88e010c16e822b2c3041a76a3a024593249f 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "sd-event.h"
 #include "event-util.h"
+#include "signal-util.h"
 #include "verbs.h"
 #include "build.h"
 #include "machine-image.h"
index aede2f9b3686622bcb8659dc7abaf590a4cdbfaa..971161400083ba8818cf6eaf982f96d4f5782794 100644 (file)
@@ -26,6 +26,7 @@
 #include "util.h"
 #include "btrfs-util.h"
 #include "capability.h"
+#include "signal-util.h"
 #include "import-common.h"
 
 int import_make_read_only_fd(int fd) {
index f3072b3775a683c796f88f8210b5a90515da0497..fff5a104b1404f3cc65055aa858835dd7ae0a43d 100644 (file)
@@ -25,6 +25,7 @@
 #include "event-util.h"
 #include "verbs.h"
 #include "build.h"
+#include "signal-util.h"
 #include "machine-image.h"
 #include "import-util.h"
 #include "import-tar.h"
index 45d1d9334362c0c71f568c14a71f9fd14013a1d5..50566a6e5ca4c44e8715eda1634bb2f7d464ffef 100644 (file)
@@ -34,6 +34,7 @@
 #include "path-util.h"
 #include "import-util.h"
 #include "process-util.h"
+#include "signal-util.h"
 
 typedef struct Transfer Transfer;
 typedef struct Manager Manager;
index 59091ba7cb346f2d33e988cb1de0ed333a01af56..d2588d4fa0a0ab796d85ff6deb3ae14881e11466 100644 (file)
@@ -30,6 +30,7 @@
 #include "pull-job.h"
 #include "pull-common.h"
 #include "process-util.h"
+#include "signal-util.h"
 
 #define FILENAME_ESCAPE "/.#\"\'"
 
index 0f2ad92187a4ab72c4f71391ca434bd852065d4d..eec458386841e61bd8ff8ae811cede6cac91a308 100644 (file)
@@ -25,6 +25,7 @@
 #include "event-util.h"
 #include "verbs.h"
 #include "build.h"
+#include "signal-util.h"
 #include "machine-image.h"
 #include "import-util.h"
 #include "pull-tar.h"
index f87a939168fe51a98ba0da35c4910c32cf48866d..911e2a178bef0fc0b829d8d8774110c7d095e519 100644 (file)
@@ -30,6 +30,7 @@
 #include <getopt.h>
 
 #include "sd-daemon.h"
+#include "signal-util.h"
 #include "journal-file.h"
 #include "journald-native.h"
 #include "socket-util.h"
index ddbb8731e265b198059b59191d7726c5e48e11f8..ddb1ef0396b8c01d726bcc0a0b91f1737bd073a0 100644 (file)
@@ -33,8 +33,9 @@
 #include "mkdir.h"
 #include "conf-parser.h"
 #include "sigbus.h"
-#include "journal-upload.h"
 #include "formats-util.h"
+#include "signal-util.h"
+#include "journal-upload.h"
 
 #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-upload.pem"
 #define CERT_FILE     CERTIFICATE_ROOT "/certs/journal-upload.pem"
index bcb0ff9c39a0ffca80d28a074632cf5512488df9..381bf72776f7cbcb0049462a9b323108934e0a4a 100644 (file)
@@ -39,6 +39,7 @@
 #include "sigbus.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
 
 static enum {
         ACTION_NONE,
index b3a4b530808b2a0c59745c303a3d88a1f1b90c96..3353024f4eeee8e5688f1630ca8061266d2749c3 100644 (file)
 #include <sys/statvfs.h>
 #include <sys/mman.h>
 
+#ifdef HAVE_SELINUX
+#include <selinux/selinux.h>
+#endif
+
 #include <libudev.h>
 
 #include "sd-journal.h"
@@ -43,6 +47,7 @@
 #include "formats-util.h"
 #include "process-util.h"
 #include "hostname-util.h"
+#include "signal-util.h"
 #include "journal-internal.h"
 #include "journal-vacuum.h"
 #include "journal-authenticate.h"
 #include "journald-audit.h"
 #include "journald-server.h"
 
-#ifdef HAVE_SELINUX
-#include <selinux/selinux.h>
-#endif
-
 #define USER_JOURNALS_MAX 1024
 
 #define DEFAULT_SYNC_INTERVAL_USEC (5*USEC_PER_MINUTE)
index 881efb176a4b2a4a59bc8a46376aef3d94b45ae0..4fffc6581d5eedd586e22202c40ed3bd34eab810 100644 (file)
 #include <unistd.h>
 #include <poll.h>
 
+#include "sd-daemon.h"
 #include "util.h"
 #include "macro.h"
 #include "missing.h"
 #include "utf8.h"
-#include "sd-daemon.h"
 #include "formats-util.h"
+#include "signal-util.h"
 
 #include "sd-bus.h"
 #include "bus-socket.h"
index 5e375af2060e086efc4218fec32abfb9a8ac89d3..99937799b3c47ab07fd78c626de2ed7808442da9 100644 (file)
@@ -30,6 +30,7 @@
 #include "path-util.h"
 #include "missing.h"
 #include "set.h"
+#include "signal-util.h"
 #include "unit-name.h"
 
 #include "sd-bus.h"
index 0dc468037689639f74149f30f771fe7f59d4a2ef..cc8bc50c04a8abca55400a50b66a4037687ccdc4 100644 (file)
@@ -33,6 +33,7 @@
 #include "missing.h"
 #include "set.h"
 #include "list.h"
+#include "signal-util.h"
 
 #include "sd-event.h"
 
index 721700be7b0c2d45078efef2fc097123c9b655a5..94e98e007702662cbcecaf87803613c774c134dd 100644 (file)
@@ -23,6 +23,7 @@
 #include "log.h"
 #include "util.h"
 #include "macro.h"
+#include "signal-util.h"
 
 static int prepare_handler(sd_event_source *s, void *userdata) {
         log_info("preparing %c", PTR_TO_INT(userdata));
index 4a5a618472f255d97e71d07e485a460abace7137..02d240c704de6cae51eecb3fb7adfec87fe81643 100644 (file)
@@ -43,6 +43,7 @@
 #include "verbs.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
 
 static char **arg_property = NULL;
 static bool arg_all = false;
index 5e66cb924e498414e8d35bfc4a408729363b5724..00f8dbdab2f3f3c88bb7530f6439522becb8decd 100644 (file)
 #include "conf-parser.h"
 #include "bus-util.h"
 #include "bus-error.h"
-#include "logind.h"
 #include "udev-util.h"
 #include "formats-util.h"
+#include "signal-util.h"
+#include "logind.h"
 
 static void manager_free(Manager *m);
 
index b21a33941a665efdd8026be656b97c3f331aebd2..c86c36c2dedc0de018b75196b925917833847f87 100644 (file)
@@ -54,6 +54,7 @@
 #include "import-util.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
 
 static char **arg_property = NULL;
 static bool arg_all = false;
index 1e862ad8f27d4d64ce561d744aee9f6997b0007b..754c770040283016643f371b3650f20bb189988c 100644 (file)
 #include "bus-util.h"
 #include "bus-error.h"
 #include "label.h"
+#include "formats-util.h"
+#include "signal-util.h"
 #include "machine-image.h"
 #include "machined.h"
-#include "formats-util.h"
 
 Manager *manager_new(void) {
         Manager *m;
index f0ca6def874989c67608aada33373086851b3deb..6a96f1de55429626b653402f33593682b6ec3aaf 100644 (file)
 #include <getopt.h>
 
 #include "sd-daemon.h"
-
-#include "networkd-wait-online.h"
-
 #include "strv.h"
 #include "build.h"
+#include "signal-util.h"
+#include "networkd-wait-online.h"
 
 static bool arg_quiet = false;
 static usec_t arg_timeout = 120 * USEC_PER_SEC;
index 543a4e4d9593e923dc39ad80e6169841393447f8..41ec7cf904bc0756eb9ff3208d9124071ec85b8e 100644 (file)
@@ -19,9 +19,9 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-#include "capability.h"
 #include "sd-daemon.h"
-
+#include "capability.h"
+#include "signal-util.h"
 #include "networkd.h"
 
 int main(int argc, char *argv[]) {
index de755ce5380c084060e5922be12ac4482682c3cb..4211a3d7798c5824bf9ca963a4efb0829632fcdc 100644 (file)
@@ -96,6 +96,7 @@
 #include "process-util.h"
 #include "terminal-util.h"
 #include "hostname-util.h"
+#include "signal-util.h"
 
 #ifdef HAVE_SECCOMP
 #include "seccomp-util.h"
index a09531b26f8347d5f277310d590504d1039deea9..e701fc9faec1f2966e2ec7a2105eb0525e15f13a 100644 (file)
@@ -29,6 +29,7 @@
 #include "log.h"
 #include "util.h"
 #include "path-util.h"
+#include "signal-util.h"
 #include "mount-setup.h"
 #include "exit-status.h"
 
index 271247ca3fca7ab5874993e54237dfea91c880bd..e283d8a7496800f59f93f6d92dda9158380875cd 100644 (file)
@@ -24,6 +24,7 @@
 #include "mkdir.h"
 #include "capability.h"
 #include "selinux-util.h"
+#include "signal-util.h"
 
 #include "resolved-manager.h"
 #include "resolved-conf.h"
index fcd6b06f7d4f33569ac954186cf8acfcadf68798..5b9f31c4aa527daf15f9ba8d0c55a272b9788d5c 100644 (file)
@@ -35,6 +35,7 @@
 #include "calendarspec.h"
 #include "ptyfwd.h"
 #include "formats-util.h"
+#include "signal-util.h"
 
 static bool arg_scope = false;
 static bool arg_remain_after_exit = false;
index a3a2e51bb9cafcb98781a90db18ef0f1f5650289..ef3788be6896a5cd00d099661c2fd1534e7c4e5d 100644 (file)
@@ -37,7 +37,7 @@
 #include "strv.h"
 #include "random-util.h"
 #include "terminal-util.h"
-
+#include "signal-util.h"
 #include "ask-password-api.h"
 
 static void backspace_chars(int ttyfd, size_t p) {
index 6168a2955d1bc83be5e8988f4c6c87a6a25102a9..b96afc4de4ffb93e982da40505f02d526f40e8e4 100644 (file)
@@ -38,6 +38,7 @@
 #include "formats-util.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
 
 #define SNDBUF_SIZE (8*1024*1024)
 
index 447983fb1b2c847be5aad9adbac5563b9246d290..d27931cb4aaf726c593fbcd81a475225981f4b98 100644 (file)
@@ -30,6 +30,7 @@
 #include "mkdir.h"
 #include "btrfs-util.h"
 #include "path-util.h"
+#include "signal-util.h"
 #include "machine-pool.h"
 
 #define VAR_LIB_MACHINES_SIZE_START (1024UL*1024UL*500UL)
index 92a69f50e7f5463e06e0c303b048dbf6dc983e38..cfc876567dc2d16248174809b48f3a77a62d04e9 100644 (file)
 #include <signal.h>
 #include <ctype.h>
 
-#include "process-util.h"
 #include "fileio.h"
 #include "util.h"
 #include "log.h"
+#include "signal-util.h"
+#include "process-util.h"
 
 int get_process_state(pid_t pid) {
         const char *p;
index 0f80f4863b0e1f4bde990f777bd1290331ebe91c..119d66e9a2274afcf45a3418a79203fef0186459 100644 (file)
 
 #include "barrier.h"
 #include "macro.h"
-#include "pty.h"
 #include "ring.h"
 #include "util.h"
+#include "signal-util.h"
+#include "pty.h"
 
 #define PTY_BUFSIZE 4096
 
diff --git a/src/shared/signal-util.c b/src/shared/signal-util.c
new file mode 100644 (file)
index 0000000..9a2973b
--- /dev/null
@@ -0,0 +1,228 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2015 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd 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
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "util.h"
+#include "signal-util.h"
+
+int reset_all_signal_handlers(void) {
+        int sig, r = 0;
+
+        for (sig = 1; sig < _NSIG; sig++) {
+                static const struct sigaction sa = {
+                        .sa_handler = SIG_DFL,
+                        .sa_flags = SA_RESTART,
+                };
+
+                /* These two cannot be caught... */
+                if (sig == SIGKILL || sig == SIGSTOP)
+                        continue;
+
+                /* On Linux the first two RT signals are reserved by
+                 * glibc, and sigaction() will return EINVAL for them. */
+                if ((sigaction(sig, &sa, NULL) < 0))
+                        if (errno != EINVAL && r == 0)
+                                r = -errno;
+        }
+
+        return r;
+}
+
+int reset_signal_mask(void) {
+        sigset_t ss;
+
+        if (sigemptyset(&ss) < 0)
+                return -errno;
+
+        if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0)
+                return -errno;
+
+        return 0;
+}
+
+int sigaction_many(const struct sigaction *sa, ...) {
+        va_list ap;
+        int r = 0, sig;
+
+        va_start(ap, sa);
+        while ((sig = va_arg(ap, int)) > 0)
+                if (sigaction(sig, sa, NULL) < 0)
+                        r = -errno;
+        va_end(ap);
+
+        return r;
+}
+
+int ignore_signals(int sig, ...) {
+        static const struct sigaction sa = {
+                .sa_handler = SIG_IGN,
+                .sa_flags = SA_RESTART,
+        };
+        va_list ap;
+        int r = 0;
+
+        if (sigaction(sig, &sa, NULL) < 0)
+                r = -errno;
+
+        va_start(ap, sig);
+        while ((sig = va_arg(ap, int)) > 0)
+                if (sigaction(sig, &sa, NULL) < 0)
+                        r = -errno;
+        va_end(ap);
+
+        return r;
+}
+
+int default_signals(int sig, ...) {
+        static const struct sigaction sa = {
+                .sa_handler = SIG_DFL,
+                .sa_flags = SA_RESTART,
+        };
+        va_list ap;
+        int r = 0;
+
+        if (sigaction(sig, &sa, NULL) < 0)
+                r = -errno;
+
+        va_start(ap, sig);
+        while ((sig = va_arg(ap, int)) > 0)
+                if (sigaction(sig, &sa, NULL) < 0)
+                        r = -errno;
+        va_end(ap);
+
+        return r;
+}
+
+void sigset_add_many(sigset_t *ss, ...) {
+        va_list ap;
+        int sig;
+
+        assert(ss);
+
+        va_start(ap, ss);
+        while ((sig = va_arg(ap, int)) > 0)
+                assert_se(sigaddset(ss, sig) == 0);
+        va_end(ap);
+}
+
+int sigprocmask_many(int how, ...) {
+        va_list ap;
+        sigset_t ss;
+        int sig;
+
+        assert_se(sigemptyset(&ss) == 0);
+
+        va_start(ap, how);
+        while ((sig = va_arg(ap, int)) > 0)
+                assert_se(sigaddset(&ss, sig) == 0);
+        va_end(ap);
+
+        if (sigprocmask(how, &ss, NULL) < 0)
+                return -errno;
+
+        return 0;
+}
+
+static const char *const __signal_table[] = {
+        [SIGHUP] = "HUP",
+        [SIGINT] = "INT",
+        [SIGQUIT] = "QUIT",
+        [SIGILL] = "ILL",
+        [SIGTRAP] = "TRAP",
+        [SIGABRT] = "ABRT",
+        [SIGBUS] = "BUS",
+        [SIGFPE] = "FPE",
+        [SIGKILL] = "KILL",
+        [SIGUSR1] = "USR1",
+        [SIGSEGV] = "SEGV",
+        [SIGUSR2] = "USR2",
+        [SIGPIPE] = "PIPE",
+        [SIGALRM] = "ALRM",
+        [SIGTERM] = "TERM",
+#ifdef SIGSTKFLT
+        [SIGSTKFLT] = "STKFLT",  /* Linux on SPARC doesn't know SIGSTKFLT */
+#endif
+        [SIGCHLD] = "CHLD",
+        [SIGCONT] = "CONT",
+        [SIGSTOP] = "STOP",
+        [SIGTSTP] = "TSTP",
+        [SIGTTIN] = "TTIN",
+        [SIGTTOU] = "TTOU",
+        [SIGURG] = "URG",
+        [SIGXCPU] = "XCPU",
+        [SIGXFSZ] = "XFSZ",
+        [SIGVTALRM] = "VTALRM",
+        [SIGPROF] = "PROF",
+        [SIGWINCH] = "WINCH",
+        [SIGIO] = "IO",
+        [SIGPWR] = "PWR",
+        [SIGSYS] = "SYS"
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int);
+
+const char *signal_to_string(int signo) {
+        static thread_local char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1];
+        const char *name;
+
+        name = __signal_to_string(signo);
+        if (name)
+                return name;
+
+        if (signo >= SIGRTMIN && signo <= SIGRTMAX)
+                snprintf(buf, sizeof(buf), "RTMIN+%d", signo - SIGRTMIN);
+        else
+                snprintf(buf, sizeof(buf), "%d", signo);
+
+        return buf;
+}
+
+int signal_from_string(const char *s) {
+        int signo;
+        int offset = 0;
+        unsigned u;
+
+        signo = __signal_from_string(s);
+        if (signo > 0)
+                return signo;
+
+        if (startswith(s, "RTMIN+")) {
+                s += 6;
+                offset = SIGRTMIN;
+        }
+        if (safe_atou(s, &u) >= 0) {
+                signo = (int) u + offset;
+                if (signo > 0 && signo < _NSIG)
+                        return signo;
+        }
+        return -EINVAL;
+}
+
+int signal_from_string_try_harder(const char *s) {
+        int signo;
+        assert(s);
+
+        signo = signal_from_string(s);
+        if (signo <= 0)
+                if (startswith(s, "SIG"))
+                        return signal_from_string(s+3);
+
+        return signo;
+}
diff --git a/src/shared/signal-util.h b/src/shared/signal-util.h
new file mode 100644 (file)
index 0000000..ddf64cd
--- /dev/null
@@ -0,0 +1,41 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+  This file is part of systemd.
+
+  Copyright 2010-2015 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd 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
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <signal.h>
+
+#include "macro.h"
+
+int reset_all_signal_handlers(void);
+int reset_signal_mask(void);
+
+int ignore_signals(int sig, ...);
+int default_signals(int sig, ...);
+int sigaction_many(const struct sigaction *sa, ...);
+
+void sigset_add_many(sigset_t *ss, ...);
+int sigprocmask_many(int how, ...);
+
+const char *signal_to_string(int i) _const_;
+int signal_from_string(const char *s) _pure_;
+
+int signal_from_string_try_harder(const char *s);
index 74a21900318bf1fa0fbe5849c5437017fcf9e195..8a6107969ae1cacc51fe0ef19261ba8834fcfec9 100644 (file)
@@ -93,6 +93,7 @@
 #include "random-util.h"
 #include "terminal-util.h"
 #include "hostname-util.h"
+#include "signal-util.h"
 
 /* Put this test here for a lack of better place */
 assert_cc(EAGAIN == EWOULDBLOCK);
@@ -771,41 +772,6 @@ int readlink_and_canonicalize(const char *p, char **r) {
         return 0;
 }
 
-int reset_all_signal_handlers(void) {
-        int sig, r = 0;
-
-        for (sig = 1; sig < _NSIG; sig++) {
-                struct sigaction sa = {
-                        .sa_handler = SIG_DFL,
-                        .sa_flags = SA_RESTART,
-                };
-
-                /* These two cannot be caught... */
-                if (sig == SIGKILL || sig == SIGSTOP)
-                        continue;
-
-                /* On Linux the first two RT signals are reserved by
-                 * glibc, and sigaction() will return EINVAL for them. */
-                if ((sigaction(sig, &sa, NULL) < 0))
-                        if (errno != EINVAL && r == 0)
-                                r = -errno;
-        }
-
-        return r;
-}
-
-int reset_signal_mask(void) {
-        sigset_t ss;
-
-        if (sigemptyset(&ss) < 0)
-                return -errno;
-
-        if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0)
-                return -errno;
-
-        return 0;
-}
-
 char *strstrip(char *s) {
         char *e;
 
@@ -1561,59 +1527,6 @@ int flush_fd(int fd) {
         }
 }
 
-int sigaction_many(const struct sigaction *sa, ...) {
-        va_list ap;
-        int r = 0, sig;
-
-        va_start(ap, sa);
-        while ((sig = va_arg(ap, int)) > 0)
-                if (sigaction(sig, sa, NULL) < 0)
-                        r = -errno;
-        va_end(ap);
-
-        return r;
-}
-
-int ignore_signals(int sig, ...) {
-        struct sigaction sa = {
-                .sa_handler = SIG_IGN,
-                .sa_flags = SA_RESTART,
-        };
-        va_list ap;
-        int r = 0;
-
-        if (sigaction(sig, &sa, NULL) < 0)
-                r = -errno;
-
-        va_start(ap, sig);
-        while ((sig = va_arg(ap, int)) > 0)
-                if (sigaction(sig, &sa, NULL) < 0)
-                        r = -errno;
-        va_end(ap);
-
-        return r;
-}
-
-int default_signals(int sig, ...) {
-        struct sigaction sa = {
-                .sa_handler = SIG_DFL,
-                .sa_flags = SA_RESTART,
-        };
-        va_list ap;
-        int r = 0;
-
-        if (sigaction(sig, &sa, NULL) < 0)
-                r = -errno;
-
-        va_start(ap, sig);
-        while ((sig = va_arg(ap, int)) > 0)
-                if (sigaction(sig, &sa, NULL) < 0)
-                        r = -errno;
-        va_end(ap);
-
-        return r;
-}
-
 void safe_close_pair(int p[]) {
         assert(p);
 
@@ -1927,35 +1840,6 @@ void rename_process(const char name[8]) {
         }
 }
 
-void sigset_add_many(sigset_t *ss, ...) {
-        va_list ap;
-        int sig;
-
-        assert(ss);
-
-        va_start(ap, ss);
-        while ((sig = va_arg(ap, int)) > 0)
-                assert_se(sigaddset(ss, sig) == 0);
-        va_end(ap);
-}
-
-int sigprocmask_many(int how, ...) {
-        va_list ap;
-        sigset_t ss;
-        int sig;
-
-        assert_se(sigemptyset(&ss) == 0);
-
-        va_start(ap, how);
-        while ((sig = va_arg(ap, int)) > 0)
-                assert_se(sigaddset(&ss, sig) == 0);
-        va_end(ap);
-
-        if (sigprocmask(how, &ss, NULL) < 0)
-                return -errno;
-
-        return 0;
-}
 char *lookup_uid(uid_t uid) {
         long bufsize;
         char *name;
@@ -2344,18 +2228,6 @@ DIR *xopendirat(int fd, const char *name, int flags) {
         return d;
 }
 
-int signal_from_string_try_harder(const char *s) {
-        int signo;
-        assert(s);
-
-        signo = signal_from_string(s);
-        if (signo <= 0)
-                if (startswith(s, "SIG"))
-                        return signal_from_string(s+3);
-
-        return signo;
-}
-
 static char *tag_to_udev_node(const char *tagvalue, const char *by) {
         _cleanup_free_ char *t = NULL, *u = NULL;
         size_t enc_len;
@@ -3312,81 +3184,6 @@ static const char* const ip_tos_table[] = {
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ip_tos, int, 0xff);
 
-static const char *const __signal_table[] = {
-        [SIGHUP] = "HUP",
-        [SIGINT] = "INT",
-        [SIGQUIT] = "QUIT",
-        [SIGILL] = "ILL",
-        [SIGTRAP] = "TRAP",
-        [SIGABRT] = "ABRT",
-        [SIGBUS] = "BUS",
-        [SIGFPE] = "FPE",
-        [SIGKILL] = "KILL",
-        [SIGUSR1] = "USR1",
-        [SIGSEGV] = "SEGV",
-        [SIGUSR2] = "USR2",
-        [SIGPIPE] = "PIPE",
-        [SIGALRM] = "ALRM",
-        [SIGTERM] = "TERM",
-#ifdef SIGSTKFLT
-        [SIGSTKFLT] = "STKFLT",  /* Linux on SPARC doesn't know SIGSTKFLT */
-#endif
-        [SIGCHLD] = "CHLD",
-        [SIGCONT] = "CONT",
-        [SIGSTOP] = "STOP",
-        [SIGTSTP] = "TSTP",
-        [SIGTTIN] = "TTIN",
-        [SIGTTOU] = "TTOU",
-        [SIGURG] = "URG",
-        [SIGXCPU] = "XCPU",
-        [SIGXFSZ] = "XFSZ",
-        [SIGVTALRM] = "VTALRM",
-        [SIGPROF] = "PROF",
-        [SIGWINCH] = "WINCH",
-        [SIGIO] = "IO",
-        [SIGPWR] = "PWR",
-        [SIGSYS] = "SYS"
-};
-
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int);
-
-const char *signal_to_string(int signo) {
-        static thread_local char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1];
-        const char *name;
-
-        name = __signal_to_string(signo);
-        if (name)
-                return name;
-
-        if (signo >= SIGRTMIN && signo <= SIGRTMAX)
-                snprintf(buf, sizeof(buf), "RTMIN+%d", signo - SIGRTMIN);
-        else
-                snprintf(buf, sizeof(buf), "%d", signo);
-
-        return buf;
-}
-
-int signal_from_string(const char *s) {
-        int signo;
-        int offset = 0;
-        unsigned u;
-
-        signo = __signal_from_string(s);
-        if (signo > 0)
-                return signo;
-
-        if (startswith(s, "RTMIN+")) {
-                s += 6;
-                offset = SIGRTMIN;
-        }
-        if (safe_atou(s, &u) >= 0) {
-                signo = (int) u + offset;
-                if (signo > 0 && signo < _NSIG)
-                        return signo;
-        }
-        return -EINVAL;
-}
-
 bool kexec_loaded(void) {
        bool loaded = false;
        char *s;
index eb3595250dcfdc5827c601a8ef6aaa6191161a68..467ae234a0a836baf88f62aa189321722edc6188 100644 (file)
@@ -29,7 +29,6 @@
 #include <stdbool.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <signal.h>
 #include <sched.h>
 #include <limits.h>
 #include <sys/types.h>
@@ -227,9 +226,6 @@ int readlink_value(const char *p, char **ret);
 int readlink_and_make_absolute(const char *p, char **r);
 int readlink_and_canonicalize(const char *p, char **r);
 
-int reset_all_signal_handlers(void);
-int reset_signal_mask(void);
-
 char *strstrip(char *s);
 char *delete_chars(char *s, const char *bad);
 char *truncate_nl(char *s);
@@ -334,10 +330,6 @@ bool fstype_is_network(const char *fstype);
 
 int flush_fd(int fd);
 
-int ignore_signals(int sig, ...);
-int default_signals(int sig, ...);
-int sigaction_many(const struct sigaction *sa, ...);
-
 int fopen_temporary(const char *path, FILE **_f, char **_temp_path);
 
 ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll);
@@ -349,9 +341,6 @@ bool is_device_path(const char *path);
 int dir_is_empty(const char *path);
 char* dirname_malloc(const char *path);
 
-void sigset_add_many(sigset_t *ss, ...);
-int sigprocmask_many(int how, ...);
-
 char* lookup_uid(uid_t uid);
 char* getlogname_malloc(void);
 char* getusername_malloc(void);
@@ -465,11 +454,6 @@ int rlimit_from_string(const char *s) _pure_;
 int ip_tos_to_string_alloc(int i, char **s);
 int ip_tos_from_string(const char *s);
 
-const char *signal_to_string(int i) _const_;
-int signal_from_string(const char *s) _pure_;
-
-int signal_from_string_try_harder(const char *s);
-
 extern int saved_argc;
 extern char **saved_argv;
 
index 897248ab363b0a0bd5ce20c7350424cf8fe22e37..a7b8e54a9ca67e97ccf7439abd2ae44fcb8f2fe1 100644 (file)
@@ -72,6 +72,7 @@
 #include "process-util.h"
 #include "terminal-util.h"
 #include "hostname-util.h"
+#include "signal-util.h"
 
 static char **arg_types = NULL;
 static char **arg_states = NULL;
index b5f4d4f0948e4c81147ada6659eaa141bfe4fb5b..f8807c9150f8aa2c40995357b115a35e02f3fd8b 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "pty.h"
 #include "util.h"
+#include "signal-util.h"
 
 static const char sndmsg[] = "message\n";
 static const char rcvmsg[] = "message\r\n";
index 41cbe81b3db18a2bf70d9ab98284c380f41cd6f0..e0269821d79dac4801ad30f473165ddbc3341640 100644 (file)
@@ -39,6 +39,7 @@
 #include "virt.h"
 #include "process-util.h"
 #include "hostname-util.h"
+#include "signal-util.h"
 
 static void test_streq_ptr(void) {
         assert_se(streq_ptr(NULL, NULL));
index 735668bedec960a64315676aa9df3f56248911e6..d69129ee03447e8b3e852475ebcef531622d8a18 100644 (file)
@@ -24,6 +24,7 @@
 #include "capability.h"
 #include "clock-util.h"
 #include "network-util.h"
+#include "signal-util.h"
 
 #include "timesyncd-manager.h"
 #include "timesyncd-conf.h"
index c440170f950a75092a3d1946838300a52352e37d..97251ef0aa4e7ab7728d05387a5685878ec638ea 100644 (file)
@@ -44,6 +44,7 @@
 #include "def.h"
 #include "process-util.h"
 #include "terminal-util.h"
+#include "signal-util.h"
 
 static enum {
         ACTION_LIST,
index 92dc44f68794a3e98273d24a64a3a6914854a178..a5c3edbff84ac86cc7c33fbbcb320069412c835f 100644 (file)
 #include <sys/wait.h>
 #include <sys/signalfd.h>
 
-#include "udev.h"
 #include "rtnl-util.h"
 #include "event-util.h"
 #include "formats-util.h"
 #include "process-util.h"
+#include "signal-util.h"
+#include "udev.h"
 
 typedef struct Spawn {
         const char *cmd;