chiark
/
gitweb
/
~mdw
/
mLib
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f819b74
)
bres: Use mdup to duplicate file descriptors for the child.
author
Mark Wooding
<mdw@distorted.org.uk>
Sun, 4 Jan 2009 17:30:40 +0000
(17:30 +0000)
committer
Mark Wooding
<mdw@distorted.org.uk>
Sat, 20 Oct 2012 11:36:07 +0000
(12:36 +0100)
bres.c
patch
|
blob
|
blame
|
history
diff --git
a/bres.c
b/bres.c
index 8a73aaf266925a52c0ccff01fd82377e5ded39c0..4efea3c1902d0cf3d12837d5863b4c57c150a74f 100644
(file)
--- a/
bres.c
+++ b/
bres.c
@@
-49,6
+49,7
@@
#include "alloc.h"
#include "bres.h"
#include "alloc.h"
#include "bres.h"
+#include "mdup.h"
#include "report.h"
#include "sel.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;
{
int rfd[2], cfd[2];
pid_t kid;
+ mdup_fd md[2];
/* --- Make the pipes --- */
/* --- Make the pipes --- */
@@
-733,12
+735,10
@@
static int start(bres_server *rs)
close(rfd[0]);
if (server) {
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);
} else
child(rfd[1], cfd[0]);
_exit(1);