mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-20 18:56:39 +02:00
du: -x should not count files in other file systems
This fixes Bug#10293, which I guess was introduced in commit
95c948b06a dated 2003-10-02.
* 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.
This commit is contained in:
3
NEWS
3
NEWS
@@ -4,6 +4,9 @@ GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
** Bug fixes
|
||||
|
||||
du -x no longer counts root directories of other file systems.
|
||||
[bug introduced in coreutils-5.1.0]
|
||||
|
||||
ls --color many-entry-directory was uninterruptible for too long
|
||||
[bug introduced in coreutils-5.2.1]
|
||||
|
||||
|
||||
3
src/du.c
3
src/du.c
@@ -443,6 +443,9 @@ process_file (FTS *fts, FTSENT *ent)
|
||||
error (0, ent->fts_errno, _("cannot access %s"), quote (file));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fts->fts_options & FTS_XDEV && fts->fts_dev != sb->st_dev)
|
||||
excluded = true;
|
||||
}
|
||||
|
||||
if (excluded
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#!/bin/sh
|
||||
# Test for a bug in fts's handling of FTS_XDEV, the flag behind
|
||||
# du's --one-file-system (-x) option.
|
||||
# Test for bugs in du's --one-file-system (-x) option.
|
||||
|
||||
# Copyright (C) 2006-2011 Free Software Foundation, Inc.
|
||||
|
||||
@@ -19,9 +18,11 @@
|
||||
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../src
|
||||
print_ver_ du
|
||||
cleanup_() { rm -rf "$other_partition_tmpdir"; }
|
||||
. "$abs_srcdir/other-fs-tmpdir"
|
||||
|
||||
mkdir -p b/c y/z || framework_failure_
|
||||
|
||||
mkdir -p b/c y/z d "$other_partition_tmpdir/x" || framework_failure_
|
||||
ln -s "$other_partition_tmpdir/x" d || framework_failure_
|
||||
|
||||
# Due to a used-uninitialized variable, the "du -x" from coreutils-6.6
|
||||
# would not traverse into second and subsequent directories listed
|
||||
@@ -37,4 +38,12 @@ EOF
|
||||
|
||||
compare exp out || fail=1
|
||||
|
||||
# "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
|
||||
echo d > exp1 || fail=1
|
||||
|
||||
compare exp1 out1 || fail=1
|
||||
|
||||
Exit $fail
|
||||
|
||||
Reference in New Issue
Block a user