]> git.eshelyaron.com Git - emacs.git/commitdiff
Fixed file-truename when w32-unicode-filenames is nil, fixed its doc.
authorEli Zaretskii <eliz@gnu.org>
Mon, 9 Dec 2013 19:18:58 +0000 (21:18 +0200)
committerEli Zaretskii <eliz@gnu.org>
Mon, 9 Dec 2013 19:18:58 +0000 (21:18 +0200)
src/w32.c
src/w32term.c

index 7e32da84c58cc50b18d48c436e7662fc151ef574..db0b4fee4855b395d75c2d53bd3454cb48403786 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -2123,7 +2123,7 @@ parse_root (const char * name, const char ** pPath)
 static int
 get_long_basename (char * name, char * buf, int size)
 {
-  HANDLE dir_handle;
+  HANDLE dir_handle = INVALID_HANDLE_VALUE;
   char fname_utf8[MAX_UTF8_PATH];
   int len = 0;
   int cstatus = -1;
@@ -2148,9 +2148,19 @@ get_long_basename (char * name, char * buf, int size)
       WIN32_FIND_DATAA find_data_ansi;
 
       filename_to_ansi (name, fname_ansi);
-      dir_handle = FindFirstFileA (fname_ansi, &find_data_ansi);
-      if (dir_handle != INVALID_HANDLE_VALUE)
-       cstatus = filename_from_ansi (find_data_ansi.cFileName, fname_utf8);
+      /* If the ANSI name includes ? characters, it is not encodable
+        in the ANSI codepage.  In that case, we deliver the question
+        marks to the caller; calling FindFirstFileA in this case
+        could return some unrelated file name in the same
+        directory.  */
+      if (_mbspbrk (fname_ansi, "?"))
+       cstatus = filename_from_ansi (fname_ansi, fname_utf8);
+      else
+       {
+         dir_handle = FindFirstFileA (fname_ansi, &find_data_ansi);
+         if (dir_handle != INVALID_HANDLE_VALUE)
+           cstatus = filename_from_ansi (find_data_ansi.cFileName, fname_utf8);
+       }
     }
 
   if (cstatus == 0 && (len = strlen (fname_utf8)) < size)
index 64febea6a1a45da224563beb1576d98d4c06f303..2b91aa99dc242a76e9d23f3c55c5e1bbfab846cd 100644 (file)
@@ -6674,7 +6674,9 @@ specified by `file-name-coding-system'.
 
 This variable is set to non-nil by default when Emacs runs on Windows
 systems of the NT family, including W2K, XP, Vista, Windows 7 and
-Windows 8.  It is set to nil on Windows 9X.  */);
+Windows 8.  It is set to nil on Windows 9X.
+
+Do NOT change the value of this variable, except for debugging purposes!  */);
   w32_unicode_filenames = 0;
 
   /* Tell Emacs about this window system.  */