]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix expand-file-name on DOS_NT systems when /: escaping is used
authorEli Zaretskii <eliz@gnu.org>
Tue, 27 Dec 2016 08:12:06 +0000 (10:12 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 27 Dec 2016 08:12:06 +0000 (10:12 +0200)
* src/fileio.c (Fexpand_file_name) [DOS_NT]: Don't expand "~" in
file names escaped by "/:".  Don't recursively expand
default-directory escaped with "/:" which is not followed by a
drive spec.  (Bug#25183)

src/fileio.c

index 3ba85b2b90335c214800b840f9c4c0f3cd324d91..1a744e02e2853d4863efea154c9e18d642322f77 100644 (file)
@@ -884,6 +884,11 @@ filesystem tree, not (expand-file-name ".."  dirname).  */)
        /* Detect MSDOS file names with drive specifiers.  */
        && ! (IS_DRIVE (o[0]) && IS_DEVICE_SEP (o[1])
              && IS_DIRECTORY_SEP (o[2]))
+       /* Detect escaped file names without drive spec after "/:".
+          These should not be recursively expanded, to avoid
+          including the default directory twice in the expanded
+          result.  */
+       && ! (o[0] == '/' && o[1] == ':')
 #ifdef WINDOWSNT
        /* Detect Windows file names in UNC format.  */
        && ! (IS_DIRECTORY_SEP (o[0]) && IS_DIRECTORY_SEP (o[1]))
@@ -1064,7 +1069,11 @@ filesystem tree, not (expand-file-name ".."  dirname).  */)
 
   newdir = newdirlim = 0;
 
-  if (nm[0] == '~')            /* prefix ~ */
+  if (nm[0] == '~'             /* prefix ~ */
+#ifdef DOS_NT
+    && !is_escaped             /* don't expand ~ in escaped file names */
+#endif
+      )
     {
       if (IS_DIRECTORY_SEP (nm[1])
          || nm[1] == 0)        /* ~ by itself */