r9086: Automated commit for Debian build of kmrcl upstream-version-1.69
[kmrcl.git] / os.lisp
diff --git a/os.lisp b/os.lisp
index 954a27f84796e1d277d29cd14319e60a92f01883..2e524416e83e2d06d620437170fb11f7c8d00907 100644 (file)
--- a/os.lisp
+++ b/os.lisp
@@ -19,24 +19,34 @@ synchronously execute the result using a Bourne-compatible shell,
 returns (VALUES string-output error-output exit-status)"
   (let ((command (apply #'format nil control-string args)))
     #+sbcl
-    (let ((process (sb-ext:run-program  
+    (let* ((process (sb-ext:run-program  
                    "/bin/sh"
                    (list "-c" command)
-                   :input nil :output :stream :error :stream)))
+                   :input nil :output :stream :error :stream))
+          (output (read-stream-to-string (sb-impl::process-output process)))
+          (error (read-stream-to-string (sb-impl::process-error process))))
+      (close (sb-impl::process-output process))
+      (close (sb-impl::process-error process))
       (values
-       (sb-impl::process-output process)
-       (sb-impl::process-error process)
-       (sb-impl::process-exit-code process)))
+       output
+       error
+       (sb-impl::process-exit-code process)))    
+
     
     #+(or cmu scl)
-    (let ((process (ext:run-program  
-                   "/bin/sh"
-                   (list "-c" command)
-                   :input nil :output :stream :error :stream)))
+    (let* ((process (ext:run-program  
+                    "/bin/sh"
+                    (list "-c" command)
+                    :input nil :output :stream :error :stream))
+          (output (read-stream-to-string (ext::process-output process)))
+          (error (read-stream-to-string (ext::process-error process))))
+      (close (ext::process-output process))
+      (close (ext::process-error process))
+
       (values
-       (ext::process-output process)
-       (ext::process-error process)
-       (ext::process-exit-code process)))    
+       output
+       error
+       (ext::process-exit-code process)))
 
     #+allegro
     (multiple-value-bind (output error status)
@@ -45,14 +55,14 @@ returns (VALUES string-output error-output exit-status)"
     
     #+lispworks
     ;; BUG: Lispworks combines output and error streams
-    (let ((output (make-output-string-stream)))
+    (let ((output (make-string-output-stream)))
       (unwind-protect
          (let ((status 
                 (system:call-system-showing-output
                  command
                  :shell-type "/bin/sh"
                  :output-stream output)))
-           (values (get-output-string output) nil status))
+           (values (get-output-stream-string output) nil status))
        (close output)))
     
     #+clisp