~ chicken-core (chicken-5) b4252bb33bbc57b3c00c89d2f1ce7c8cf5bf124d
commit b4252bb33bbc57b3c00c89d2f1ce7c8cf5bf124d Author: felix <felix@call-with-current-continuation.org> AuthorDate: Wed Jul 2 15:39:45 2025 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Wed Jul 2 15:39:45 2025 +0100 add arg conversions back to quote args on windows diff --git a/posix-common.scm b/posix-common.scm index 50d892a4..d4fec5ed 100644 --- a/posix-common.scm +++ b/posix-common.scm @@ -785,9 +785,9 @@ EOF (define call-with-exec-args (let ((nop (lambda (x) x))) - (lambda (loc filename arglist envlist proc) + (lambda (loc filename argconv arglist envlist proc) (let* ((args (cons filename arglist)) ; Add argv[0] - (argbuf (list->c-string-buffer args (lambda (x) x) loc)) + (argbuf (list->c-string-buffer args argconv loc)) (envbuf #f)) (handle-exceptions exn diff --git a/posixunix.scm b/posixunix.scm index 8ed61ea6..317f0e5c 100644 --- a/posixunix.scm +++ b/posixunix.scm @@ -1126,7 +1126,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime) (set! chicken.process#process-execute (lambda (filename #!optional (arglist '()) envlist _) (call-with-exec-args - 'process-execute filename arglist envlist + 'process-execute filename (lambda (x) x) arglist envlist (lambda (prg argbuf envbuf) (let ((r (if envbuf (##core#inline "C_u_i_execve" prg argbuf envbuf) diff --git a/posixwin.scm b/posixwin.scm index e4ed6301..53cb9645 100644 --- a/posixwin.scm +++ b/posixwin.scm @@ -728,7 +728,8 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime) (let loop ((i 0)) (cond ((fx= i len) #f) - ((char-whitespace? (string-ref s i)) #t) + ((char-whitespace? (string-ref s i))) + ((char=? #\' (string-ref s i))) (else (loop (fx+ i 1))))))))) (lambda (str) (if (needs-quoting? str) (string-append "\"" str "\"") str)))) @@ -746,21 +747,23 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime) (set! chicken.process#process-execute (lambda (filename #!optional (arglist '()) envlist exactf) - (call-with-exec-args - 'process-execute filename arglist envlist + (let ((conv (if exactf (lambda (x) x) quote-arg-string))) + (call-with-exec-args + 'process-execute filename conv arglist envlist (lambda (prg argbuf envbuf) (##core#inline "C_flushall") (let ((r (if envbuf (##core#inline "C_u_i_execve" prg argbuf envbuf) (##core#inline "C_u_i_execvp" prg argbuf)))) (when (fx= r -1) - (posix-error #:process-error 'process-execute "cannot execute process" filename))))))) + (posix-error #:process-error 'process-execute "cannot execute process" filename)))))))) (set! chicken.process#process-spawn (lambda (mode filename #!optional (arglist '()) envlist exactf) + (let ((conv (if exactf (lambda (x) x) quote-arg-string))) (##sys#check-fixnum mode 'process-spawn) (call-with-exec-args - 'process-spawn filename arglist envlist + 'process-spawn filename conv arglist envlist (lambda (prg argbuf envbuf) (##core#inline "C_flushall") (let ((r (if envbuf @@ -769,7 +772,7 @@ static int set_file_mtime(C_word filename, C_word atime, C_word mtime) (if (fx= r -1) (posix-error #:process-error 'process-spawn "cannot spawn process" filename) - (register-pid r))))))) + (register-pid r)))))))) (define-foreign-variable _shlcmd c-string "C_shlcmd")Trap