# HG changeset patch # User Jason Rumney # Date 1215817687 0 # Node ID 5d72c5c4ec9ff3c4810ac85cd78ee9c45c4abcb1 # Parent 3f3c7e8d290f8a3c1a914f49cc27553a683a0e81 (file-truename): Get truename of ancestors if file does not exist on Windows. diff -r 3f3c7e8d290f -r 5d72c5c4ec9f lisp/files.el --- a/lisp/files.el Fri Jul 11 18:18:34 2008 +0000 +++ b/lisp/files.el Fri Jul 11 23:08:07 2008 +0000 @@ -859,8 +859,19 @@ (setq filename (funcall handler 'file-truename filename)) ;; If filename contains a wildcard, newname will be the old name. (unless (string-match "[[*?]" filename) - ;; If filename exists, use the long name - (setq filename (or (w32-long-file-name filename) filename)))) + ;; If filename exists, use the long name. If it doesn't exist, + ;; drill down until we find a directory that exists, and use + ;; the long name of that, with the extra non-existent path + ;; components concatenated. + (let ((longname (w32-long-file-name filename)) + missing rest) + (if longname + (setq filename longname) + ;; include the preceding directory separator in the missing + ;; part so subsequent recursion on the rest works. + (setq missing (concat "/" (file-name-nondirectory filename))) + (setq rest (substring filename 0 (* -1 (length missing)))) + (setq filename (concat (file-truename rest) missing)))))) (setq done t))) ;; If this file directly leads to a link, process that iteratively