run/string4 added by certainty on Thu Mar 20 12:04:20 2014

;; returns 4 values
;; * 1 - the output written to stdout
;; * 2 - a boolean indicating if the command exited with 0
;; * 3 - the actual exit status
;; * 4 - the output written to stderr
(define (run/string4* thunk)
  (receive (status stdout stderr) (run/collecting* '(1 2) thunk)
    (values (read-string #f stdout) (zero? status) status (read-string #f stderr))))

(define-syntax run/string4
  (syntax-rules ()
    ((_ ?epf ...)
     (run/string4* (lambda () (exec-epf ?epf ...))))))