diff options
Diffstat (limited to 'pand/main.c')
-rw-r--r-- | pand/main.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/pand/main.c b/pand/main.c index 50b355b6..fd77e4ab 100644 --- a/pand/main.c +++ b/pand/main.c @@ -443,7 +443,7 @@ static int write_pidfile(void) if (fd == -1) { /* Try to open the file for read. */ fd = open(pidfile, O_RDONLY); - if(fd == -1) { + if (fd < 0) { syslog(LOG_ERR, "Could not read old pidfile: %s(%d)", strerror(errno), errno); return -1; @@ -464,7 +464,8 @@ static int write_pidfile(void) } pid = 0; - fscanf(f, "%d", &pid); + if (fscanf(f, "%d", &pid) != 1) + pid = 0; fclose(f); if (pid) { @@ -706,19 +707,9 @@ int main(int argc, char *argv[]) sigaction(SIGTERM, &sa, NULL); sigaction(SIGINT, &sa, NULL); - if (detach) { - if (fork()) - exit(0); - - /* Direct stdin,stdout,stderr to '/dev/null' */ - { - int fd = open("/dev/null", O_RDWR); - dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); - close(fd); - } - - setsid(); - chdir("/"); + if (detach && daemon(0, 0)) { + perror("Can't start daemon"); + exit(1); } openlog("pand", LOG_PID | LOG_NDELAY | LOG_PERROR, LOG_DAEMON); |