(file-chase-links): New arg LIMIT.
authorRichard M. Stallman <rms@gnu.org>
Wed, 9 Apr 2003 01:34:38 +0000 (01:34 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 9 Apr 2003 01:34:38 +0000 (01:34 +0000)
After that many iterations, just return what we've got.

lisp/files.el

index 97a1a49..1d8cc2a 100644 (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)