forked from pool/coreutils
86 lines
3.0 KiB
Diff
86 lines
3.0 KiB
Diff
|
Port upstream fix for shuf, to be removed with v8.23:
|
||
|
|
||
|
shuf --repeat no longer dumps core if the input is empty.
|
||
|
[bug introduced with the --repeat feature in coreutils-8.22]
|
||
|
|
||
|
This patch squashes these 2 upstream commits:
|
||
|
|
||
|
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=9f60f37a28
|
||
|
http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=5475e6083f
|
||
|
|
||
|
While the former implements the actual fix for the problem,
|
||
|
the latter only changes the new error diagnostic. The change in the
|
||
|
NEWS entry in the latter patch is not visible in the following patch
|
||
|
because that hunk is omitted; however, that corrected NEWS entry is
|
||
|
above.
|
||
|
|
||
|
-----------------------------------------------
|
||
|
commit 9f60f37a28c37acb66aa38003ccaa07f13abbd9d
|
||
|
Author: Paul Eggert <eggert@cs.ucla.edu>
|
||
|
Date: Sun Feb 23 15:34:48 2014 -0800
|
||
|
|
||
|
shuf: with -r, don't dump core if the input is empty
|
||
|
|
||
|
Problem reported by valiant xiao in <http://bugs.gnu.org/16855>.
|
||
|
* src/shuf.c (main): With -r, report an error if the input is empty.
|
||
|
* tests/misc/shuf.sh: Test for the bug.
|
||
|
|
||
|
-----------------------------------------------
|
||
|
commit 5475e6083f46a2f9f7ccf4173f391bf518421523
|
||
|
Author: Bernhard Voelker <mail@bernhard-voelker.de>
|
||
|
Date: Wed Feb 26 08:36:50 2014 +0100
|
||
|
|
||
|
shuf: convert error diagnostic to lowercase
|
||
|
|
||
|
* src/shuf.c (main): s/No/no/, introduced by commit v8.22-25-g9f60f37.
|
||
|
|
||
|
Prompted by the syntax-check rule sc_error_message_uppercase
|
||
|
|
||
|
---
|
||
|
src/shuf.c | 15 +++++++++++----
|
||
|
tests/misc/shuf.sh | 4 ++++
|
||
|
2 files changed, 15 insertions(+), 4 deletions(-)
|
||
|
|
||
|
Index: src/shuf.c
|
||
|
===================================================================
|
||
|
--- src/shuf.c.orig
|
||
|
+++ src/shuf.c
|
||
|
@@ -576,11 +576,18 @@ main (int argc, char **argv)
|
||
|
/* Generate output according to requested method */
|
||
|
if (repeat)
|
||
|
{
|
||
|
- if (input_range)
|
||
|
- i = write_random_numbers (randint_source, head_lines,
|
||
|
- lo_input, hi_input, eolbyte);
|
||
|
+ if (head_lines == 0)
|
||
|
+ i = 0;
|
||
|
else
|
||
|
- i = write_random_lines (randint_source, head_lines, line, n_lines);
|
||
|
+ {
|
||
|
+ if (n_lines == 0)
|
||
|
+ error (EXIT_FAILURE, 0, _("no lines to repeat"));
|
||
|
+ if (input_range)
|
||
|
+ i = write_random_numbers (randint_source, head_lines,
|
||
|
+ lo_input, hi_input, eolbyte);
|
||
|
+ else
|
||
|
+ i = write_random_lines (randint_source, head_lines, line, n_lines);
|
||
|
+ }
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Index: tests/misc/shuf.sh
|
||
|
===================================================================
|
||
|
--- tests/misc/shuf.sh.orig
|
||
|
+++ tests/misc/shuf.sh
|
||
|
@@ -43,6 +43,10 @@ compare in out1 || { fail=1; echo "not a
|
||
|
t=$(shuf -e a b c d e | sort | fmt)
|
||
|
test "$t" = 'a b c d e' || { fail=1; echo "not a permutation" 1>&2; }
|
||
|
|
||
|
+# coreutils-8.22 dumps core.
|
||
|
+shuf -er
|
||
|
+test $? -eq 1 || fail=1
|
||
|
+
|
||
|
# Before coreutils-6.3, this would infloop.
|
||
|
# "seq 1860" produces 8193 (8K + 1) bytes of output.
|
||
|
seq 1860 | shuf > /dev/null || fail=1
|