From: Kai Großjohann Date: Sat, 29 Mar 2003 16:34:35 +0000 (+0000) Subject: (Fexpand_file_name): In the no-handler case, after X-Git-Tag: ttn-vms-21-2-B4~10726 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=beb402deed11deee9fdaddb986cc7c51c14082d0;p=emacs.git (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". --- diff --git a/src/ChangeLog b/src/ChangeLog index f79e1633722..accad5d2ede 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2003-03-29 Kai Gro,A_(Bjohann + + * 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,Ad(Brv * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size diff --git a/src/fileio.c b/src/fileio.c index 4f85aa1d6ad..c11a6f6292d 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -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