diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | src/df.c | 5 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rwxr-xr-x | tests/df/unreadable | 32 |
5 files changed, 41 insertions, 1 deletions
@@ -19,6 +19,9 @@ GNU coreutils NEWS -*- outline -*- printing a summary to stderr. [bug introduced in coreutils-6.11] + df no longer requires that each command-line argument be readable + [bug introduced in coreutils-7.3] + ls -i now prints consistent inode numbers also for mount points. This makes ls -i DIR less efficient on systems with dysfunctional readdir, because ls must stat every file in order to obtain a guaranteed-valid @@ -440,6 +440,7 @@ Olatunji Oluwabukunmi Ruwase tjruwase@stanford.edu Olav Morkrid olav@funcom.com Ole Laursen olau@hardworking.dk Oliver Kiddle okiddle@yahoo.co.uk +Olivier Fourdan ofourdan@redhat.com Ørn E. Hansen oehansen@daimi.aau.dk Oskar Liljeblad osk@hem.passagen.se Otavio Salvador otavio@ossystems.com.br @@ -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; diff --git a/tests/Makefile.am b/tests/Makefile.am index 0151cb091..d9ff95be4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -300,6 +300,7 @@ TESTS = \ cp/src-base-dot \ cp/symlink-slash \ cp/thru-dangling \ + df/unreadable \ dd/direct \ dd/misc \ dd/not-rewound \ diff --git a/tests/df/unreadable b/tests/df/unreadable new file mode 100755 index 000000000..8e6002860 --- /dev/null +++ b/tests/df/unreadable @@ -0,0 +1,32 @@ +#!/bin/sh +# ensure that df can handle an unreadable argument + +# Copyright (C) 2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if test "$VERBOSE" = yes; then + set -x + df --version +fi + +. $srcdir/test-lib.sh +skip_if_root_ + +fail=0 +touch unreadable || fail=1 +chmod a-r unreadable || fail=1 +df unreadable || fail=1 + +Exit $fail |