diff --git a/uiop/run-program.lisp b/uiop/run-program.lisp index 3105520ceacc48dd802df1af306ddbc6627127f2..3d99dcea5b388fb9f903e0a4af253e7e5a63db62 100644 --- a/uiop/run-program.lisp +++ b/uiop/run-program.lisp @@ -740,34 +740,34 @@ It returns a process-info object." input :keys keys :stream-easy-p t :active (eq activity :input)) (setf process-info - (apply '%run-program command - :wait wait :input reduced-input :output reduced-output - :error-output (if (eq error-output :output) :output reduced-error-output) - keys)) - (labels ((get-stream (stream-name &optional fallbackp) - (or (slot-value process-info stream-name) - (when fallbackp - (slot-value process-info 'bidir-stream)))) - (run-activity (activity stream-name &optional fallbackp) - (if-let (stream (get-stream stream-name fallbackp)) - (funcall activity stream) - (error 'subprocess-error - :code `(:missing ,stream-name) - :command command :process process-info)))) - (unwind-protect - (ecase activity - ((nil)) - (:input (run-activity input-activity 'input-stream t)) - (:output (run-activity output-activity 'output-stream t)) - (:error-output (run-activity error-output-activity 'error-output-stream))) - (dolist (stream - (cons (slot-value process-info 'error-output-stream) - (if-let (bidir-stream (slot-value process-info 'bidir-stream)) - (list bidir-stream) - (list (slot-value process-info 'input-stream) - (slot-value process-info 'output-stream))))) - (when stream (close stream))) - (setf exit-code (%wait-process-result process-info))))))) + (apply '%run-program command + :wait wait :input reduced-input :output reduced-output + :error-output (if (eq error-output :output) :output reduced-error-output) + keys)) + (labels ((get-stream (stream-name &optional fallbackp) + (or (slot-value process-info stream-name) + (when fallbackp + (slot-value process-info 'bidir-stream)))) + (run-activity (activity stream-name &optional fallbackp) + (if-let (stream (get-stream stream-name fallbackp)) + (funcall activity stream) + (error 'subprocess-error + :code `(:missing ,stream-name) + :command command :process process-info)))) + (unwind-protect + (ecase activity + ((nil)) + (:input (run-activity input-activity 'input-stream t)) + (:output (run-activity output-activity 'output-stream t)) + (:error-output (run-activity error-output-activity 'error-output-stream))) + (dolist (stream + (cons (slot-value process-info 'error-output-stream) + (if-let (bidir-stream (slot-value process-info 'bidir-stream)) + (list bidir-stream) + (list (slot-value process-info 'input-stream) + (slot-value process-info 'output-stream))))) + (when stream (close stream))) + (setf exit-code (%wait-process-result process-info))))))) (%check-result exit-code :command command :process process-info :ignore-error-status ignore-error-status)