From caaf2899f67d312d76af91add2a4d9f7be2d5c61 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 2 Mar 2011 19:16:46 +0100 Subject: du: don't infloop for --files0-from=DIR * src/du.c (main): Fail on AI_ERR_READ error, rather than merely diagnosing and continuing. Based on a patch by Stefan Vargyas. Also move the handling of AI_ERR_EOF into the case stmt. Do not report ferror/fclose(stdin) failure when we've already diagnosed e.g., failure to read the DIR, above. Bug introduced by 2008-11-24 commit 031e2fb5, "du: read and process --files0-from= input a name at a time,". * src/wc.c: Handle read failure as with du: do not exit immediately, but rather go on to print any total and to clean-up. As above, move the handling of AI_ERR_EOF into the case stmt. * tests/du/files0-from-dir: New file, to test both du and wc. * tests/Makefile.am (TESTS): Add it. * NEWS (Bug fixes): Mention it. --- tests/Makefile.am | 1 + tests/du/files0-from-dir | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100755 tests/du/files0-from-dir (limited to 'tests') diff --git a/tests/Makefile.am b/tests/Makefile.am index 9603441b0..28eafe8ae 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -370,6 +370,7 @@ TESTS = \ du/exclude \ du/fd-leak \ du/files0-from \ + du/files0-from-dir \ du/hard-link \ du/inacc-dest \ du/inacc-dir \ diff --git a/tests/du/files0-from-dir b/tests/du/files0-from-dir new file mode 100755 index 000000000..fc1e1844c --- /dev/null +++ b/tests/du/files0-from-dir @@ -0,0 +1,39 @@ +#!/bin/sh +# ensure that du and wc handle --files0-from=DIR + +# Copyright (C) 2011 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 . + +. "${srcdir=.}/init.sh"; path_prepend_ ../src +print_ver_ du wc + +mkdir dir + +# Skip this test if reading from a directory succeeds. +# In that case, using --files0-from=dir would yield garbage, +# interpreting the directory entry as a sequence of +# NUL-separated file names. +cat dir > /dev/null && skip_ "cat dir/ succeeds" + +for prog in du wc; do + $prog --files0-from=dir > /dev/null 2>err && fail=1 + printf "$prog: dir:\n" > exp || fail=1 + # The diagnostic string is usually "Is a directory" (ENOTDIR), + # but accept a different string or errno value. + sed 's/dir:.*/dir:/' err > k; mv k err + compare err exp || fail=1 +done + +Exit $fail -- cgit v1.2.3-54-g00ecf