diff options
author | Pádraig Brady <P@draigBrady.com> | 2012-11-23 03:06:07 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2012-11-24 15:25:19 +0000 |
commit | 64d4a2807d46a85cfe5ab7eb99b3e91b9a75d5ab (patch) | |
tree | a6675c8ed665aba91591fd82029210b4fc18f7ce | |
parent | ce48a81bce089f703a12871f98ab1240c4c3554c (diff) | |
download | coreutils-64d4a2807d46a85cfe5ab7eb99b3e91b9a75d5ab.tar.xz |
seq: ensure correct output width for scientific notation input
* src/seq.c (scan_arg): Calculate the width more accurately
for numbers specified using scientific notation.
* tests/misc/seq.pl: Add tests for cases that were mishandled.
* NEWS: Mention the fix.
* THANKS.in: Reported by Marcel Böhme.
Fixes http://bugs.gnu.org/12959
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | THANKS.in | 1 | ||||
-rw-r--r-- | src/seq.c | 15 | ||||
-rwxr-xr-x | tests/misc/seq.pl | 7 |
4 files changed, 27 insertions, 0 deletions
@@ -21,6 +21,10 @@ GNU coreutils NEWS -*- outline -*- consistently padded with spaces, rather than with zeros for certain widths. [bug introduced in TEXTUTILS-1_22i] + seq -w ensures that for numbers input in scientific notation, + the output numbers are properly aligned and of the correct width. + [This bug was present in "the beginning".] + ** Changes in behavior df --total now prints '-' into the target column (mount point) of the @@ -367,6 +367,7 @@ Marc Haber mh+debian-bugs@zugschlus.de Marc Mengel mengel@fnal.gov Marc Lehman schmorp@schmorp.de Marc Olzheim marcolz@stack.nl +Marcel Böhme http://www.comp.nus.edu.sg/~mboehme Marco Franzen Marco.Franzen@Thyron.com Marcus Brinkmann http://www.marcus-brinkmann.de Marcus Daniels marcus@ee.pdx.edu @@ -166,6 +166,21 @@ scan_arg (const char *arg) { long exponent = strtol (e + 1, NULL, 10); ret.precision += exponent < 0 ? -exponent : 0; + /* Don't account for e.... in the width since this is not output. */ + ret.width -= strlen (arg) - (e - arg); + /* Adjust the width as per the exponent. */ + if (exponent < 0) + { + if (decimal_point) + { + if (e == decimal_point + 1) /* undo #. -> # above */ + ret.width++; + } + else + ret.width++; + exponent = -exponent; + } + ret.width += exponent; } } diff --git a/tests/misc/seq.pl b/tests/misc/seq.pl index 351097b70..447baa4b3 100755 --- a/tests/misc/seq.pl +++ b/tests/misc/seq.pl @@ -70,6 +70,13 @@ my @Tests = ['eq-wid-6', qw(-w +1 2), {OUT => [qw(1 2)]}], ['eq-wid-7', qw(-w " .1" " .1"), {OUT => [qw(0.1)]}], ['eq-wid-8', qw(-w 9 0.5 10), {OUT => [qw(09.0 09.5 10.0)]}], + # Prior to 8.21, these tests involving numbers in scentific notation + # would fail with misalignment or wrong widths. + ['eq-wid-9', qw(-w -1e-3 1), {OUT => [qw(-0.001 00.999)]}], + ['eq-wid-10',qw(-w -1e-003 1), {OUT => [qw(-0.001 00.999)]}], + ['eq-wid-11',qw(-w -1.e-3 1), {OUT => [qw(-0.001 00.999)]}], + ['eq-wid-12',qw(-w -1.0e-4 1), {OUT => [qw(-0.00010 00.99990)]}], + ['eq-wid-13',qw(-w 999 1e3), {OUT => [qw(0999 1000)]}], # Prior to coreutils-4.5.11, some of these were not accepted. ['fmt-1', qw(-f %2.1f 1.5 .5 2),{OUT => [qw(1.5 2.0)]}], |