1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

(file-chase-links): New arg LIMIT.

After that many iterations, just return what we've got.
This commit is contained in:
Richard M. Stallman 2003-04-09 01:34:38 +00:00
parent 7963c45564
commit 302fcc98cc

View File

@ -738,14 +738,19 @@ Do not specify them in other calls."
(setq done t))))))))
filename))
(defun file-chase-links (filename)
(defun file-chase-links (filename &optional limit)
"Chase links in FILENAME until a name that is not a link.
Does not examine containing directories for links,
unlike `file-truename'."
(let (tem (count 100) (newname filename))
(while (setq tem (file-symlink-p newname))
Unlike `file-truename', this does not check whether a parent
directory name is a symbolic link.
If the optional argument LIMIT is a number,
it means chase no more than that many links and then stop."
(let (tem (newname filename)
(count 0)
(max (max limit 100)))
(while (and (or (null limit) (< count limit))
(setq tem (file-symlink-p newname)))
(save-match-data
(if (= count 0)
(if (= count max)
(error "Apparent cycle of symbolic links for %s" filename))
;; In the context of a link, `//' doesn't mean what Emacs thinks.
(while (string-match "//+" tem)