X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=lisp%2Fprocess.el;h=690ef8017e0dafc2e1055b916ebac7c3c4684087;hp=e28718972f9752caaf06a560756f3fc8bedf1786;hb=52b3dd1157cecb0f190b11a0874fcb0a5df5e0e2;hpb=98a6e4055a1fa624c592ac06f79287d55196ca37 diff --git a/lisp/process.el b/lisp/process.el index e287189..690ef80 100644 --- a/lisp/process.el +++ b/lisp/process.el @@ -53,6 +53,7 @@ "Executing external commands." :group 'processes) +;; This may be changed to "/c" in win32-native.el. (defvar shell-command-switch "-c" "Switch used to have the shell execute its command line argument.") @@ -121,13 +122,17 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you (when (and stderr (not (eq t stderr))) (setq stderr (expand-file-name stderr)) (setq errbuf (generate-new-buffer "*call-process*"))) - (setq proc - (apply 'start-process-internal "*call-process*" - buffer - ;#### not implemented until my new process - ;changes go in. - ;(if (eq t stderr) buffer (list buffer errbuf)) - program args)) + ;; We read INFILE using the binary coding-system. + ;; We must feed the process using the same coding-system, so + ;; that it really receives the contents of INFILE. + (let ((coding-system-for-write 'binary)) + (setq proc + (apply 'start-process-internal "*call-process*" + buffer + ;#### not implemented until my new process + ;changes go in. + ;(if (eq t stderr) buffer (list buffer errbuf)) + program args))) (if buffer (set-marker (process-mark proc) (point buffer) buffer)) (unwind-protect @@ -272,7 +277,7 @@ In either case, the output is inserted after point (leaving mark after it)." (if (string-match "[ \t]*&[ \t]*$" command) ;; Command ending with ampersand means asynchronous. (progn - (background (substring command 0 (match-beginning 0)))) + (background (substring command 0 (match-beginning 0)) output-buffer)) (shell-command-on-region (point) (point) command output-buffer))))) ;; We have a sentinel to prevent insertion of a termination message @@ -345,7 +350,7 @@ In either case, the output is inserted after point (leaving mark after it)." ;; then replace that region with the output. (progn (setq buffer-read-only nil) (delete-region (max start end) (point-max)) - (delete-region (point-min) (max start end)) + (delete-region (point-min) (min start end)) (setq exit-status (call-process-region (point-min) (point-max) shell-file-name t t nil @@ -446,15 +451,17 @@ lost packets." ;; around shell metachars gets through the last two, and applying ;; the normal VC runtime quoting works with practically all apps. (mswindows-quote-one-vc-runtime-arg argument t) - ;; Quote everything except POSIX filename characters. - ;; This should be safe enough even for really weird shells. - (let ((result "") (start 0) end) - (while (string-match "[^-0-9a-zA-Z_./]" argument start) - (setq end (match-beginning 0) - result (concat result (substring argument start end) - "\\" (substring argument end (1+ end))) - start (1+ end))) - (concat result (substring argument start))))) + (if (equal argument "") + "\"\"" + ;; Quote everything except POSIX filename characters. + ;; This should be safe enough even for really weird shells. + (let ((result "") (start 0) end) + (while (string-match "[^-0-9a-zA-Z_./]" argument start) + (setq end (match-beginning 0) + result (concat result (substring argument start end) + "\\" (substring argument end (1+ end))) + start (1+ end))) + (concat result (substring argument start)))))) (defun shell-command-to-string (command) "Execute shell command COMMAND and return its output as a string."