diff options
author | Jim Meyering <meyering@redhat.com> | 2008-05-15 11:19:44 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2008-05-17 08:28:59 +0200 |
commit | 878e51ebfaf130f494957e7e6b5bce96d6e1eb13 (patch) | |
tree | e8e3e9ae473abc8c94e6d22916451f330a807605 /src | |
parent | 51243cdacacbde2c020846c22d81ab435f2f1f22 (diff) | |
download | coreutils-878e51ebfaf130f494957e7e6b5bce96d6e1eb13.tar.xz |
du, wc: merge improved --files0-from=F-related diagnostics
du gave a better diagnostic for one unusual case,
and wc gave a better diagnostic for a different one.
Now each diagnoses both unusual cases.
* src/du.c (main): Disallow '-' as file name when reading from stdin.
* src/wc.c (main): Give a better diagnostic for a zero-length file name.
Diffstat (limited to 'src')
-rw-r--r-- | src/du.c | 14 | ||||
-rw-r--r-- | src/wc.c | 39 |
2 files changed, 45 insertions, 8 deletions
@@ -1,5 +1,5 @@ /* du -- summarize disk usage - Copyright (C) 1988-1991, 1995-2007 Free Software Foundation, Inc. + Copyright (C) 1988-1991, 1995-2008 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 @@ -977,10 +977,22 @@ main (int argc, char **argv) if ( ! files[i]) break; + if (files_from && STREQ (files_from, "-") && STREQ (files[i], "-")) + { + /* Give a better diagnostic in an unusual case: + printf - | du --files0-from=- */ + error (0, 0, _("when reading file names from stdin, " + "no file name of %s allowed"), + quote ("-")); + continue; + } + if (files[i][0]) i++; else { + /* Diagnose a zero-length file name. When it's one + among many, knowing the record number may help. */ if (files_from) { /* Using the standard `filename:line-number:' prefix here is @@ -30,6 +30,7 @@ #include "inttostr.h" #include "mbchar.h" #include "quote.h" +#include "quotearg.h" #include "readtokens0.h" #include "safe-read.h" @@ -683,15 +684,39 @@ main (int argc, char **argv) ok = true; for (i = 0; i < nfiles; i++) { - if (files_from && STREQ (files_from, "-") && STREQ (files[i], "-")) + if (files[i]) { - ok = false; - error (0, 0, - _("when reading file names from stdin, " - "no file name of %s allowed"), - quote ("-")); - continue; + if (files_from && STREQ (files_from, "-") && STREQ (files[i], "-")) + { + ok = false; + /* Give a better diagnostic in an unusual case: + printf - | wc --files0-from=- */ + error (0, 0, _("when reading file names from stdin, " + "no file name of %s allowed"), + quote ("-")); + continue; + } + + /* Diagnose a zero-length file name. When it's one + among many, knowing the record number may help. */ + if (files[i][0] == '\0') + { + ok = false; + if (files_from) + { + /* Using the standard `filename:line-number:' prefix here is + not totally appropriate, since NUL is the separator, not NL, + but it might be better than nothing. */ + unsigned long int file_number = i + 1; + error (0, 0, "%s:%lu: %s", quotearg_colon (files_from), + file_number, _("invalid zero-length file name")); + } + else + error (0, 0, "%s", _("invalid zero-length file name")); + continue; + } } + ok &= wc_file (files[i], &fstatus[i]); } |