summaryrefslogtreecommitdiff
path: root/src/wc.c
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2011-03-02 19:16:46 +0100
committerJim Meyering <meyering@redhat.com>2011-03-03 09:05:44 +0100
commitcaaf2899f67d312d76af91add2a4d9f7be2d5c61 (patch)
tree5b11c3ce27d9d74b258f7720fd2e3130617d0a20 /src/wc.c
parent7cfd12c78e0be4c90f29c99ab383163aa1471504 (diff)
downloadcoreutils-caaf2899f67d312d76af91add2a4d9f7be2d5c61.tar.xz
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.
Diffstat (limited to 'src/wc.c')
-rw-r--r--src/wc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/wc.c b/src/wc.c
index ccf4ccfbc..039921470 100644
--- a/src/wc.c
+++ b/src/wc.c
@@ -722,16 +722,17 @@ main (int argc, char **argv)
bool skip_file = false;
enum argv_iter_err ai_err;
char *file_name = argv_iter (ai, &ai_err);
- if (ai_err == AI_ERR_EOF)
- break;
if (!file_name)
{
switch (ai_err)
{
+ case AI_ERR_EOF:
+ goto argv_iter_done;
case AI_ERR_READ:
- error (EXIT_FAILURE, errno, _("%s: read error"),
- quote (files_from));
- continue;
+ error (0, errno, _("%s: read error"),
+ quotearg_colon (files_from));
+ ok = false;
+ goto argv_iter_done;
case AI_ERR_MEM:
xalloc_die ();
default:
@@ -773,6 +774,7 @@ main (int argc, char **argv)
else
ok &= wc_file (file_name, &fstatus[nfiles ? i : 0]);
}
+ argv_iter_done:
/* No arguments on the command line is fine. That means read from stdin.
However, no arguments on the --files0-from input stream is an error