From: Jim Meyering Date: Sun, 27 Jul 2008 13:14:37 +0000 (+0200) Subject: shuf: honor --zero-terminated option even with --input-range=LO-HI X-Git-Tag: v7.0~118 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bee58d8a0400b0303c6dce3873fdf3482de0c110;p=platform%2Fupstream%2Fcoreutils.git shuf: honor --zero-terminated option even with --input-range=LO-HI * src/shuf.c (write_permuted_output): Add EOLBYTE parameter and use it rather than hard-coding "\n". (main): Adjust sole caller. * tests/misc/shuf: Add a test to exercise this bug fix. * NEWS: Mention it. --- diff --git a/NEWS b/NEWS index 8753fcfc6..3be1ad467 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,8 @@ GNU coreutils NEWS -*- outline -*- md5sum now accepts the new option, --quiet, to suppress the printing of 'OK' messages. sha1sum, sha224sum, sha384sum, and sha512sum accept it, too. + shuf honors the --zero-terminated (-z) option, even with --input-range=LO-HI + sort accepts a new option, --files0-from=F, that specifies a file containing a null-separated list of files to sort. This list is used instead of filenames passed on the command-line to avoid problems with diff --git a/src/shuf.c b/src/shuf.c index ca5345b4b..5e07d6e49 100644 --- a/src/shuf.c +++ b/src/shuf.c @@ -214,7 +214,7 @@ read_input (FILE *in, char eolbyte, char ***pline) static int write_permuted_output (size_t n_lines, char * const *line, size_t lo_input, - size_t const *permutation) + size_t const *permutation, char eolbyte) { size_t i; @@ -230,7 +230,7 @@ write_permuted_output (size_t n_lines, char * const *line, size_t lo_input, for (i = 0; i < n_lines; i++) { unsigned long int n = lo_input + permutation[i]; - if (printf ("%lu\n", n) < 0) + if (printf ("%lu%c", n, eolbyte) < 0) return -1; } @@ -400,7 +400,8 @@ main (int argc, char **argv) if (outfile && ! freopen (outfile, "w", stdout)) error (EXIT_FAILURE, errno, "%s", quotearg_colon (outfile)); - if (write_permuted_output (head_lines, line, lo_input, permutation) != 0) + if (write_permuted_output (head_lines, line, lo_input, permutation, eolbyte) + != 0) error (EXIT_FAILURE, errno, _("write error")); #ifdef lint diff --git a/tests/misc/shuf b/tests/misc/shuf index 97109498f..83530c207 100755 --- a/tests/misc/shuf +++ b/tests/misc/shuf @@ -51,4 +51,9 @@ test "$t" = 'a b c d e' || { fail=1; echo "not a permutation" 1>&2; } # "seq 1860" produces 8193 (8K + 1) bytes of output. seq 1860 | shuf > /dev/null || fail=1 +# coreutils-6.12 and earlier would output a newline terminator, not \0. +shuf --zero-terminated -i 1-1 > out || fail=1 +printf '1\0' > exp || framework_failure +cmp out exp || { fail=1; echo "missing NUL terminator?" 1>&2; } + (exit $fail); exit $fail