# HG changeset patch # User Richard M. Stallman # Date 739849488 0 # Node ID 7b357cbaae8b91d119317c4c5cc256e0c64d971e # Parent fd4187a964455f7f7768646130bfcd894fe3f6d3 (file-truename): Don't use expand-file-name to merge a link target into the previous dir. Handle .. and . explicitly. diff -r fd4187a96445 -r 7b357cbaae8b lisp/files.el --- a/lisp/files.el Fri Jun 11 23:43:54 1993 +0000 +++ b/lisp/files.el Sat Jun 12 01:44:48 1993 +0000 @@ -329,16 +329,25 @@ ;; If these are equal, we have the (or a) root directory. (or (string= dir dirfile) (setq dir (file-name-as-directory (file-truename dirfile)))) - ;; Put it back on the file name. - (setq filename (concat dir (file-name-nondirectory filename))) - ;; Is the file name the name of a link? - (setq target (file-symlink-p filename)) - (if target - ;; Yes => chase that link, then start all over - ;; since the link may point to a directory name that uses links. - (file-truename (expand-file-name target dir)) - ;; No, we are done! - filename))))) + (if (equal ".." (file-name-nondirectory filename)) + (directory-file-name (file-name-directory (directory-file-name dir))) + (if (equal "." (file-name-nondirectory filename)) + (directory-file-name dir) + ;; Put it back on the file name. + (setq filename (concat dir (file-name-nondirectory filename))) + ;; Is the file name the name of a link? + (setq target (file-symlink-p filename)) + (if target + ;; Yes => chase that link, then start all over + ;; since the link may point to a directory name that uses links. + ;; We can't safely use expand-file-name here + ;; since target might look like foo/../bar where foo + ;; is itself a link. Instead, we handle . and .. above. + (if (file-name-absolute-p target) + (file-truename target) + (file-truename (concat dir target))) + ;; No, we are done! + filename))))))) (defun file-chase-links (filename) "Chase links in FILENAME until a name that is not a link.