summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2005-08-12 13:02:17 +0000
committerJim Meyering <jim@meyering.net>2005-08-12 13:02:17 +0000
commit956fd9d0d15bad6a98dbfe4617c028490ad16066 (patch)
tree50f163db0881bd46cfc6655c90c0ab32e558218b /lib
parentfe90fa6a61fbaa3d1f12d18016076a0ac7559bf0 (diff)
downloadcoreutils-956fd9d0d15bad6a98dbfe4617c028490ad16066.tar.xz
Mention that with FTS_LOGICAL, we use FTS_TIGHT_CYCLE_CHECK.
Diffstat (limited to 'lib')
-rw-r--r--lib/fts_.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/fts_.h b/lib/fts_.h
index 4bf903bd3..42e06c987 100644
--- a/lib/fts_.h
+++ b/lib/fts_.h
@@ -88,7 +88,8 @@ typedef struct {
# 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 @@ typedef struct {
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 */