From 4a804c27f2c1a1d2f331006e32229c43750132be Mon Sep 17 00:00:00 2001 From: simonmar Date: Mon, 1 Aug 2005 13:23:22 +0000 Subject: [PATCH] [project @ 2005-08-01 13:23:22 by simonmar] Fix [ ghc-Bugs-1249226 ] runInteractiveProcess and closed stdin. --- cbits/runProcess.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/cbits/runProcess.c b/cbits/runProcess.c index dd33b66..0a69421 100644 --- a/cbits/runProcess.c +++ b/cbits/runProcess.c @@ -114,16 +114,24 @@ runInteractiveProcess (char *const args[], } } - dup2 (fdStdInput[0], STDIN_FILENO); - dup2 (fdStdOutput[1], STDOUT_FILENO); - dup2 (fdStdError[1], STDERR_FILENO); + if (fdStdInput[0] != STDIN_FILENO) { + dup2 (fdStdInput[0], STDIN_FILENO); + close(fdStdInput[0]); + } + + if (fdStdOutput[1] != STDOUT_FILENO) { + dup2 (fdStdOutput[1], STDOUT_FILENO); + close(fdStdOutput[1]); + } + + if (fdStdError[1] != STDERR_FILENO) { + dup2 (fdStdError[1], STDERR_FILENO); + close(fdStdError[1]); + } - close(fdStdInput[0]); close(fdStdInput[1]); close(fdStdOutput[0]); - close(fdStdOutput[1]); close(fdStdError[0]); - close(fdStdError[1]); /* the child */ if (environment) { -- 1.7.10.4