summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2015-10-21 13:57:41 +0100
committerPádraig Brady <P@draigBrady.com>2015-10-21 16:13:57 +0100
commite71be1292b92b244d065873fae5a17d5e1f0a16c (patch)
treece77fb2219c8a3fce9bda19a11068c53bd025d4b
parent0e997681d4497fe9ba6db035909e413a5af050a9 (diff)
downloadcoreutils-e71be1292b92b244d065873fae5a17d5e1f0a16c.tar.xz
ls: fix off by one error when determining max display columns
* src/ls.c (main): Account for the first column not including a separator when calculating max_idx. * tests/ls/w-option.sh: Add a test case. * NEWS: Mention the bug fix.
-rw-r--r--NEWS3
-rw-r--r--src/ls.c6
-rwxr-xr-xtests/ls/w-option.sh4
3 files changed, 12 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 07b88b09c..e77158562 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,9 @@ GNU coreutils NEWS -*- outline -*-
** Bug fixes
+ ls no longer prematurely wraps lines when printing short file names.
+ [bug introduced in 5.1.0]
+
shred again uses defined patterns for all iteration counts.
[bug introduced in coreutils-5.93]
diff --git a/src/ls.c b/src/ls.c
index 0c9dc78db..ef372553f 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -1979,7 +1979,11 @@ decode_switches (int argc, char **argv)
}
}
- max_idx = MAX (1, line_length / MIN_COLUMN_WIDTH);
+ /* Determine the max possible number of display columns. */
+ max_idx = line_length / MIN_COLUMN_WIDTH;
+ /* Account for first display column not having a separator,
+ or line_lengths shorter than MIN_COLUMN_WIDTH. */
+ max_idx += line_length % MIN_COLUMN_WIDTH != 0;
filename_quoting_options = clone_quoting_options (NULL);
if (get_quoting_style (filename_quoting_options) == escape_quoting_style)
diff --git a/tests/ls/w-option.sh b/tests/ls/w-option.sh
index f49c02815..6361aaf59 100755
--- a/tests/ls/w-option.sh
+++ b/tests/ls/w-option.sh
@@ -41,4 +41,8 @@ compare exp out || fail=1
# Ensure that 0 line length doesn't cause division by zero
TERM=xterm ls -w0 -x --color=always || fail=1
+# coreutils <= 8.24 could display 1 column too few
+ls -w4 -x -T0 a b > out || fail=1
+compare exp out || fail=1
+
Exit $fail