(shell-quote-argument): Quote argument with double
authorEli Zaretskii <eliz@gnu.org>
Tue, 14 Sep 1999 10:11:19 +0000 (10:11 +0000)
committerEli Zaretskii <eliz@gnu.org>
Tue, 14 Sep 1999 10:11:19 +0000 (10:11 +0000)
quotes for ms-dos.

lisp/subr.el

index 8ade8bc..c2e0191 100644 (file)
@@ -1148,8 +1148,19 @@ Unless optional argument INPLACE is non-nil, return a new string."
 (defun shell-quote-argument (argument)
   "Quote an argument for passing as argument to an inferior shell."
   (if (eq system-type 'ms-dos)
-      ;; MS-DOS shells don't have quoting, so don't do any.
-      argument
+      ;; Quote using double quotes, but escape any existing quotes in
+      ;; the argument with backslashes.
+      (let ((result "")
+           (start 0)
+           end)
+       (if (or (null (string-match "[^\"]" argument))
+               (< (match-end 0) (length argument)))
+           (while (string-match "[\"]" 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 (eq system-type 'windows-nt)
        (concat "\"" argument "\"")
       (if (equal argument "")