From 524e3b9641aeea77e05fb58de823695af35c79e8 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 16 Jul 2025 08:43:14 -0700 Subject: [PATCH] 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. (cherry picked from commit 2074951c2adff43be49822c344d6cf3fee2e29a5) --- lisp/files.el | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index 3885637ed58..ab3126a55bc 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1128,14 +1128,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))) -- 2.39.5