]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fexpand_file_name): In the no-handler case, after
authorKai Großjohann <kgrossjo@eu.uu.net>
Sat, 29 Mar 2003 16:34:35 +0000 (16:34 +0000)
committerKai Großjohann <kgrossjo@eu.uu.net>
Sat, 29 Mar 2003 16:34:35 +0000 (16:34 +0000)
expanding, look again for a handler and invoke it.  This is needed
for filenames like "/foo/../user@host:/bar/../baz" -- the first
expansion produces "/user@host:/bar/../baz" which needs to be
expanded again for the finame result "/user@host:/baz".

src/ChangeLog
src/fileio.c

index f79e1633722aa3a0495f97dfa33a2d07fc5da136..accad5d2eded4b471bc383d254b71ae4053c90e1 100644 (file)
@@ -1,3 +1,11 @@
+2003-03-29  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * fileio.c (Fexpand_file_name): In the no-handler case, after
+       expanding, look again for a handler and invoke it.  This is needed
+       for filenames like "/foo/../user@host:/bar/../baz" -- the first
+       expansion produces "/user@host:/bar/../baz" which needs to be
+       expanded again for the finame result "/user@host:/baz".
+
 2003-03-28  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
 
        * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
index 4f85aa1d6ad0fc99f8c8855ab19111704c5cfe39..c11a6f6292d2dcf35740f6a1af7cf1c66863edcf 100644 (file)
@@ -1026,7 +1026,7 @@ See also the function `substitute-in-file-name'.  */)
   int is_escaped = 0;
 #endif /* DOS_NT */
   int length;
-  Lisp_Object handler;
+  Lisp_Object handler, result;
 
   CHECK_STRING (name);
 
@@ -1678,8 +1678,19 @@ See also the function `substitute-in-file-name'.  */)
   CORRECT_DIR_SEPS (target);
 #endif /* DOS_NT */
 
-  return make_specified_string (target, -1, o - target,
-                               STRING_MULTIBYTE (name));
+  result = make_specified_string (target, -1, o - target,
+                                  STRING_MULTIBYTE (name));
+
+  /* Again look to see if the file name has special constructs in it
+     and perhaps call the corresponding file handler.  This is needed
+     for filenames such as "/foo/../user@host:/bar/../baz".  Expanding
+     the ".." component gives us "/user@host:/bar/../baz" which needs
+     to be expanded again. */
+  handler = Ffind_file_name_handler (result, Qexpand_file_name);
+  if (!NILP (handler))
+    return call3 (handler, Qexpand_file_name, result, default_directory);
+
+  return result;
 }
 
 #if 0