chiark / gitweb /
Use new mdup(3mLib) function.
[tripe] / client / tripectl.c
index 0daaacbad1b7ae401f05b3e10d970387a59234cc..514506162429860fd6047c85db2b49159c08b2ca 100644 (file)
@@ -52,6 +52,7 @@
 #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>
@@ -283,7 +284,7 @@ static void logfile(const char *name)
     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);
   }
 }
@@ -367,6 +368,7 @@ int main(int argc, char *argv[])
   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;
@@ -516,11 +518,11 @@ int main(int argc, char *argv[])
     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();