pid_t pid;
int null;
- PARA_INFO_LOG("%s", "daemonizing\n");
- if ((pid = fork()) < 0) {
- PARA_EMERG_LOG("%s", "failed to init daemon\n");
- exit(EXIT_FAILURE);
- } else if (pid)
+ PARA_INFO_LOG("daemonizing\n");
+ pid = fork();
+ if (pid < 0)
+ goto err;
+ if (pid)
exit(EXIT_SUCCESS); /* parent exits */
- /* child */
- setsid(); /* become session leader */
- chdir("/");
+ /* become session leader */
+ if (setsid() < 0)
+ goto err;
+ if (chdir("/") < 0)
+ goto err;
umask(0);
-
null = open("/dev/null", O_RDONLY);
if (null < 0)
- exit(EXIT_FAILURE);
- dup2(null, STDIN_FILENO);
- dup2(null, STDOUT_FILENO);
- dup2(null, STDERR_FILENO);
+ goto err;
+ if (dup2(null, STDIN_FILENO) < 0)
+ goto err;
+ if (dup2(null, STDOUT_FILENO) < 0)
+ goto err;
+ if (dup2(null, STDERR_FILENO) < 0)
+ goto err;
close(null);
+ return;
+err:
+ PARA_EMERG_LOG("fatal: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
}
/**
- * fopen() a file in append mode.
+ * fopen() the given file in append mode.
*
* \param logfile_name The name of the file to open.
*
{
FILE *logfile;
- if (!logfile_name)
- return NULL;
- if (!(logfile = fopen(logfile_name, "a"))) {
- PARA_EMERG_LOG("can not open %s, uid: %d\n", logfile_name,
- (int)getuid());
+ assert(logfile_name);
+ logfile = fopen(logfile_name, "a");
+ if (!logfile) {
+ PARA_EMERG_LOG("can not open %s: %s\n", logfile_name,
+ strerror(errno));
exit(EXIT_FAILURE);
}
setlinebuf(logfile);