aboutsummaryrefslogtreecommitdiff
path: root/toys/posix/wc.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2018-07-26 16:31:36 -0700
committerRob Landley <rob@landley.net>2018-08-04 11:15:44 -0500
commitd7c111f4c39de122cdd1ea41c8af67a609fc859a (patch)
treeccdc6611f7c465603bd5f7c0d37aa26f69984397 /toys/posix/wc.c
parente9dfdd76d5b4ca9d875136f085acd9001c5bfdce (diff)
downloadtoybox-d7c111f4c39de122cdd1ea41c8af67a609fc859a.tar.gz
wc: fix the column width heuristics even further.
This was found by https://kernel.googlesource.com/pub/scm/linux/kernel/git/shuah/linux-kselftest/+/master/tools/testing/selftests/splice/default_file_splice_read.sh which broke after the recent change. Plus this actually fixes another of our existing test failures on the host. I'm assuming we don't want to try the "exact fit" heuristics until we have a concrete need for them. (I haven't fully understood the circumstances under which they're used, though the two remaining host test failures appear to be because of them.) Bug: http://b/111891791 Test: ran tests
Diffstat (limited to 'toys/posix/wc.c')
-rw-r--r--toys/posix/wc.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/toys/posix/wc.c b/toys/posix/wc.c
index acd0b3a0..b875c1fd 100644
--- a/toys/posix/wc.c
+++ b/toys/posix/wc.c
@@ -33,12 +33,17 @@ GLOBALS(
static void show_lengths(unsigned long *lengths, char *name)
{
- int i, space, first = 1;
+ int i, space = 0, first = 1;
// POSIX says there should never be leading spaces, but accepts that
- // traditional implementations use 7 spaces, unless only one file
- // is being counted, when there should be no leading spaces.
- space = (toys.optc != 1) ? 7 : 0;
+ // traditional implementations use 7 spaces, unless only one file (or
+ // just stdin) is being counted, when there should be no leading spaces,
+ // *except* for the case where we're going to output multiple numbers.
+ // And, yes, folks have test scripts that rely on all this nonsense :-(
+ // Note: sufficiently modern versions of coreutils wc will use the smallest
+ // column width necessary to have all columns be equal width rather than 0.
+ if (!(toys.optc==0 && (toys.optflags & (toys.optflags-1))==0) && toys.optc!=1)
+ space = 7;
for (i = 0; i<4; i++) {
if (toys.optflags&(1<<i)) {