signal-util: make -1 termination of ignore_signals() argument list unnecessary
Clean up ignore_signals() + default_signals() + sigaction_many() a bit: make it unnecessary to explicitly terminate the signal list with -1. Merge all three calls into a single function that is just called with slightly different parameters. And eliminate an unnecessary extra iteration in its inner for() loop. No change in behaviour.
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
155d626bc6
commit
9c274488a9
+6
-46
@@ -45,11 +45,14 @@ int reset_signal_mask(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sigaction_many_ap(const struct sigaction *sa, int sig, va_list ap) {
|
||||
int r = 0;
|
||||
int sigaction_many_internal(const struct sigaction *sa, ...) {
|
||||
int sig, r = 0;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, sa);
|
||||
|
||||
/* negative signal ends the list. 0 signal is skipped. */
|
||||
for (; sig >= 0; sig = va_arg(ap, int)) {
|
||||
while ((sig = va_arg(ap, int)) >= 0) {
|
||||
|
||||
if (sig == 0)
|
||||
continue;
|
||||
@@ -60,49 +63,6 @@ static int sigaction_many_ap(const struct sigaction *sa, int sig, va_list ap) {
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sigaction_many(const struct sigaction *sa, ...) {
|
||||
va_list ap;
|
||||
int r;
|
||||
|
||||
va_start(ap, sa);
|
||||
r = sigaction_many_ap(sa, 0, ap);
|
||||
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;
|
||||
|
||||
va_start(ap, sig);
|
||||
r = sigaction_many_ap(&sa, sig, ap);
|
||||
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;
|
||||
|
||||
va_start(ap, sig);
|
||||
r = sigaction_many_ap(&sa, sig, ap);
|
||||
va_end(ap);
|
||||
|
||||
return r;
|
||||
|
||||
+22
-3
@@ -8,9 +8,28 @@
|
||||
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, ...);
|
||||
int sigaction_many_internal(const struct sigaction *sa, ...);
|
||||
|
||||
#define ignore_signals(...) \
|
||||
sigaction_many_internal( \
|
||||
&(const struct sigaction) { \
|
||||
.sa_handler = SIG_IGN, \
|
||||
.sa_flags = SA_RESTART \
|
||||
}, \
|
||||
__VA_ARGS__, \
|
||||
-1)
|
||||
|
||||
#define default_signals(...) \
|
||||
sigaction_many_internal( \
|
||||
&(const struct sigaction) { \
|
||||
.sa_handler = SIG_DFL, \
|
||||
.sa_flags = SA_RESTART \
|
||||
}, \
|
||||
__VA_ARGS__, \
|
||||
-1)
|
||||
|
||||
#define sigaction_many(sa, ...) \
|
||||
sigaction_many_internal(sa, __VA_ARGS__, -1)
|
||||
|
||||
int sigset_add_many(sigset_t *ss, ...);
|
||||
int sigprocmask_many(int how, sigset_t *old, ...);
|
||||
|
||||
Reference in New Issue
Block a user