mes: system*: Support redirection.
[mes.git] / mes / module / mes / posix.mes
index 3f081d5b5004b71a8249c13c907e3cddc4c30bdc..c9c7165f8ee011806d05f16feb7f6b2c60b5cb62 100644 (file)
 
 (define (system* file-name . args)
   (let ((pid (primitive-fork)))
-    (cond ((zero? pid) (apply execlp file-name (list args)))
+    (cond ((zero? pid)
+           (let ((out (current-output-port))
+                 (err (current-error-port)))
+             (when (and (> out 0)
+                        (not (= out 1)))
+               (dup2 out 1))
+             (when (and (> err 0)
+                        (not (= err 2)))
+               (dup2 err 2))
+             (exit (apply execlp file-name (list args)))))
           ((= -1 pid) (error "fork failed:" file-name))
           (else (let ((pid+status (waitpid 0)))
                   (cdr pid+status))))))