[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:6750] expand-file-name with multibyte default_dir



堀口です. 多分 emacs-devel 行きなのですが, とりあえずここで.

 Meadow3 で

(expand-file-name "hoge" "c:/漢字")
"c:/\301\372/hoge"

(expand-file-name "で" "c:/漢字")
"c:/漢字/で"

 です. 結果の string を作るときに name が multibyte かどうかだけを
確認していて default_directory については見ていないのが原因です.

というわけでとりあえず Meadow3にたいするパッチです.

# Meadow で効いているのは最後だけですが..

Index: src/fileio.c
===================================================================
--- src/fileio.c	(revision 3823)
+++ src/fileio.c	(working copy)
@@ -1306,7 +1306,8 @@
 	    {
 	      nm = sys_translate_unix (nm);
 	      return make_specified_string (nm, -1, strlen (nm),
-					    STRING_MULTIBYTE (name));
+				STRING_MULTIBYTE (name)
+			        ||STRING_MULTIBYTE (default_directory));
 	    }
 #endif /* VMS */
 #ifdef DOS_NT
@@ -1319,7 +1320,8 @@
 	    {
 	      if (strcmp (nm, SDATA (name)) != 0)
 		name = make_specified_string (nm, -1, strlen (nm),
-					      STRING_MULTIBYTE (name));
+				 STRING_MULTIBYTE (name)
+				 || STRING_MULTIBYTE (default_directory));
 	    }
 	  else
 #endif
@@ -1329,7 +1331,8 @@
 	      char temp[] = " :";
 
 	      name = make_specified_string (nm, -1, p - nm,
-					    STRING_MULTIBYTE (name));
+				 STRING_MULTIBYTE (name)
+				 || STRING_MULTIBYTE (default_directory));
 	      temp[0] = DRIVE_LETTER (drive);
 	      name = concat2 (build_string (temp), name);
 	    }
@@ -1338,7 +1341,8 @@
 	  if (nm == SDATA (name))
 	    return name;
 	  return make_specified_string (nm, -1, strlen (nm),
-					STRING_MULTIBYTE (name));
+				STRING_MULTIBYTE (name)
+				|| STRING_MULTIBYTE (default_directory));
 #endif /* not DOS_NT */
 	}
     }
@@ -1716,7 +1720,8 @@
 #endif /* DOS_NT */
 
   result = make_specified_string (target, -1, o - target,
-                                  STRING_MULTIBYTE (name));
+                                  STRING_MULTIBYTE (name)
+				  || STRING_MULTIBYTE (default_directory));
 
   /* Again look to see if the file name has special constructs in it
      and perhaps call the corresponding file handler.  This is needed

-- 
ほりぐちきょうたろう