]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(leave_dir): If cycle-check's saved dev-ino pair matches
authorJim Meyering <jim@meyering.net>
Sun, 12 Mar 2006 22:03:17 +0000 (22:03 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 12 Mar 2006 22:03:17 +0000 (22:03 +0000)
that of the current directory (which we're about to chdir ".." out of),
then save the dev-ino of the parent, instead.

lib/fts-cycle.c

index 13b43dbdd13c97f2dd5fa23f0883702a432dae98..19c5ded4c340df7005a45877915ed14337b57c6f 100644 (file)
@@ -1,6 +1,6 @@
 /* Detect cycles in file tree walks.
 
-   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
    Written by Jim Meyering.
 
@@ -129,9 +129,9 @@ enter_dir (FTS *fts, FTSENT *ent)
 static void
 leave_dir (FTS *fts, FTSENT *ent)
 {
+  struct stat const *st = ent->fts_statp;
   if (fts->fts_options & (FTS_TIGHT_CYCLE_CHECK | FTS_LOGICAL))
     {
-      struct stat const *st = ent->fts_statp;
       struct Active_dir obj;
       void *found;
       obj.dev = st->st_dev;
@@ -141,6 +141,13 @@ leave_dir (FTS *fts, FTSENT *ent)
        abort ();
       free (found);
     }
+  else
+    {
+      FTSENT *parent = ent->fts_parent;
+      if (parent != NULL)
+       CYCLE_CHECK_REFLECT_CHDIR_UP (fts->fts_cycle.state,
+                                     *(parent->fts_statp), *st);
+    }
 }
 
 /* Free any memory used for cycle detection.  */