conf.h, scan.h: Remove dead header files.
[fwd] / exec.c
diff --git a/exec.c b/exec.c
index b82eeea..9b7e87b 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -464,6 +464,7 @@ static void xept_attach(endpt *e, reffd *in, reffd *out)
 
   if (kid == 0) {
     xopts *xo = xe->xo;
+    mdup_fd md[3];
 
     /* --- Fiddle with the file descriptors --- *
      *
@@ -473,18 +474,14 @@ static void xept_attach(endpt *e, reffd *in, reffd *out)
      */
 
     close(fd[0]);
-    if (dup2(in->fd, STDIN_FILENO) < 0 ||
-       dup2(out->fd, STDOUT_FILENO) < 0 ||
-       dup2(fd[1], STDERR_FILENO) < 0) {
+    md[0].cur = in->fd;  md[0].want = STDIN_FILENO;
+    md[1].cur = out->fd; md[1].want = STDOUT_FILENO;
+    md[2].cur = fd[1];   md[2].want = STDERR_FILENO;
+    if (mdup(md, 3)) {
       moan("couldn't manipulate file descriptors: %s", strerror(errno));
       _exit(1);
     }
 
-    if (in->fd > 2)
-      close(in->fd);
-    if (out->fd > 2)
-      close(out->fd);
-
     fdflags(STDIN_FILENO, O_NONBLOCK, 0, FD_CLOEXEC, 0);
     fdflags(STDOUT_FILENO, O_NONBLOCK, 0, FD_CLOEXEC, 0);
     fdflags(STDERR_FILENO, O_NONBLOCK, 0, FD_CLOEXEC, 0);
@@ -752,7 +749,7 @@ static int exec_option(xdata *x, scanner *sc)
     token(sc);
     if (sc->t == '=')
       token(sc);
-    conf_name(sc, '/', &d);
+    conf_fname(sc, &d);
     xo->dir = xstrdup(d.buf);
     dstr_destroy(&d);
     CONF_ACCEPT;
@@ -766,7 +763,7 @@ static int exec_option(xdata *x, scanner *sc)
     token(sc);
     if (sc->t == '=')
       token(sc);
-    conf_name(sc, '/', &d);
+    conf_fname(sc, &d);
     xo->root = xstrdup(d.buf);
     dstr_destroy(&d);
     CONF_ACCEPT;
@@ -1035,7 +1032,7 @@ static void xsource_attach(source *s, scanner *sc, target *t)
     ee->ops->close(ee);
     goto tidy;
   }
-  endpt_join(e, ee);
+  endpt_join(e, ee, xs->s.desc);
 
   /* --- Dispose of source and target --- */