aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2022-12-31 17:03:39 +0000
committerPádraig Brady <P@draigBrady.com>2022-12-31 19:01:59 +0000
commitc9a21ec3173b93de4839e5ff9eddadb020431656 (patch)
treeffa75643c1d3677533127e59a635cc054a636885
parentcopy: attempt copy offload with sparse files by default (diff)
downloadcoreutils-c9a21ec3173b93de4839e5ff9eddadb020431656.tar.gz
coreutils-c9a21ec3173b93de4839e5ff9eddadb020431656.zip
stty: fix off by one column wrapping on output
* src/stty.c (wrapf): Adjust the comparison by 1, to account for the space we're adding. * tests/misc/stty.sh: Add a test case. * NEWS: Mention the fix. Reported in https://bugs.debian.org/1027442
-rw-r--r--NEWS4
-rw-r--r--src/stty.c2
-rwxr-xr-xtests/misc/stty.sh6
3 files changed, 11 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 0beaef506..6b05c8d35 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,10 @@ GNU coreutils NEWS -*- outline -*-
and the system supported set of valid speeds.
[This bug was present in "the beginning".]
+ stty now wraps output appropriately for the terminal width.
+ Previously it may have output 1 character too wide for certain widths.
+ [bug introduced in coreutils-5.3]
+
`wc -c` will again efficiently determine the size of large files
on all systems. It no longer redundantly reads data from certain
sized files larger than SIZE_MAX.
diff --git a/src/stty.c b/src/stty.c
index b4c2cbecd..f3c7915e1 100644
--- a/src/stty.c
+++ b/src/stty.c
@@ -519,7 +519,7 @@ wrapf (char const *message,...)
if (0 < current_col)
{
- if (max_col - current_col < buflen)
+ if (max_col - current_col <= buflen)
{
putchar ('\n');
current_col = 0;
diff --git a/tests/misc/stty.sh b/tests/misc/stty.sh
index bcdc80e87..7abcec5af 100755
--- a/tests/misc/stty.sh
+++ b/tests/misc/stty.sh
@@ -89,4 +89,10 @@ returns_ 1 strace -o log2 -e ioctl stty -blahblah || fail=1
n_ioctl2=$(wc -l < log2) || framework_failure_
test "$n_ioctl1" = "$n_ioctl2" || fail=1
+# Ensure we wrap output appropriately
+for W in $(seq 80 90); do
+ output_width=$(COLUMNS="$W" stty -a | wc -L)
+ test "$output_width" -le "$W" || fail=1
+done
+
Exit $fail