diff options
| -rw-r--r-- | hcid/main.c | 21 | 
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);  | 
