From cb121d8f3683e81cf51c8f0c7a28dfa58ae68fa8 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 23 Feb 2007 15:18:16 +0100 Subject: [PATCH] With -Dlint, make shuf free all heap-allocated storage. * src/shuf.c (main): Move declaration of input_lines to function scope, and initialize to NULL, so we can free it. [lint]: Free all malloc'd memory. * tests/misc/shuf: Also test shuf's -e and -i options. --- ChangeLog | 8 ++++++++ src/shuf.c | 17 +++++++++++++---- tests/misc/shuf | 14 ++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 660eb5166..ed6d2bca3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-02-23 Jim Meyering + + With -Dlint, make shuf free all heap-allocated storage. + * src/shuf.c (main): Move declaration of input_lines to + function scope, and initialize to NULL, so we can free it. + [lint]: Free all malloc'd memory. + * tests/misc/shuf: Also test shuf's -e and -i options. + 2007-02-22 Jim Meyering Merge in a change from some other incarnation of this file (gzip?) diff --git a/src/shuf.c b/src/shuf.c index 68003c259..bfc9f30a2 100644 --- a/src/shuf.c +++ b/src/shuf.c @@ -1,6 +1,6 @@ /* Shuffle lines of text. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -251,6 +251,7 @@ main (int argc, char **argv) char const *outfile = NULL; char *random_source = NULL; char eolbyte = '\n'; + char **input_lines = NULL; int optc; int n_operands; @@ -258,7 +259,7 @@ main (int argc, char **argv) size_t n_lines; char **line; struct randint_source *randint_source; - size_t const *permutation; + size_t *permutation; initialize_main (&argc, &argv); program_name = argv[0]; @@ -366,8 +367,6 @@ main (int argc, char **argv) } else { - char **input_lines; - switch (n_operands) { case 0: @@ -408,5 +407,15 @@ main (int argc, char **argv) if (write_permuted_output (head_lines, line, lo_input, permutation) != 0) error (EXIT_FAILURE, errno, _("write error")); +#ifdef lint + free (permutation); + randint_all_free (randint_source); + if (input_lines) + { + free (input_lines[0]); + free (input_lines); + } +#endif + return EXIT_SUCCESS; } diff --git a/tests/misc/shuf b/tests/misc/shuf index 760bd4921..a2d5891b2 100755 --- a/tests/misc/shuf +++ b/tests/misc/shuf @@ -1,7 +1,7 @@ #!/bin/sh # Ensure that shuf randomizes its input. -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2007 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,8 +51,18 @@ cmp in out > /dev/null && { fail=1; echo "not random?" 1>&2; } sort -n out > out1 cmp in out1 || { fail=1; echo "not a permutation" 1>&2; } +# Exercise shuf's -i option. +shuf -i 1-100 > out || fail=1 +cmp in out > /dev/null && { fail=1; echo "not random?" 1>&2; } +sort -n out > out1 +cmp in out1 || { fail=1; echo "not a permutation" 1>&2; } + +# Exercise shuf's -e option. +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; } + # Before coreutils-6.3, this would infloop. -# "seq 1860" produces 8193 bytes of output. +# "seq 1860" produces 8193 (8K + 1) bytes of output. seq 1860 | shuf > /dev/null || fail=1 (exit $fail); exit $fail -- 2.34.1