summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcid/main.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/hcid/main.c b/hcid/main.c
index 81dcbda6..a449f37b 100644
--- a/hcid/main.c
+++ b/hcid/main.c
@@ -539,13 +539,11 @@ extern char *optarg;
int main(int argc, char *argv[], char *env[])
{
- int daemon, dofork, sdp, opt, fd;
struct sockaddr_hci addr;
struct hci_filter flt;
struct sigaction sa;
GIOChannel *ctl_io;
-
- daemon = 1; dofork = 1; sdp = 0;
+ int opt, daemonize = 1, sdp = 0;
/* Default HCId settings */
hcid.auto_init = 1;
@@ -562,7 +560,7 @@ int main(int argc, char *argv[], char *env[])
while ((opt = getopt(argc, argv, "nsf:")) != EOF) {
switch (opt) {
case 'n':
- daemon = 0;
+ daemonize = 0;
break;
case 's':
@@ -579,18 +577,9 @@ int main(int argc, char *argv[], char *env[])
}
}
- if (daemon) {
- if (dofork && fork())
- exit(0);
-
- /* Direct stdin,stdout,stderr to '/dev/null' */
- fd = open("/dev/null", O_RDWR);
- dup2(fd, 0); dup2(fd, 1); dup2(fd, 2);
- close(fd);
-
- setsid();
-
- chdir("/");
+ if (daemonize && daemon(0, 0)) {
+ error("Can't daemonize: %s (%d)", strerror(errno), errno);
+ exit(1);
}
umask(0077);