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
---
 tests/wc.test   |  6 ++++--
 toys/posix/wc.c | 13 +++++++++----
 2 files changed, 13 insertions(+), 6 deletions(-)
From fd885570e9e38c4cfe9fef4dbca6ca42217e53e0 Mon Sep 17 00:00:00 2001
From: Elliott Hughes <e...@google.com>
Date: Thu, 26 Jul 2018 16:31:36 -0700
Subject: [PATCH] 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
---
 tests/wc.test   |  6 ++++--
 toys/posix/wc.c | 13 +++++++++----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/tests/wc.test b/tests/wc.test
index 8b6365b..4ab0386 100755
--- a/tests/wc.test
+++ b/tests/wc.test
@@ -14,10 +14,12 @@ EOF
 testing "wc" "wc >/dev/null && echo yes" "yes\n" "" ""
 testing "empty file" "wc" "      0       0       0\n" "" ""
 testing "standard input" "wc" "      1       3       5\n" "" "a b\nc"
+testing "standard input -c" "wc -c" "5\n" "" "a b\nc"
+testing "standard input -cl" "wc -cl" "      1       5\n" "" "a b\nc"
 testing "-c" "wc -c file1" "26 file1\n" "" ""
 testing "-l" "wc -l file1" "4 file1\n" "" ""
 testing "-w" "wc -w file1" "5 file1\n" "" ""
-testing "format" "wc file1" "4 5 26 file1\n" "" ""
+testing "one file" "wc file1" "4 5 26 file1\n" "" ""
 testing "multiple files" "wc input - file1" \
         "      1       2       3 input\n      0       2       3 -\n      4       5      26 file1\n      5       9      32 total\n" "a\nb" "a b"
 
@@ -25,7 +27,7 @@ testing "multiple files" "wc input - file1" \
 echo -n " " > file1
 for i in $(seq 1 512); do echo -n "üüüüüüüüüüüüüüüü" >> file1; done
 testing "-m" "wc -m file1" "8193 file1\n" "" ""
-testing "-m 2" 'cat "$FILES/utf8/test2.txt" | wc -m' "    169\n" "" ""
+testing "-m 2" 'cat "$FILES/utf8/test2.txt" | wc -m' "169\n" "" ""
 echo -n " " > file1
 testing "-mlw" "wc -mlw input" "1 2 11 input\n" "hello, 世界!\n" ""
 rm file1
diff --git a/toys/posix/wc.c b/toys/posix/wc.c
index acd0b3a..b875c1f 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)) {
-- 
2.18.0.345.g5c9ce644c3-goog

_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to