+/* install the handlers */
+static int install(void (*handler)(int), int *signals)
+{
+ int result = 1;
+ struct sigaction sa;
+
+ sa.sa_handler = handler;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_NODEFER;
+ while(*signals > 0) {
+ if (sigaction(*signals, &sa, NULL) < 0) {
+ ERROR("failed to install signal handler for signal %s: %m", strsignal(*signals));
+ result = 0;
+ }
+ signals++;
+ }
+ return result;
+}
+