summaryrefslogtreecommitdiff
blob: 8a439d52a62e640944e353f180831fb9825d0414 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
commit 5b1daf072556c1fc9a00e8735fa0cdba280c2231
Author: Diego 'Flameeyes' Pettenò <flameeyes@gmail.com>
Date:   Wed Oct 1 13:26:32 2008 +0200

    Fix building on OpenSolaris (without _NSIG definition).
    
    On OpenSolaris, the _NSIG macro is not defined, but NSIG is; as it's
    not possible to use NSIG under glibc (it would miss the SIGRT*
    series), define a SIGNAL_UPPER_BOUND depending on the system (and
    error out if the system lacks both NSIG and _NSIG).

diff --git a/libdaemon/dfork.c b/libdaemon/dfork.c
index f1ba7c1..6b94944 100644
--- a/libdaemon/dfork.c
+++ b/libdaemon/dfork.c
@@ -42,6 +42,14 @@
 #include "dnonblock.h"
 #include "dlog.h"
 
+#if defined(_NSIG) /* On glibc NSIG does not count RT signals */
+# define SIGNAL_UPPER_BOUND _NSIG
+#elif defined(NSIG) /* Solaris defines just this */
+# define SIGNAL_UPPER_BOUND NSIG
+#else
+# error "Unknown upper bound for signals"
+#endif
+
 static int _daemon_retval_pipe[2] = { -1, -1 };
 
 static int _null_open(int f, int fd) {
@@ -665,7 +673,7 @@ int daemon_reset_sigs(int except, ...) {
 int daemon_reset_sigsv(const int except[]) {
     int sig;
 
-    for (sig = 1; sig < _NSIG; sig++) {
+    for (sig = 1; sig < SIGNAL_UPPER_BOUND; sig++) {
         int reset = 1;
 
         switch (sig) {