changeset 112249:785e3b6e720b

Fix bug #6684 with shell pipelines on MS-Windows. progmodes/grep.el (grep-compute-defaults): Quote the program file name after the pipe symbol in Grep templates. jka-compr.el (jka-compr-partial-uncompress): Likewise.
author Eli Zaretskii <eliz@gnu.org>
date Sun, 09 Jan 2011 19:52:57 +0200
parents 6335f5f3cb72
children baabeab57e3e
files lisp/ChangeLog lisp/jka-compr.el lisp/progmodes/grep.el
diffstat 3 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Jan 08 17:15:51 2011 -0500
+++ b/lisp/ChangeLog	Sun Jan 09 19:52:57 2011 +0200
@@ -1,3 +1,9 @@
+2011-01-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* progmodes/grep.el (grep-compute-defaults): Quote the program
+	file name after the pipe symbol in Grep templates.  (Bug#6784)
+	* jka-compr.el (jka-compr-partial-uncompress): Likewise.
+
 2011-01-08  Lennart Borgman  <lennart.borgman@gmail.com>
 
 	* buff-menu.el (Buffer-menu-buffer-list): New var.
--- a/lisp/jka-compr.el	Sat Jan 08 17:15:51 2011 -0500
+++ b/lisp/jka-compr.el	Sun Jan 09 19:52:57 2011 +0200
@@ -166,8 +166,11 @@
 	  (unwind-protect
 	      (or (memq (call-process
 			 jka-compr-shell infile t nil "-c"
+			 ;; Windows shells need the program file name
+			 ;; after the pipe symbol be quoted if they use
+			 ;; forward slashes as directory separators.
 			 (format
-			  "%s %s 2> %s | %s bs=%d skip=%d %s 2> %s"
+			  "%s %s 2> %s | \"%s\" bs=%d skip=%d %s 2> %s"
 			  prog
 			  (mapconcat 'identity args " ")
 			  err-file
--- a/lisp/progmodes/grep.el	Sat Jan 08 17:15:51 2011 -0500
+++ b/lisp/progmodes/grep.el	Sun Jan 09 19:52:57 2011 +0200
@@ -561,7 +561,10 @@
 	(unless grep-find-command
 	  (setq grep-find-command
 		(cond ((eq grep-find-use-xargs 'gnu)
-		       (format "%s . -type f -print0 | %s -0 -e %s"
+		       ;; Windows shells need the program file name
+		       ;; after the pipe symbol be quoted if they use
+		       ;; forward slashes as directory separators.
+		       (format "%s . -type f -print0 | \"%s\" -0 -e %s"
 			       find-program xargs-program grep-command))
 		      ((eq grep-find-use-xargs 'exec)
 		       (let ((cmd0 (format "%s . -type f -exec %s"
@@ -572,21 +575,21 @@
 				  (shell-quote-argument ";"))
 			  (1+ (length cmd0)))))
 		      (t
-		       (format "%s . -type f -print | %s %s"
+		       (format "%s . -type f -print | \"%s\" %s"
 			       find-program xargs-program grep-command)))))
 	(unless grep-find-template
 	  (setq grep-find-template
 		(let ((gcmd (format "%s <C> %s <R>"
 				    grep-program grep-options)))
 		  (cond ((eq grep-find-use-xargs 'gnu)
-			 (format "%s . <X> -type f <F> -print0 | %s -0 -e %s"
+			 (format "%s . <X> -type f <F> -print0 | \"%s\" -0 -e %s"
 				 find-program xargs-program gcmd))
 			((eq grep-find-use-xargs 'exec)
 			 (format "%s . <X> -type f <F> -exec %s {} %s %s"
 				 find-program gcmd null-device
 				 (shell-quote-argument ";")))
 			(t
-			 (format "%s . <X> -type f <F> -print | %s %s"
+			 (format "%s . <X> -type f <F> -print | \"%s\" %s"
 				 find-program xargs-program gcmd))))))))
     (when (eq grep-highlight-matches 'auto-detect)
       (setq grep-highlight-matches