Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : #pragma once 3 : 4 : #include <signal.h> 5 : 6 : #include "macro.h" 7 : 8 : int reset_all_signal_handlers(void); 9 : int reset_signal_mask(void); 10 : 11 : int ignore_signals(int sig, ...); 12 : int default_signals(int sig, ...); 13 : int sigaction_many(const struct sigaction *sa, ...); 14 : 15 : int sigset_add_many(sigset_t *ss, ...); 16 : int sigprocmask_many(int how, sigset_t *old, ...); 17 : 18 : const char *signal_to_string(int i) _const_; 19 : int signal_from_string(const char *s) _pure_; 20 : 21 : void nop_signal_handler(int sig); 22 : 23 2 : static inline void block_signals_reset(sigset_t *ss) { 24 2 : assert_se(sigprocmask(SIG_SETMASK, ss, NULL) >= 0); 25 2 : } 26 : 27 : #define BLOCK_SIGNALS(...) \ 28 : _cleanup_(block_signals_reset) _unused_ sigset_t _saved_sigset = ({ \ 29 : sigset_t _t; \ 30 : assert_se(sigprocmask_many(SIG_BLOCK, &_t, __VA_ARGS__, -1) >= 0); \ 31 : _t; \ 32 : }) 33 : 34 20 : static inline bool SIGNAL_VALID(int signo) { 35 20 : return signo > 0 && signo < _NSIG; 36 : } 37 : 38 0 : static inline const char* signal_to_string_with_check(int n) { 39 0 : if (!SIGNAL_VALID(n)) 40 0 : return NULL; 41 : 42 0 : return signal_to_string(n); 43 : }