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