summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2009-09-03 19:36:34 +0200
committerJim Meyering <meyering@redhat.com>2009-09-03 19:52:47 +0200
commite0e8429c2433bd9820f42250236badc585bd9dd7 (patch)
tree12128f28af5a7c86f570058a2531c6031355bf4a /src
parent1422cabf930572f22849c55914352e915af1f677 (diff)
downloadcoreutils-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')
-rw-r--r--src/df.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/df.c b/src/df.c
index 787fcde21..86fd0e32e 100644
--- a/src/df.c
+++ b/src/df.c
@@ -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;