diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | gzip.c | 18 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rwxr-xr-x | tests/list | 31 |
4 files changed, 45 insertions, 8 deletions
@@ -4,6 +4,9 @@ GNU gzip NEWS -*- outline -*- ** Bug fixes + gzip -l no longer falsely reports a write error when writing to a pipe. + [bug introduced in gzip-1.7] + Port to Oracle Solaris Studio 12 on x86-64. [bug present since at least gzip-1.2.4] @@ -664,14 +664,16 @@ int main (int argc, char **argv) } else { /* Standard input */ treat_stdin(); } - if (list && !quiet && file_count > 1) { - do_list(-1, -1); /* print totals */ - } - if (to_stdout - && ((synchronous - && (fdatasync (STDOUT_FILENO) != 0 && errno != EINVAL)) - || close (STDOUT_FILENO) != 0) - && errno != EBADF) + if (list) + { + /* Output any totals, and check for output errors. */ + if (!quiet && 1 < file_count) + do_list (-1, -1); + if (fflush (stdout) != 0) + write_error (); + } + if (to_stdout && synchronous && fdatasync (STDOUT_FILENO) != 0 + && errno != EINVAL && errno != EBADF) write_error (); do_exit(exit_code); return exit_code; /* just to avoid lint warning */ diff --git a/tests/Makefile.am b/tests/Makefile.am index 5022464..71cf4ad 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -20,6 +20,7 @@ TESTS = \ help-version \ hufts \ keep \ + list \ memcpy-abuse \ mixed \ null-suffix-clobber \ diff --git a/tests/list b/tests/list new file mode 100755 index 0000000..7576dc3 --- /dev/null +++ b/tests/list @@ -0,0 +1,31 @@ +#!/bin/sh +# Exercise the --list option. + +# Copyright 2016 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 +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# limit so don't run it by default. + +. "${srcdir=.}/init.sh"; path_prepend_ .. + +echo zoology zucchini > in || framework_failure_ +cp in orig || framework_failure_ + +gzip -l in && fail=1 +gzip -9 in || fail=1 +gzip -l in.gz >out1 || fail=1 +gzip -l in.gz | cat >out2 || fail=1 +compare out1 out2 || fail=1 + +Exit $fail |