Mercurial > emacs
changeset 3670:7b357cbaae8b
(file-truename): Don't use expand-file-name to merge
a link target into the previous dir. Handle .. and . explicitly.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 12 Jun 1993 01:44:48 +0000 |
parents | fd4187a96445 |
children | dffbfae75c92 |
files | lisp/files.el |
diffstat | 1 files changed, 19 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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.