coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] ls: fix off by one error when determining max display columns


From: Pádraig Brady
Subject: [PATCH] ls: fix off by one error when determining max display columns
Date: Wed, 21 Oct 2015 16:14:20 +0100

* 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.
---
 NEWS                 | 3 +++
 src/ls.c             | 6 +++++-
 tests/ls/w-option.sh | 4 ++++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 07b88b0..e771585 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 0c9dc78..ef37255 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 f49c028..6361aaf 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
-- 
2.5.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]