~ chicken-core (chicken-5) 9f253b3c55b0a2592babc1b3852a491e700d9202


commit 9f253b3c55b0a2592babc1b3852a491e700d9202
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Sun Jun 4 00:55:02 2023 +0200
Commit:     Felix Winkelmann <felix.winkelmann@bevuta.com>
CommitDate: Mon Jun 5 14:52:54 2023 +0200

    Pass executed filename to execv[pe] unmodified when calling process-execute
    
    Programs created via `process-execute` cannot currently determine their
    real location from argv[0], since the directory part is discarded before
    the executed filename is added to argv[0]. This change simply passes the
    filename verrbatim, which is less surprising.
    
    Signed-off-by: Felix Winkelmann <felix.winkelmann@bevuta.com>
    
    (amended to remove unnecessary let-binding)

diff --git a/NEWS b/NEWS
index 6ecbbad2..c181866f 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,8 @@
   - Added "locative-index", kindly contributed by John Croisant.
   - Added "fp*+" (fused multiply-add) to "chicken.flonum" module
     (suggested by Christian Himpe).
+  - The `process-execute` procedure now sets argv[0] to the unmodified
+    filename. Previously, the directory part would be stripped.
 
 - Tools
   - The -R option for csi and csc now accepts list-notation like
diff --git a/posix-common.scm b/posix-common.scm
index caa19e57..8ee394c0 100644
--- a/posix-common.scm
+++ b/posix-common.scm
@@ -709,11 +709,9 @@ EOF
    lst))
 
 (define call-with-exec-args
-  (let ((pathname-strip-directory pathname-strip-directory)
-	(nop (lambda (x) x)))
+  (let ((nop (lambda (x) x)))
     (lambda (loc filename argconv arglist envlist proc)
-      (let* ((stripped-filename (pathname-strip-directory filename))
-	     (args (cons stripped-filename arglist)) ; Add argv[0]
+      (let* ((args (cons filename arglist)) ; Add argv[0]
 	     (argbuf (list->c-string-buffer args argconv loc))
 	     (envbuf #f))
 
Trap