[coreutils] seq: fix newline output when -s specified (upstream)

Ondrej Vasik ovasik at fedoraproject.org
Thu Dec 20 08:47:44 UTC 2012


commit 11aeb4e7348e0dd978a948f5423c7cb6e4f8715e
Author: Ondřej Vašík <ovasik at redhat.com>
Date:   Thu Dec 20 09:47:38 2012 +0100

    seq: fix newline output when -s specified (upstream)

 coreutils-8.20-seq-s.patch |  113 ++++++++++++++++++++++++++++++++++++++++++++
 coreutils.spec             |    7 ++-
 2 files changed, 119 insertions(+), 1 deletions(-)
---
diff --git a/coreutils-8.20-seq-s.patch b/coreutils-8.20-seq-s.patch
new file mode 100644
index 0000000..ecf5338
--- /dev/null
+++ b/coreutils-8.20-seq-s.patch
@@ -0,0 +1,113 @@
+From 9d9cdfd5df898ade2e680aab5ce37fcd0032c687 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P at draigBrady.com>
+Date: Wed, 19 Dec 2012 19:27:10 +0000
+Subject: [PATCH] seq: fix newline output when -s specified
+
+This regression was introduced in commit v8.19-132-g3786fb6.
+
+* src/seq.c (seq_fast): Don't use puts() to output the first number,
+and instead insert it into the buffer as for other numbers.
+Also output the terminator unconditionally.
+* tests/misc/seq.pl: Add some basic tests for the -s option.
+* NEWS: Mention the fix.
+* THANKS.in: Reported by Philipp Gortan.
+---
+ NEWS              |    4 ++++
+ THANKS.in         |    1 +
+ src/seq.c         |   20 +++++++++++++-------
+ tests/misc/seq.pl |    5 +++++
+ 4 files changed, 23 insertions(+), 7 deletions(-)
+
+diff --git a/NEWS b/NEWS
+index e4472df..ae7ec2a 100644
+--- a/NEWS
++++ b/NEWS
+@@ -43,6 +43,10 @@ GNU coreutils NEWS                                    -*- outline -*-
+   the output numbers are properly aligned and of the correct width.
+   [This bug was present in "the beginning".]
+ 
++  seq -s now doesn't output 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]
++
+ ** Changes in behavior
+ 
+   df --total now prints '-' into the target column (mount point) of the
+diff --git a/THANKS.in b/THANKS.in
+index c2651e7..67b60b9 100644
+--- a/THANKS.in
++++ b/THANKS.in
+@@ -505,6 +505,7 @@ Phil Richards                       phil.richards at vf.vodafone.co.uk
+ Philippe De Muyter                  phdm at macqel.be
+ Philippe Schnoebelen                Philippe.Schnoebelen at imag.fr
+ Phillip Jones                       mouse at datastacks.com
++Philipp Gortan                      gortan at gmail.com
+ Philipp Thomas                      pth at suse.de
+ Piergiorgio Sartor                  sartor at sony.de
+ Pieter Bowman                       bowman at math.utah.edu
+diff --git a/src/seq.c b/src/seq.c
+index 9c2c51f..108808b 100644
+--- a/src/seq.c
++++ b/src/seq.c
+@@ -419,30 +419,36 @@ seq_fast (char const *a, char const *b)
+   bool ok = cmp (p, p_len, q, q_len) <= 0;
+   if (ok)
+     {
+-      /* Buffer at least this many output lines per fwrite call.
++      /* Buffer at least this many numbers per fwrite call.
+          This gives a speed-up of more than 2x over the unbuffered code
+          when printing the first 10^9 integers.  */
+       enum {N = 40};
+       char *buf = xmalloc (N * (n + 1));
+       char const *buf_end = buf + N * (n + 1);
+ 
+-      puts (p);
+       char *z = buf;
++
++      /* Write first number to buffer.  */
++      z = mempcpy (z, p, p_len);
++
++      /* Append separator then number.  */
+       while (cmp (p, p_len, q, q_len) < 0)
+         {
++          *z++ = *separator;
+           incr (&p, &p_len);
+           z = mempcpy (z, p, p_len);
+-          *z++ = *separator;
+-          if (buf_end - n - 1 < z)
++          /* If no place for another separator + number then
++             output buffer so far, and reset to start of buffer.  */
++          if (buf_end - (n + 1) < z)
+             {
+               fwrite (buf, z - buf, 1, stdout);
+               z = buf;
+             }
+         }
+ 
+-      /* Write any remaining, buffered output.  */
+-      if (buf < z)
+-        fwrite (buf, z - buf, 1, stdout);
++      /* Write any remaining buffered output, and the terminator.  */
++      *z++ = *terminator;
++      fwrite (buf, z - buf, 1, stdout);
+ 
+       IF_LINT (free (buf));
+     }
+diff --git a/tests/misc/seq.pl b/tests/misc/seq.pl
+index 447baa4..416b839 100755
+--- a/tests/misc/seq.pl
++++ b/tests/misc/seq.pl
+@@ -128,6 +128,11 @@ my @Tests =
+    ['long-leading-zeros2', qw(000 02), {OUT => [qw(0 1 2)]}],
+    ['long-leading-zeros3', qw(00 02), {OUT => [qw(0 1 2)]}],
+    ['long-leading-zeros4', qw(0 02), {OUT => [qw(0 1 2)]}],
++
++   # Exercise the -s option, which was broken in 8.20
++   ['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)]}],
+   );
+ 
+ # Append a newline to each entry in the OUT array.
+-- 
+1.7.6.4
diff --git a/coreutils.spec b/coreutils.spec
index 5f38525..bbd1fb6 100644
--- a/coreutils.spec
+++ b/coreutils.spec
@@ -1,7 +1,7 @@
 Summary: A set of basic GNU tools commonly used in shell scripts
 Name:    coreutils
 Version: 8.20
-Release: 4%{?dist}
+Release: 5%{?dist}
 License: GPLv3+
 Group:   System Environment/Base
 Url:     http://www.gnu.org/software/coreutils/
@@ -16,6 +16,7 @@ Source106:  coreutils-colorls.csh
 # From upstream
 Patch1: coreutils-8.20-powerpcfactor.patch
 Patch2: coreutils-8.20-df-duplicates.patch
+Patch3: coreutils-8.20-seq-s.patch
 
 # Our patches
 #general patch to workaround koji build system issues
@@ -130,6 +131,7 @@ the old GNU fileutils, sh-utils, and textutils packages.
 # From upstream
 %patch1 -p1 -b .ppcfactor
 %patch2 -p1 -b .duplic
+%patch3 -p1 -b .newline
 
 # Our patches
 %patch100 -p1 -b .configure
@@ -379,6 +381,9 @@ fi
 %{_sbindir}/chroot
 
 %changelog
+* Thu Dec 20 2012 Ondrej Vasik <ovasik at redhat.com> 8.20-5
+- seq: fix newline output when -s specified (upstream)
+
 * Mon Dec 10 2012 Ondrej Vasik <ovasik at redhat.com> 8.20-4
 - fix showing duplicates in df (#709351, O.Oprala, B.Voelker)
 


More information about the scm-commits mailing list