[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] shuf: exit without reading if would never output
From: |
Pádraig Brady |
Subject: |
[PATCH] shuf: exit without reading if would never output |
Date: |
Wed, 27 Mar 2013 11:17:36 +0000 |
* src/shuf.c (main): If -n0 specified then no data would ever be output,
so exit without reading input.
* tests/misc/shuf.sh: Augment the related test with this case.
---
src/shuf.c | 6 ++++--
tests/misc/shuf.sh | 6 ++++++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/shuf.c b/src/shuf.c
index bbf3a86..0fabb0b 100644
--- a/src/shuf.c
+++ b/src/shuf.c
@@ -463,7 +463,8 @@ main (int argc, char **argv)
break;
case 1:
- if (! (STREQ (operand[0], "-") || freopen (operand[0], "r", stdin)))
+ if (! (STREQ (operand[0], "-") || ! head_lines
+ || freopen (operand[0], "r", stdin)))
error (EXIT_FAILURE, errno, "%s", operand[0]);
break;
@@ -474,7 +475,8 @@ main (int argc, char **argv)
fadvise (stdin, FADVISE_SEQUENTIAL);
- if (head_lines != SIZE_MAX && input_size () > RESERVOIR_MIN_INPUT)
+ if (head_lines != SIZE_MAX && (! head_lines
+ || input_size () > RESERVOIR_MIN_INPUT))
{
use_reservoir_sampling = true;
n_lines = SIZE_MAX; /* unknown number of input lines, for now. */
diff --git a/tests/misc/shuf.sh b/tests/misc/shuf.sh
index 9c9526d..171b25a 100755
--- a/tests/misc/shuf.sh
+++ b/tests/misc/shuf.sh
@@ -57,4 +57,10 @@ cmp out exp || { fail=1; echo "missing NUL terminator?"
1>&2; }
timeout 10 shuf -i1-$SIZE_MAX -n2 >/dev/null ||
{ fail=1; echo "couldn't get a small subset" >&2; }
+# Ensure shuf -n0 doesn't read any input or open specified files
+touch unreadable || framework_failure_
+chmod 0 unreadable || framework_failure_
+shuf -n0 unreadable || fail=1
+shuf -n1 unreadable && fail=1
+
Exit $fail
--
1.7.7.6