;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; see the file COPYING. If not, write to the
+;; along with XEmacs; see the file COPYING. If not, write to the
;; Free Software Foundation, 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
"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.")
(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
(if (and output-buffer
(not (or (bufferp output-buffer) (stringp output-buffer))))
(progn (barf-if-buffer-read-only)
- (push-mark)
+ (push-mark nil (not (interactive-p)))
;; We do not use -f for csh; we will not support broken use of
;; .cshrcs. Even the BSD csh manual says to use
;; "if ($?prompt) exit" before things which are not useful
;; 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
(defun open-network-stream (name buffer host service &optional protocol)
"Open a TCP connection for a service to a host.
-Returns a subprocess-object to represent the connection.
+Returns a process object to represent the connection.
Input and output work as for subprocesses; `delete-process' closes it.
Args are NAME BUFFER HOST SERVICE.
NAME is name for process. It is modified if necessary to make it unique.
;; 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."