Thanks for the report and patch! Here's the change I've made (relative to fileutils-4.0x): * src/du.c (count_entry): Remember the current directory also for `.' and `..'. Reported by Stephen Smoogen, based on a patch from H.J. Lu. * tests/du/two-args: Add a test for this. Index: src/du.c =================================================================== RCS file: /fetish/fileutils/src/du.c,v retrieving revision 1.108 diff -u -p -r1.108 du.c --- src/du.c 2000/07/30 16:28:25 1.108 +++ src/du.c 2000/08/15 12:59:47 @@ -529,8 +529,12 @@ count_entry (const char *ent, int top, d /* If we're traversing more than one level, or if we're dereferencing symlinks and we're about to chdir through a symlink, remember the current directory so we can return to - it later. In other cases, chdir ("..") works fine. */ + it later. In other cases, chdir ("..") works fine. + Treat `.' and `..' like multi-level paths, since `chdir ("..")' + wont't restore the current working directory after a `chdir' + to one of those. */ if (strchr (ent, '/') + || DOT_OR_DOTDOT (ent) || (xstat == stat && lstat (ent, &e_buf) == 0 && S_ISLNK (e_buf.st_mode))) Index: tests/du/two-args =================================================================== RCS file: /fetish/fileutils/tests/du/two-args,v retrieving revision 1.3 diff -u -p -r1.3 two-args --- tests/du/two-args 2000/04/27 12:15:23 1.3 +++ tests/du/two-args 2000/08/15 13:00:29 @@ -16,4 +16,9 @@ mkdir -p $tmp/1 $tmp/2 test -d $tmp || fail=1 du $tmp/1 $tmp/2 > /dev/null || fail=1 +# Make sure `du . $tmp' and `du .. $tmp' work. +# These would fail prior to fileutils-4.0y. +du . $tmp > /dev/null || fail=1 +du .. $tmp > /dev/null || fail=1 + exit $fail "H . J . Lu" <[EMAIL PROTECTED]> writes: | On Mon, Aug 14, 2000 at 06:38:35PM -0400, Stephen Smoogen wrote: | > | > Ok in 6.2 the following has always worked fine: | > | > ( (date; find . -maxdepth 1 -print | xargs du -s | sort -nr ; date) > dsk &) | > | > | > To give me a list of dsk hogs. On pinstripe and RC1 I get a long list of | > file not founds. | > | > du: ./mozilla-psm-1.1-1.i386.rpm: No such file or directory | > du: ./.m: No such file or directory | > du: ./dsk: No such file or directory | > du: ./#pico01080#: No such file or directory | > | > If I find do the files by hand they show up | > | > smooge:{smooge}$ du -s ./.m | > 328 ./.m | > | > Sorry for not finding this sooner. | > | > | > | | Please try this patch. | | | -- | H.J. Lu ([EMAIL PROTECTED]) | -- | 2000-08-14 H.J. Lu <[EMAIL PROTECTED]> | | * src/du.c (count_entry): Save the cwd when traversing relative | path. | | --- fileutils-4.0x/src/du.c.relpath Mon Aug 14 17:53:09 2000 | +++ fileutils-4.0x/src/du.c Mon Aug 14 18:07:14 2000 | @@ -525,11 +525,11 @@ count_entry (const char *ent, int top, d | #ifndef S_ISLNK | # define S_ISLNK(s) 0 | #endif | - /* If we're traversing more than one level, or if we're | - dereferencing symlinks and we're about to chdir through a | - symlink, remember the current directory so we can return to | + /* If we're traversing more than one level, relative path, or if | + we're dereferencing symlinks and we're about to chdir through | + a symlink, remember the current directory so we can return to | it later. In other cases, chdir ("..") works fine. */ | - if (strchr (ent, '/') | + if (strchr (ent, '/') || *ent == '.' | || (xstat == stat | && lstat (ent, &e_buf) == 0 | && S_ISLNK (e_buf.st_mode)))