From 557b225f49434596c1aacbf26b613a3efad740bb Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Fri, 19 Sep 2003 01:11:34 +0000 Subject: [PATCH] (open-process): Close input-fdes, output-fdes and error-fdes after duping them to 0, 1 and 2. --- ice-9/popen.scm | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/ice-9/popen.scm b/ice-9/popen.scm index 2a3bdd605..b1450bbd6 100644 --- a/ice-9/popen.scm +++ b/ice-9/popen.scm @@ -106,23 +106,30 @@ (= pt-fileno error-fdes))) (close-fdes pt-fileno)))))) - ;; copy the three selected descriptors to the standard - ;; descriptors 0, 1, 2. note that it's possible that - ;; output-fdes or input-fdes is equal to error-fdes. + ;; Copy the three selected descriptors to the standard + ;; descriptors 0, 1, 2, if not already there (cond ((not (= input-fdes 0)) (if (= output-fdes 0) (set! output-fdes (dup->fdes 0))) (if (= error-fdes 0) (set! error-fdes (dup->fdes 0))) - (dup2 input-fdes 0))) - + (dup2 input-fdes 0) + ;; it's possible input-fdes is error-fdes + (if (not (= input-fdes error-fdes)) + (close-fdes input-fdes)))) + (cond ((not (= output-fdes 1)) (if (= error-fdes 1) (set! error-fdes (dup->fdes 1))) - (dup2 output-fdes 1))) + (dup2 output-fdes 1) + ;; it's possible output-fdes is error-fdes + (if (not (= output-fdes error-fdes)) + (close-fdes output-fdes)))) - (dup2 error-fdes 2) + (cond ((not (= error-fdes 2)) + (dup2 error-fdes 2) + (close-fdes error-fdes))) (apply execlp prog prog args)))