summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-06-11 11:55:44 +0000
committerEric Andersen <andersen@codepoet.org>2002-06-11 11:55:44 +0000
commite26a5970cadb10b06977ddb5928c36d8b1be1367 (patch)
treebc3c5571885f40c5da4a01560f2b1169367e662f
parent417197ca7ced6f14701137a989dfe0e88edeb6e9 (diff)
A patch from Ted Phelps to fix popen(). Ted writes:
There is a minor bug in the implementation of popen(). In the case where the file descriptor returned from its call to pipe() is the same as the file descriptor that it is meant to be (where the dup2() branch is not taken), the end of the pipe is still closed by close(reading) even though it shouldn't be. Thanks Ted!
-rw-r--r--libc/stdio/popen.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libc/stdio/popen.c b/libc/stdio/popen.c
index cddc9d6c4..a77a82e66 100644
--- a/libc/stdio/popen.c
+++ b/libc/stdio/popen.c
@@ -34,8 +34,8 @@ FILE *popen (const char *command, const char *mode)
if ((fp = fdopen(pnr, mode)) != NULL) {
if ((pid = vfork()) == 0) { /* vfork -- child */
close(pnr);
- close(reading);
if (pr != reading) {
+ close(reading);
dup2(pr, reading);
close(pr);
}