]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: make du's cycle-detection code consistent
authorJim Meyering <meyering@redhat.com>
Sat, 7 Nov 2009 07:17:28 +0000 (08:17 +0100)
committerJim Meyering <meyering@redhat.com>
Sat, 7 Nov 2009 07:43:05 +0000 (08:43 +0100)
* src/du.c (process_file): Revert the du.c-changing part of
commit 8ba5d1a7. Use cycle_warning_required instead.

src/du.c

index c33bbb7a04053e796fe32c991c32e5ca5866993d..bee006d04cebb67d3fe0573465d6b9708e59b895 100644 (file)
--- a/src/du.c
+++ b/src/du.c
@@ -65,10 +65,6 @@ extern bool fts_debug;
 /* Initial size of the hash table.  */
 #define INITIAL_TABLE_SIZE 103
 
-/* Select one of the three FTS_ options that control if/when
-     to follow a symlink.  */
-static int symlink_deref_bits = FTS_PHYSICAL;
-
 /* Hash structure for inode and device numbers.  The separate entry
    structure makes it easier to rehash "in place".  */
 struct entry
@@ -498,14 +494,9 @@ process_file (FTS *fts, FTSENT *ent)
       break;
 
     case FTS_DC:               /* directory that causes cycles */
-      /* When dereferencing no symlinks, or when dereferencing only
-         those listed on the command line and we're not processing
-         a command-line argument, then a cycle is a serious problem. */
-      if (symlink_deref_bits == FTS_PHYSICAL
-          || (symlink_deref_bits == (FTS_COMFOLLOW | FTS_PHYSICAL)
-              && ent->fts_level != FTS_ROOTLEVEL))
+      if (cycle_warning_required (fts, ent))
         {
-          emit_cycle_warning (ent->fts_path);
+          emit_cycle_warning (file);
           return false;
         }
       ok = true;
@@ -677,6 +668,10 @@ main (int argc, char **argv)
   /* Bit flags that control how fts works.  */
   int bit_flags = FTS_TIGHT_CYCLE_CHECK | FTS_DEFER_STAT;
 
+  /* Select one of the three FTS_ options that control if/when
+     to follow a symlink.  */
+  int symlink_deref_bits = FTS_PHYSICAL;
+
   /* If true, display only a total for each argument. */
   bool opt_summarize_only = false;