summaryrefslogtreecommitdiffstats
path: root/libdaemon/dfork.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdaemon/dfork.c')
-rw-r--r--libdaemon/dfork.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libdaemon/dfork.c b/libdaemon/dfork.c
index f1ba7c1..62469bb 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) {
@@ -228,7 +236,9 @@ pid_t daemon_fork(void) {
goto fail;
} else if (pid == 0) {
+#ifdef TIOCNOTTY
int tty_fd;
+#endif
/* Second child */
if (sigaction(SIGCHLD, &sa_old, NULL) < 0) {
@@ -470,9 +480,9 @@ int daemon_close_all(int except_fd, ...) {
int daemon_close_allv(const int except_fds[]) {
struct rlimit rl;
int fd;
- int saved_errno;
#ifdef __linux__
+ int saved_errno;
DIR *d;
@@ -665,7 +675,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) {