changeset 6035:a166800910b5

Mention that with FTS_LOGICAL, we use FTS_TIGHT_CYCLE_CHECK.
author Jim Meyering <jim@meyering.net>
date Sun, 14 Aug 2005 14:45:33 +0000
parents 96149b1bbb32
children 14b1cca449ad
files lib/fts_.h
diffstat 1 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lib/fts_.h
+++ b/lib/fts_.h
@@ -88,7 +88,8 @@
 # define FTS_WHITEOUT	0x0080		/* return whiteout information */
 
   /* There are two ways to detect cycles.
-     The lazy way, with which one may process a directory that is a
+     The lazy way (which works only with FTS_PHYSICAL),
+     with which one may process a directory that is a
      part of the cycle several times before detecting the cycle.
      The `tight' way, whereby fts uses more memory (proportional
      to number of `active' directories, aka distance from root
@@ -96,7 +97,19 @@
      to detect any cycle right away.  For example, du must use
      this option to avoid counting disk space in a cycle multiple
      times, but chown -R need not.
-     The default is to use the constant-memory lazy way. */
+     The default is to use the constant-memory lazy way, when possible
+     (see below).
+
+     However, with FTS_LOGICAL (when following symlinks, e.g., chown -L)
+     using lazy cycle detection is inadequate.  For example, traversing
+     a directory containing a symbolic link to a peer directory, it is
+     possible to encounter the same directory twice even though there
+     is no cycle:
+     dir
+     ...
+     slink -> dir
+     So, when FTS_LOGICAL is selected, we have to use a different
+     mode of cycle detection: FTS_TIGHT_CYCLE_CHECK.  */
 # define FTS_TIGHT_CYCLE_CHECK	0x0100
 
 # define FTS_OPTIONMASK	0x01ff		/* valid user option mask */