File 03_fix_whitespace_via_fish.patch of Package mc

diff --git a/vfs/fish.c b/vfs/fish.c
index 2a2deb6..d03917e 100644
--- a/vfs/fish.c
+++ b/vfs/fish.c
@@ -366,15 +366,15 @@ fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
     dir->timestamp.tv_sec += fish_directory_timeout;
     quoted_path = name_quote (remote_path, 0);
     fish_command (me, super, NONE,
-	    "#LIST /%s\n"
-	    "if ls -1 /%s >/dev/null 2>&1 ;\n"
+	    "#LIST \"/%s\"\n"
+	    "if ls -1 \"/%s\" >/dev/null 2>&1 ;\n"
 	    "then\n"
-	    "ls -lLan /%s 2>/dev/null | grep '^[^cbt]' | (\n"
+	    "ls -lQLan \"/%s\" 2>/dev/null | grep '^[^cbt]' | (\n"
 	      "while read p l u g s m d y n; do\n"
-	        "echo \"P$p $u.$g\nS$s\nd$m $d $y\n:$n\n\"\n"
+	        "echo \"P$p $u.$g\nS$s\nd$m $d $y\n:$n\n\"|sed 's#\\\"##g'\n"
 	      "done\n"
 	    ")\n"
-	    "ls -lan /%s 2>/dev/null | grep '^[cb]' | (\n"
+	    "ls -lQan \"/%s\" 2>/dev/null | grep '^[cb]' | (\n"
 	      "while read p l u g a i m d y n; do\n"
 	        "echo \"P$p $u.$g\nE$a$i\nd$m $d $y\n:$n\n\"\n"
 	      "done\n"
@@ -527,16 +527,16 @@ fish_file_store(struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *loc
      *	instead of stderr. It makes impossible the use of "head || dd"
      *	algorithm for file appending case, therefore just "dd" is used for it.
      */
-
+	name = unescape_string(name);
     print_vfs_message(_("fish: store %s: sending command..."), name );
-    quoted_name = name_quote (name, 0);
+    quoted_name = unescape_string (name_quote (name, 0));
 
     /* FIXME: File size is limited to ULONG_MAX */
     if (!fh->u.fish.append)
 	n = fish_command (me, super, WAIT_REPLY,
-		 "#STOR %lu /%s\n"
+		 "#STOR %lu \"/%s\"\n"
 		 "echo '### 001'\n"
-		 "file=/%s\n"
+		 "file=\"/%s\"\n"
                  "res=`exec 3>&1\n"
 		 "(\n"
 		   "head -c %lu -q - || echo DD >&3\n"
@@ -558,10 +558,10 @@ fish_file_store(struct vfs_class *me, struct vfs_s_fh *fh, char *name, char *loc
 		 (unsigned long) s.st_size);
     else
 	n = fish_command (me, super, WAIT_REPLY,
-		 "#STOR %lu /%s\n"
+		 "#STOR %lu \"/%s\"\n"
 		 "echo '### 001'\n"
 		 "{\n"
-			"file=/%s\n"
+			"file=\"/%s\"\n"
 			"rest=%lu\n"
 			"while [ $rest -gt 0 ]\n"
 			"do\n"
@@ -627,7 +627,7 @@ fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset)
 	return 0;
     quoted_name = name_quote (name, 0);
     g_free (name);
-    name = quoted_name;
+    name = unescape_string(quoted_name);
     fh->u.fish.append = 0;
 
     /*
@@ -637,15 +637,15 @@ fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset)
      * standard output (i.e. over the network).
      */
     offset = fish_command (me, FH_SUPER, WANT_STRING,
-		"#RETR /%s\n"
-		"if dd if=/%s of=/dev/null bs=1 count=1 2>/dev/null ;\n"
+		"#RETR \"/%s\"\n"
+		"if dd if=\"/%s\" of=/dev/null bs=1 count=1 2>/dev/null ;\n"
 		"then\n"
-		"ls -ln /%s 2>/dev/null | (\n"
+		"ls -ln \"/%s\" 2>/dev/null | (\n"
 		  "read p l u g s r\n"
 		  "echo \"$s\"\n"
 		")\n"
 		"echo '### 100'\n"
-		"cat /%s\n"
+		"cat \"//%s\"\n"
 		"echo '### 200'\n"
 		"else\n"
 		"echo '### 500'\n" 
@@ -767,6 +767,7 @@ fish_send_command(struct vfs_class *me, struct vfs_s_super *super, const char *c
 	return -1; \
     } \
     rpath = name_quote (crpath, 0); \
+    rpath = unescape_string(rpath); \
     g_free (mpath);
 
 #define POSTFIX(flags) \
@@ -777,7 +778,7 @@ static int
 fish_chmod (struct vfs_class *me, const char *path, int mode)
 {
     PREFIX
-    g_snprintf(buf, sizeof(buf), "#CHMOD %4.4o /%s\n"
+    g_snprintf(buf, sizeof(buf), "#CHMOD %4.4o \"/%s\"\n"
 				 "chmod %4.4o \"/%s\" 2>/dev/null\n"
 				 "echo '### 000'\n", 
 	    mode & 07777, rpath,
@@ -811,11 +812,11 @@ static int fish_##name (struct vfs_class *me, const char *path1, const char *pat
     return fish_send_command(me, super2, buf, OPT_FLUSH); \
 }
 
-FISH_OP(rename, "#RENAME /%s /%s\n"
-		"mv /%s /%s 2>/dev/null\n"
+FISH_OP(rename, "#RENAME \"/%s\" \"/%s\"\n"
+		"mv \"/%s\" \"/%s\" 2>/dev/null\n"
 		"echo '### 000'" )
-FISH_OP(link,   "#LINK /%s /%s\n"
-		"ln /%s /%s 2>/dev/null\n"
+FISH_OP(link,   "#LINK \"/%s\" \"/%s\"\n"
+		"ln \"/%s\" \"/%s\" 2>/dev/null\n"
 		"echo '### 000'" )
 
 static int fish_symlink (struct vfs_class *me, const char *setto, const char *path)
@@ -824,8 +825,8 @@ static int fish_symlink (struct vfs_class *me, const char *setto, const char *pa
     PREFIX
     qsetto = name_quote (setto, 0);
     g_snprintf(buf, sizeof(buf),
-            "#SYMLINK %s /%s\n"
-	    "ln -s %s /%s 2>/dev/null\n"
+            "#SYMLINK \"%s\" \"/%s\"\n"
+	    "ln -s \"%s\" \"/%s\" 2>/dev/null\n"
 	    "echo '### 000'\n",
 	    qsetto, rpath, qsetto, rpath);
     g_free (qsetto);
@@ -850,16 +851,16 @@ fish_chown (struct vfs_class *me, const char *path, int owner, int group)
     {
 	PREFIX
 	g_snprintf (buf, sizeof(buf),
-    	    "#CHOWN /%s /%s\n"
-	    "chown %s /%s 2>/dev/null\n"
+    	    "#CHOWN /%s \"/%s\"\n"
+	    "chown %s \"/%s\" 2>/dev/null\n"
 	    "echo '### 000'\n", 
 	    sowner, rpath,
 	    sowner, rpath);
 	fish_send_command (me, super, buf, OPT_FLUSH); 
 	/* FIXME: what should we report if chgrp succeeds but chown fails? */
 	g_snprintf (buf, sizeof(buf),
-            "#CHGRP /%s /%s\n"
-	    "chgrp %s /%s 2>/dev/null\n"
+            "#CHGRP /%s \"/%s\"\n"
+	    "chgrp %s \"/%s\" 2>/dev/null\n"
 	    "echo '### 000'\n", 
 	    sgroup, rpath,
 	    sgroup, rpath);
@@ -872,8 +873,8 @@ static int fish_unlink (struct vfs_class *me, const char *path)
 {
     PREFIX
     g_snprintf(buf, sizeof(buf),
-            "#DELE /%s\n"
-	    "rm -f /%s 2>/dev/null\n"
+            "#DELE \"/%s\"\n"
+	    "rm -f \"/%s\" 2>/dev/null\n"
 	    "echo '### 000'\n",
 	    rpath, rpath);
     POSTFIX(OPT_FLUSH);
@@ -884,10 +885,9 @@ static int fish_mkdir (struct vfs_class *me, const char *path, mode_t mode)
     PREFIX
 
     (void) mode;
-
     g_snprintf(buf, sizeof(buf),
-            "#MKD /%s\n"
-	    "mkdir /%s 2>/dev/null\n"
+            "#MKD \"/%s\"\n"
+	    "mkdir \"/%s\" 2>/dev/null\n"
 	    "echo '### 000'\n",
 	    rpath, rpath);
     POSTFIX(OPT_FLUSH);
@@ -897,8 +897,8 @@ static int fish_rmdir (struct vfs_class *me, const char *path)
 {
     PREFIX
     g_snprintf(buf, sizeof(buf),
-            "#RMD /%s\n"
-	    "rmdir /%s 2>/dev/null\n"
+            "#RMD \"/%s\"\n"
+	    "rmdir \"/%s\" 2>/dev/null\n"
 	    "echo '### 000'\n",
 	    rpath, rpath);
     POSTFIX(OPT_FLUSH);
openSUSE Build Service is sponsored by