On Darwin posix_spawnp is not considered secured and therefore we fallback to Gnulib's version. That one however does not return ENOENT when the file does not exist, but PID of the child process. This seems to be allowed by the standard.
* test-suite/tests/posix.test (skip-on-darwin): New procedure. ("spawn")["file not file"]: Skip on Darwin. --- test-suite/tests/posix.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test-suite/tests/posix.test b/test-suite/tests/posix.test index ac5a3b289..95692eeb1 100644 --- a/test-suite/tests/posix.test +++ b/test-suite/tests/posix.test @@ -22,6 +22,9 @@ #:use-module (test-suite lib) #:use-module ((rnrs io ports) #:select (get-string-all))) +(define (skip-on-darwin) + (when (string-ci=? "darwin" (vector-ref (uname) 0)) + (throw 'untested))) ;; FIXME: The following exec tests are disabled since on an i386 debian with ;; glibc 2.3.2 they seem to interact badly with threads.test, the latter @@ -475,6 +478,11 @@ (pass-if-equal "file not found" ENOENT + ;; Actually "skip-if-posix_spawn-replaced" would be preferred, since the + ;; behavior below is not implemented in gnulib, but I do not know how to + ;; write such test. However due to posix_spawnp being buggy on MacOS it is + ;; always replaced, so whatever. + (skip-on-darwin) (catch 'system-error (lambda () (spawn "this-does-not-exist" '("nope") -- 2.45.2