diff options
author | Jim Meyering <meyering@redhat.com> | 2009-09-03 19:36:34 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-09-03 19:52:47 +0200 |
commit | e0e8429c2433bd9820f42250236badc585bd9dd7 (patch) | |
tree | 12128f28af5a7c86f570058a2531c6031355bf4a /src/df.c | |
parent | 1422cabf930572f22849c55914352e915af1f677 (diff) | |
download | coreutils-e0e8429c2433bd9820f42250236badc585bd9dd7.tar.xz |
df: don't fail due to an unreadable argument
* src/df.c (main): If open or fstat fails when we're trying to ensure
that all arg-partitions are automounted, fall back on using stat.
Inspired by the report and patch from Olivier Fourdan in
http://bugzilla.redhat.com/520630.
* NEWS (Bug fixes): Mention it.
* tests/df/unreadable: New test for the above.
* tests/Makefile.am (TESTS): Add df/unreadable.
The bug was introduced in coreutils-7.3 via commit dbd17157,
2009-04-28, "df: use open(2), not stat, to trigger automounting".
Diffstat (limited to 'src/df.c')
-rw-r--r-- | src/df.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -994,8 +994,11 @@ main (int argc, char **argv) stats = xnmalloc (argc - optind, sizeof *stats); for (i = optind; i < argc; ++i) { + /* Prefer to open with O_NOCTTY and use fstat, but fall back + on using "stat", in case the file is unreadable. */ int fd = open (argv[i], O_RDONLY | O_NOCTTY); - if (fd < 0 || fstat (fd, &stats[i - optind])) + if ((fd < 0 || fstat (fd, &stats[i - optind])) + && stat (argv[i], &stats[i - optind])) { error (0, errno, "%s", quote (argv[i])); exit_status = EXIT_FAILURE; |