summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--src/seq.c5
-rwxr-xr-xtests/misc/seq.pl11
3 files changed, 16 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 26939c178..22d90d590 100644
--- a/NEWS
+++ b/NEWS
@@ -57,7 +57,8 @@ GNU coreutils NEWS -*- outline -*-
seq -s no longer prints an erroneous newline after the first number, and
outputs a newline after the last number rather than a trailing separator.
- [bug introduced in coreutils-8.20]
+ Also seq no longer ignores a specified step value when the end value is 1.
+ [bugs introduced in coreutils-8.20]
** Changes in behavior
diff --git a/src/seq.c b/src/seq.c
index 5ad5fad94..acbe2350a 100644
--- a/src/seq.c
+++ b/src/seq.c
@@ -565,11 +565,12 @@ main (int argc, char **argv)
then use the much more efficient integer-only code. */
if (all_digits_p (argv[optind])
&& (n_args == 1 || all_digits_p (argv[optind + 1]))
- && (n_args < 3 || STREQ ("1", argv[optind + 2]))
+ && (n_args < 3 || (STREQ ("1", argv[optind + 1])
+ && all_digits_p (argv[optind + 2])))
&& !equal_width && !format_str && strlen (separator) == 1)
{
char const *s1 = n_args == 1 ? "1" : argv[optind];
- char const *s2 = n_args == 1 ? argv[optind] : argv[optind + 1];
+ char const *s2 = argv[optind + (n_args - 1)];
if (seq_fast (s1, s2))
exit (EXIT_SUCCESS);
diff --git a/tests/misc/seq.pl b/tests/misc/seq.pl
index 64c62b2bc..b3496d62c 100755
--- a/tests/misc/seq.pl
+++ b/tests/misc/seq.pl
@@ -137,6 +137,17 @@ my @Tests =
['sep-1', qw(-s, 1 3), {OUT => [qw(1,2,3)]}],
['sep-2', qw(-s, 1 1), {OUT => [qw(1)]}],
['sep-3', qw(-s,, 1 3), {OUT => [qw(1,,2,,3)]}],
+
+ # Exercise fast path avoidance logic.
+ # In 8.20 a step value != 1, with positive integer start and end was broken
+ ['not-fast-1', qw(1 3 1), {OUT => [qw(1)]}],
+ ['not-fast-2', qw(1 1 4.2), {OUT => [qw(1 2 3 4)]}],
+ ['not-fast-3', qw(1 1 0)],
+
+ # Ensure the correct parameters are passed to the fast path
+ ['fast-1', qw(4), {OUT => [qw(1 2 3 4)]}],
+ ['fast-2', qw(1 4), {OUT => [qw(1 2 3 4)]}],
+ ['fast-3', qw(1 1 4), {OUT => [qw(1 2 3 4)]}],
);
# Append a newline to each entry in the OUT array.