* lib/fts.c (fts_load): Don't set sp->fts_dev here, since
authorJim Meyering <jim@meyering.net>
Sun, 3 Dec 2006 10:23:10 +0000 (10:23 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 3 Dec 2006 10:23:10 +0000 (10:23 +0000)
p->fts_statp may not yet be defined.
(fts_read): Instead, set it in the caller, once p->fts_statp is
sure to be defined, and corresponds to a top-level directory.

ChangeLog
lib/fts.c

index 7888f38ecd0ad46e2bdb1b1d2e7c17607e782fbb..8f030e1d3e5cb1bc8552e041e61a0089e82bff95 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-12-03  Jim Meyering  <jim@meyering.net>
+
+       * lib/fts.c (fts_load): Don't set sp->fts_dev here, since
+       p->fts_statp may not yet be defined.
+       (fts_read): Instead, set it in the caller, once p->fts_statp is
+       sure to be defined, and corresponds to a top-level directory.
+
 2006-12-01  Jim Meyering  <jim@meyering.net>
 
        * modules/savewd (Depends-on): Add fcntl_h to avoid self-test
index 269792a9835c92368a0f9a4ae2430706e0ed3cfd..fa4d7576fd1e6ee9530d9dba81d79e6c1d6bc801 100644 (file)
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -516,7 +516,6 @@ fts_load (FTS *sp, register FTSENT *p)
                p->fts_namelen = len;
        }
        p->fts_accpath = p->fts_path = sp->fts_path;
-       sp->fts_dev = p->fts_statp->st_dev;
 }
 
 int
@@ -743,9 +742,15 @@ check_for_dir:
                        abort ();
                      }
                  }
+
                sp->fts_cur = p;
                if (p->fts_info == FTS_D)
                  {
+                   /* Now that P->fts_statp is guaranteed to be valid,
+                      if this is a command-line directory, record its
+                      device number, to be used for FTS_XDEV.  */
+                   if (p->fts_level == FTS_ROOTLEVEL)
+                     sp->fts_dev = p->fts_statp->st_dev;
                    Dprintf (("  entering: %s\n", p->fts_path));
                    if (! enter_dir (sp, p))
                      {