Avoid some syscalls in locate-dominating-file

* lisp/files.el (locate-dominating-file): Do not call
file-directory-p each time through a loop ascending the directory
hierarchy, as the file must be a directory after the first loop
iteration.  Instead, call file-directory-p just once, before the
loop starts, and do this only if the file name is not already that
of a directory.
This commit is contained in:
Paul Eggert 2025-07-16 08:43:14 -07:00
parent 94b2a0b2fc
commit 2074951c2a

View file

@ -1212,14 +1212,15 @@ the function needs to examine, starting with FILE."
;; Represent /home/luser/foo as ~/foo so that we don't try to look for
;; `name' in /home or in /.
(setq file (abbreviate-file-name (expand-file-name file)))
(when (and (not (directory-name-p file))
(file-directory-p file))
(setq file (file-name-as-directory file)))
(let ((root nil)
try)
(while (not (or root
(null file)
(string-match locate-dominating-stop-dir-regexp file)))
(setq file (if (file-directory-p file)
file
(file-name-directory file))
(setq file (file-name-directory file)
try (if (stringp name)
(file-exists-p (expand-file-name name file))
(funcall name file)))