From ff1e93acf2626d2531a97de3b54bce9b5a37bcb5 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Sun, 4 Jan 2009 17:30:40 +0000 Subject: [PATCH] bres: Use mdup to duplicate file descriptors for the child. Organization: Straylight/Edgeware From: Mark Wooding --- bres.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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); -- [mdw]