Paul Eggert wrote: > While looking into Bug#10282 I noticed that 'du' is mishandling > the -x option. It relies on FTS_XDEV to not cross file system boundaries, > but FTS_XDEV visits the root of the other file system, causing > 'du' to output a line "0 X" where X is the mount point of the > other file system. This doesn't sound right, since X is in a > different file system and du -x is supposed to ignore files in > other file systems. Also, it disagrees with Solaris 10 du > (at least). > > Here's a proposed patch. The bug is absent from coreutils 5.0 > and present in 5.2.0. I'm guessing from the NEWS files that > it was introduced in 5.1.0 but 5.1.0 is no longer available > at ftp.gnu.org so this isn't trivial for me to check. > > du: -x should not count files in other file systems > * NEWS: Document fix. > * src/du.c (process_file): Don't count files in different file > systems if -x is given. > * tests/du/one-file-system: Test for this bug.
Thanks for noticing/fixing that. The fix looks fine. Please include in the commit log the SHA1 that probably induced the bug. Also, a small improvement to the test script below: > diff --git a/NEWS b/NEWS ... > diff --git a/tests/du/one-file-system b/tests/du/one-file-system ... > +# "du -xL" reported a zero count for a file in a different file system, > +# instead of ignoring it. > +du -xL d > u || fail=1 > +sed 's/^[0-9][0-9]* //' u > out1 > +cat <<\EOF > exp1 || fail=1 > +d > +EOF The three lines above can be replaced by this one: echo d > exp1 || fail=1 > +compare exp1 out1 || fail=1 > + > Exit $fail
