#include <mLib/daemonize.h>
#include <mLib/darray.h>
#include <mLib/dstr.h>
+#include <mLib/mdup.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
#include <mLib/report.h>
else if (logname)
die(EXIT_FAILURE, d.buf);
if (f & f_syslog)
- syslog(LOG_ERR, d.buf);
+ syslog(LOG_ERR, "%s", d.buf);
dstr_destroy(&d);
}
}
uid_t u = -1;
gid_t g = -1;
int pfd[2], efd[2];
+ mdup_fd md[3];
pid_t kid;
struct sigaction sa;
sigset_t newmask, oldmask;
if ((kid = fork()) < 0)
die(EXIT_FAILURE, "fork failed: %s", strerror(errno));
if (!kid) {
- dup2(pfd[1], STDIN_FILENO);
- dup2(pfd[1], STDOUT_FILENO);
- dup2(efd[1], STDERR_FILENO);
- close(pfd[0]); close(pfd[1]);
- close(efd[0]); close(efd[1]);
+ close(pfd[0]); close(efd[0]);
+ md[0].cur = pfd[1]; md[0].want = STDIN_FILENO;
+ md[1].cur = pfd[1]; md[1].want = STDOUT_FILENO;
+ md[2].cur = efd[1]; md[2].want = STDERR_FILENO;
+ mdup(md, 3);
if (logfp) fclose(logfp);
if (pidfp) fclose(pidfp);
closelog();