diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | src/du.c | 7 | ||||
-rwxr-xr-x | tests/du/inacc-dir | 11 |
4 files changed, 22 insertions, 6 deletions
@@ -1,5 +1,12 @@ 2007-07-31 Jim Meyering <jim@meyering.net> + du: print size (probably incomplete) of each inaccessible directory + * src/du.c (process_file): Print what we know of the size of a + directory even when it is inaccessible. What we print is just the + size of the directory itself, not counting any of its contents. + * tests/du/inacc-dir: Test for this. + * NEWS: Mention this change. + Add a test for du not counting size of inaccessible directories. * tests/du/inacc-dir: New file. Test for fts.c bug fixed yesterday. * tests/du/Makefile.am (TESTS): Add inacc-dir. @@ -83,6 +83,9 @@ GNU coreutils NEWS -*- outline -*- du -s now includes the size of any stat'able-but-inaccessible directory in the total size. + du (without -s) prints whatever it knows of the size of an inaccessible + directory. Before, du would print nothing for such a directory. + ls -x DIR would sometimes output the wrong string in place of the first entry. [introduced in coreutils-6.8] @@ -596,14 +596,9 @@ process_file (FTS *fts, FTSENT *ent) duinfo_add (&dulvl[level].ent, &dui); /* Even if this directory is unreadable or we can't chdir into it, - do let its size contribute to the total, ... */ + do let its size contribute to the total. */ duinfo_add (&tot_dui, &dui); - /* ... but don't print out a total for it, since without the size(s) - of any potential entries, it could be very misleading. */ - if (ent->fts_info == FTS_DNR) - return ok; - /* If we're not counting an entry, e.g., because it's a hard link to a file we've already counted (and --count-links), then don't print a line for it. */ diff --git a/tests/du/inacc-dir b/tests/du/inacc-dir index 3bfbdefe9..add929347 100755 --- a/tests/du/inacc-dir +++ b/tests/du/inacc-dir @@ -45,4 +45,15 @@ du -s a > out 2> /dev/null && fail=1 cmp out exp || fail=1 test $fail = 1 && diff out exp 2> /dev/null +# Same as above, but don't use -s, so we print +# an entry for the unreadable "sub", too. +chmod 700 a/sub || fail=1 +du -k a > exp || fail=1 +chmod 0 a/sub || fail=1 +# Expect failure, ignore diagnostics. +du -k a > out 2> /dev/null && fail=1 + +cmp out exp || fail=1 +test $fail = 1 && diff out exp 2> /dev/null + (exit $fail); exit $fail |