+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
int is_escaped = 0;
#endif /* DOS_NT */
int length;
- Lisp_Object handler;
+ Lisp_Object handler, result;
CHECK_STRING (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