diff options
| -rw-r--r-- | src/linux/daemon.c | 22 | 
1 files changed, 10 insertions, 12 deletions
| diff --git a/src/linux/daemon.c b/src/linux/daemon.c index 3750fc34..afb8019f 100644 --- a/src/linux/daemon.c +++ b/src/linux/daemon.c @@ -3,7 +3,16 @@  int daemon(int nochdir, int noclose)  { -	int fd; +	if (!nochdir && chdir("/")) +		return -1; +	if (!noclose) { +		int fd, failed = 0; +		if ((fd = open("/dev/null", O_RDWR)) < 0) return -1; +		if (dup2(fd, 0) < 0 || dup2(fd, 1) < 0 || dup2(fd, 2) < 0) +			failed++; +		if (fd > 2) close(fd); +		if (failed) return -1; +	}  	switch(fork()) {  	case 0: break; @@ -19,16 +28,5 @@ int daemon(int nochdir, int noclose)  	default: _exit(0);  	} -	if (!nochdir && chdir("/")) -		return -1; -	if (!noclose) { -		int failed = 0; -		if ((fd = open("/dev/null", O_RDWR)) < 0) return -1; -		if (dup2(fd, 0) < 0 || dup2(fd, 1) < 0 || dup2(fd, 2) < 0) -			failed++; -		if (fd > 2) close(fd); -		if (failed) return -1; -	} -  	return 0;  } | 
