X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/f819b74dce7f569980e840390925f5294fabeaf0..ff1e93acf2626d2531a97de3b54bce9b5a37bcb5:/bres.c diff --git a/bres.c b/bres.c index 8a73aaf..4efea3c 100644 --- a/bres.c +++ b/bres.c @@ -49,6 +49,7 @@ #include "alloc.h" #include "bres.h" +#include "mdup.h" #include "report.h" #include "sel.h" @@ -716,6 +717,7 @@ static int start(bres_server *rs) { int rfd[2], cfd[2]; pid_t kid; + mdup_fd md[2]; /* --- Make the pipes --- */ @@ -733,12 +735,10 @@ static int start(bres_server *rs) close(rfd[0]); if (server) { - dup2(cfd[0], STDIN_FILENO); - dup2(rfd[1], STDOUT_FILENO); - close(cfd[0]); - close(rfd[1]); - execlp(server, server, (char *)0); - child(STDOUT_FILENO, STDIN_FILENO); + md[0].cur = cfd[0]; md[0].want = STDIN_FILENO; + md[1].cur = rfd[1]; md[1].want = STDOUT_FILENO; + if (mdup(md, 2) || execlp(server, server, (char *)0)) + child(STDOUT_FILENO, STDIN_FILENO); } else child(rfd[1], cfd[0]); _exit(1);