This should have been part of commit v8.24-59-ge71be1292

* src/ls.c (init_column_info): Don't account for separator
in the the final column.
* tests/ls/w-option.sh: Add a test case.
---
 src/ls.c             |  9 +++++----
 tests/ls/w-option.sh | 17 +++++++++++++++++
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/ls.c b/src/ls.c
index 7dbcfa75d..fa7926f86 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -993,8 +993,8 @@ static struct column_info *column_info;
 /* Maximum number of columns ever possible for this display.  */
 static size_t max_idx;
 
-/* The minimum width of a column is 3: 1 character for the name and 2
-   for the separating white space.  */
+/* The minimum width of a non-final column is 3: 1 character for the name
+   and 2 for the separating white space.  The final column is not padded.  */
 enum { MIN_COLUMN_WIDTH = 3 };
 
 
@@ -5276,9 +5276,10 @@ init_column_info (idx_t max_cols)
   for (idx_t i = 0; i < max_cols; ++i)
     {
       column_info[i].valid_len = true;
-      column_info[i].line_len = (i + 1) * MIN_COLUMN_WIDTH;
-      for (idx_t j = 0; j <= i; ++j)
+      column_info[i].line_len = i * MIN_COLUMN_WIDTH + 1;
+      for (idx_t j = 0; j < i; ++j)
         column_info[i].col_arr[j] = MIN_COLUMN_WIDTH;
+      column_info[i].col_arr[i] = 1;
     }
 }
 
diff --git a/tests/ls/w-option.sh b/tests/ls/w-option.sh
index bf10d6e57..288f9a571 100755
--- a/tests/ls/w-option.sh
+++ b/tests/ls/w-option.sh
@@ -45,4 +45,21 @@ TERM=xterm ls -w0 -x --color=always || fail=1
 ls -w4 -x -T0 a b > out || fail=1
 compare exp out || fail=1
 
+# coreutils <= 9.11 could display 1 column too few
+touch aa c || framework_failure_
+cat <<\EOF > exp || framework_failure_
+aa  b
+c
+EOF
+ls -w6 -x -T0 aa b c > out || fail=1
+compare exp out || fail=1
+
+# coreutils <= 9.11 could display 1 column too few
+cat <<\EOF > exp || framework_failure_
+aa  c
+b
+EOF
+ls -w6 -C -T0 aa b c > out || fail=1
+compare exp out || fail=1
+
 Exit $fail
-- 
2.54.0


Reply via email to