diff --git a/test/test-run-program.script b/test/test-run-program.script index 76b1dc6..7cdddcf 100644 --- a/test/test-run-program.script +++ b/test/test-run-program.script @@ -1,6 +1,10 @@ ;; -*- Lisp -*- (declaim (optimize (debug 3) (safety #-gcl 3 #+gcl 0))) +#+clisp (ext:without-package-lock () + (trace uiop:run-program uiop/run-program::%run-program uiop/run-program::%system + ext:shell ext:run-shell-command ext:run-program)) + ;; On Windows, normalize away CRLF into jut the unixy LF. (defun dewindowize (x) (block () diff --git a/uiop/filesystem.lisp b/uiop/filesystem.lisp index abad362..2415299 100644 --- a/uiop/filesystem.lisp +++ b/uiop/filesystem.lisp @@ -116,7 +116,7 @@ or the original (parsed) pathname if it is false (the default)." (cond (truename foundtrue) (foundtrue p))))) - (let* ((fs (find-symbol* '#:file-stat :posix nil)) + (let* ((fs (or #-os-windows (find-symbol* '#:file-stat :posix nil))) (pp (find-symbol* '#:probe-pathname :ext nil)) (resolve (if pp `(ignore-errors (,pp p)) diff --git a/uiop/run-program.lisp b/uiop/run-program.lisp index 5102f7d..a11d609 100644 --- a/uiop/run-program.lisp +++ b/uiop/run-program.lisp @@ -410,7 +410,7 @@ It returns a process-info plist with possible keys: ;; NB: these implementations have unix vs windows set at compile-time. (declare (ignorable if-input-does-not-exist if-output-exists if-error-output-exists)) (assert (not (and wait (member :stream (list input output error-output))))) - #-(or allegro clozure cmu (and lispworks os-unix) sbcl scl) + #-(or allegro clisp clozure cmu (and lispworks os-unix) sbcl scl) (progn command keys directory (error "run-program not available")) #+(or allegro clisp clozure cmu (and lispworks os-unix) sbcl scl) @@ -435,10 +435,10 @@ It returns a process-info plist with possible keys: #-allegro (with-current-directory (#-sbcl directory) #+clisp - (flet ((run (f &rest args) + (flet ((run (f x &rest args) (multiple-value-list - (apply f :input %input :output %output - :allow-other-keys t `(,@args ,@keys))))) + (apply f x :input %input :output %output + :allow-other-keys t `(,@args ,@keys))))) (assert (eq %error-output :terminal)) ;;; since we now always return a code, we can't use this code path, anyway! (etypecase %command @@ -769,14 +769,17 @@ It returns a process-info plist with possible keys: #+(or allegro clozure cmu (and lispworks os-unix) sbcl scl) (%wait-process-result (apply '%run-program (%normalize-system-command command) :wait t keys)) - #+(or abcl clisp cormanlisp ecl gcl (and lispworks os-windows) mkcl xcl) + #+(or abcl cormanlisp clisp ecl gcl (and lispworks os-windows) mkcl xcl) (let ((%command (%redirected-system-command command input output error-output directory))) #+(and lispworks os-windows) (system:call-system %command :current-directory directory :wait t) - #-(and lispworks os-windows) + #+clisp + (%wait-process-result + (apply '%run-program %command :wait t + :input :interactive :output :interactive :error-output :interactive keys)) + #-(or clisp (and lispworks os-windows)) (with-current-directory ((unless (os-unix-p) directory)) #+abcl (ext:run-shell-command %command) - #+clisp (clisp-exit-code (ext:shell %command)) #+cormanlisp (win32:system %command) #+ecl (let ((*standard-input* *stdin*) (*standard-output* *stdout*)