diff src/fileio.c @ 50340:810c2ac4b064

(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".
author Kai Großjohann <kgrossjo@eu.uu.net>
date Sat, 29 Mar 2003 16:34:35 +0000
parents f72d2bd8118d
children 15f94db27199
line wrap: on
line diff
--- a/src/fileio.c	Sat Mar 29 15:31:07 2003 +0000
+++ b/src/fileio.c	Sat Mar 29 16:34:35 2003 +0000
@@ -1026,7 +1026,7 @@
   int is_escaped = 0;
 #endif /* DOS_NT */
   int length;
-  Lisp_Object handler;
+  Lisp_Object handler, result;
 
   CHECK_STRING (name);
 
@@ -1678,8 +1678,19 @@
   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