Jim Meyering [Fri, 13 May 2011 08:58:24 +0000 (10:58 +0200)]
maint: use gnulib's new readme-release module
* bootstrap.conf (gnulib_modules): Add readme-release.
(bootstrap_epilogue): Add the recommended perl one-liner.
* README-release: Remove file; it is now generated from gnulib.
* .gitignore: Add it.
Jim Meyering [Mon, 9 May 2011 07:00:19 +0000 (09:00 +0200)]
maint: limit scope of several functions
* deflate.c (longest_match): Move extern declaration into #if-ASMV block.
[!ASMV]: Define as static.
* inflate.c: Remove unnecessary prototypes.
ANSI-declify functions and declare them to be static.
Jim Meyering [Mon, 9 May 2011 06:02:49 +0000 (08:02 +0200)]
maint: prepare for tight-scope rule: use noinst_HEADERS
* Makefile.am (EXTRA_DIST): Move lzw.h and gzip.h from here to ...
(noinst_HEADERS): ...here.
For convenience, since the tight-scope rule uses $(noinst_HEADERS).
Jim Meyering [Sun, 20 Mar 2011 08:53:04 +0000 (09:53 +0100)]
maint: stop using .x-sc_* files to list syntax-check exemptions
Instead, use the new mechanism with which you merely use a
variable (derived from the rule name) defined in cfg.mk to an ERE
matching the exempted file names.
* gnulib: Update to latest, to get maint.mk that implements this.
* .x-sc_file_system: Remove file.
* .x-sc_prohibit_tab_based_indentation: Likewise.
* .x-sc_require_config_h: Likewise.
* .x-sc_require_config_h_first: Likewise.
* cfg.mk: Define variables to exempt the same files.
Paul Eggert [Wed, 10 Nov 2010 08:57:49 +0000 (00:57 -0800)]
zgrep: don't assume traditional behavior with signal numbers
* zgrep.in: Don't assume the exit status is the signal number plus
128, as POSIX doesn't require this. No need to kill self; exiting
with large status is enough. Propagate all exit statuses greater
than 1, not merely those in the range 129..143, as there's no need
to treat that range specially (and it's not portable anyway).
Paul Eggert [Tue, 9 Nov 2010 21:17:57 +0000 (13:17 -0800)]
zgrep: fix shell portability bug with -f; fix mishandling of "-e -"
* tests/zgrep-f: Check for "zgrep -e -" bug, too.
* zgrep.in: Don't assume that if the shell redirects fd 6, then
this redirection is visible to the subsidiary grep. POSIX doesn't
guarantee this visibility except for file descriptors 0, 1, and 2,
and ksh does not support it. Problem reported by Thomas Schulz in
<http://lists.gnu.org/archive/html/bug-gzip/2010-11/msg00000.html>.
Also, fix a related bug: "-e -" was mishandled. These two bugs
were introduced by commit 5b54db4546b84ec97ff57a62f8ddb98faacf77f2
dated 2009-10-09.
(escape): Change the convention: do not assume that a stray X
is present at the end of the last line. All uses changed.
There was no longer any need for this convention, and fixing this
made it a bit easier to use 'sed' in a later part of the fix.
Paul Eggert [Mon, 8 Nov 2010 16:06:15 +0000 (08:06 -0800)]
maint: fix copyright dates that were munged by a maintenance script
* gunzip.in, gzexe.in, zcat.in, zcmp.in, zdiff.in, zforce.in:
* zgrep.in, zless.in, zmore.in, znew.in:
A script went awry when updating copyright dates in gzip's shell
scripts. It should update comments to look like "# Copyright (C)
2007, 2010 Free Software Foundation, Inc." (with a set of years)
and version messages to look like "Copyright (C) 2010 Free
Software Foundation, Inc." (with just the most-recent year).
Instead, it sometimes ignored one, sometimes the other, and
typically put ranges into version messages. Fix all this stuff by
hand, using dates that I divined from the change logs (so they're
a bit more accurate than script-generated dates). We need to fix
the script before it runs in 2011.
Paul Eggert [Wed, 15 Sep 2010 17:55:19 +0000 (10:55 -0700)]
zgrep: fix parsing of -Eh options
* zgrep.in: Update list of single-letter options to match what's
in GNU grep. Add -h as an alias for --no-filename. Bug reported
by Vladimir Sidorenko in
<http://lists.gnu.org/archive/html/bug-gzip/2010-09/msg00007.html>.
Paul Eggert [Tue, 17 Aug 2010 10:05:56 +0000 (03:05 -0700)]
gzip: fix NO_SIZE_CHECK for VMS
* gzip.c (do_list): Use if, not #if.
* tailor.h (NO_SIZE_CHECK) [defined(VAXC) || defined(VMS)]: Define.
* zip.c (zip): Simplify conditional, which was incorrect at any rate
for VMS.
Paul Eggert [Sun, 15 Aug 2010 23:27:06 +0000 (16:27 -0700)]
algorithm.doc: mention Internet RFC 1952 and modernize a bit
* algorithm.doc: Update to mention header-CRC and Internet RFC 1952.
Also, remove the crypto stuff, which never worked.
Inspired by that same suggestion of Greg Roelofs.
Paul Eggert [Sun, 15 Aug 2010 22:50:12 +0000 (15:50 -0700)]
gzip: Use 0x%04x instead of %x when printing 16-bit checksums
* gzip.c (get_method): Use 0x%04x, not %x, to print 16-bit checksums.
Inspired by a suggestion of Greg Roelofs in
http://lists.gnu.org/archive/html/bug-gzip/2010-08/msg00004.html
Paul R. Eggert [Mon, 19 Jul 2010 17:22:10 +0000 (10:22 -0700)]
gzip: don't assume C99, and don't assume overlapping memcpy should work
* tailor.h (NOMEMCPY): Remove. memcpy is entitled to not work
on overlapping blocks.
* inflate.c (inflate_codes): Don't put decl after statement.
Omit NOMEMCPY.
Paul Eggert [Sat, 3 Jul 2010 03:41:11 +0000 (20:41 -0700)]
Decode FHCRC flag properly, as per Internet RFC 1952.
Problem reported by Greg Roelofs in:
http://lists.gnu.org/archive/html/bug-gzip/2010-06/msg00003.html
* gzip.c (discard_input_bytes): New function.
(get_method): Check header checksum, if given. We never generate it,
but other programs may.
* gzip.h (HEADER_CRC): Renamed from CONTINUATION. All uses changed.
* tailor.h [defined __50SERIES]: Remove PRIMOS stuff that was obsolete
anyway and would have made this patch harder to maintain.
(get_char, put_char): Remove.
* zip.c (zip): Use put_byte instead of the now-removed put_char.
Jim Meyering [Wed, 7 Apr 2010 06:52:09 +0000 (08:52 +0200)]
build: keep --version strictly up to date
Before this change, in development, gzip's --version output could lag
behind reality by a couple deltas or by a "-dirty" suffix. That would
lead to spurious failure of the new --version-$VERSION PATH cross-check.
* Makefile.am (version.c, version.h): New rules.
(BUILT_SOURCES): Set/append.
(noinst_LIBRARIES, noinst_libver_a_SOURCES): Define.
(gzip_LDADD): Add libver.a.
(DISTCLEANFILES): Define.
* gzip.c (license): Use Version, not VERSION.
Jim Meyering [Mon, 5 Apr 2010 18:56:19 +0000 (20:56 +0200)]
build: update gnulib submodule to latest, and adapt
* cfg.mk: Update to use new _sc_search_regexp interface. Run this:
perl -pi -e 's/\b_prohibit_regexp\b/_sc_search_regexp/;'
-e 's/\bmsg=/halt=/; s/\bre=/prohibit=/;' cfg.mk
and then adjust backslashes so they still line up.
* cfg.mk (local-checks-to-skip): Add new sc_texinfo_acronym, to skip it.
* msdos/tailor.c (fcalloc): Mark a diagnostic for translation, to
placate stricter syntax-check, even though no one uses this file.
Jim Meyering [Sat, 20 Mar 2010 12:05:58 +0000 (13:05 +0100)]
use assembly code matcher when possible
* configure.ac (ASCPPPOST): Backslash-escape "#" in AC_SUBST'd
variable, to keep make from seeing it as a comment-introducer.
Based on a patch by Petr Pisar.
* lib/Makefile.am (match.$(OBJEXT)): Use AM_V_GEN and AM_V_at.
* lib/match.c: Don't include <config.h>.
It would impede configure-time assembler test.
* .x-sc_require_config_h: Exempt lib/match.c from syntax-check.
* .x-sc_require_config_h_first: Likewise.
Jim Meyering [Fri, 19 Mar 2010 17:09:20 +0000 (18:09 +0100)]
do not use stat.st_mtime of a non-regular file
* gzip.c: Include "timespec.h".
(treat_stdin): Use st_mtime only from a regular file.
This matters at least on Cygwin 1.7.1-1, for which a stdin-pipe has
the mtime of /dev/null, rather than the gzip-documented-for-pipes
"current time". Reported by Denis Excoffier.
Jim Meyering [Sat, 20 Feb 2010 10:07:55 +0000 (11:07 +0100)]
gzip: fix a data-loss bug when decompressing with --suffix=''
* gzip.c (main): Disallow an empty --suffix=S also with -d.
Otherwise, "gzip -d -S '' F.gz" would ask if it's ok to remove the
existing file, "F.gz"; if you reply "yes", you'd lose all of that data.
Use of an empty suffix was already rejected in compression mode.
* gzip.1 (--suffix (-S)): Do not recommend to use "gunzip -S '' *".
Describe how the suffix is used when decompressing, too.
* NEWS (Bug fixes): mention the fix.
Reported by Ripduman Sohan.
Mark Adler [Wed, 3 Feb 2010 09:11:33 +0000 (10:11 +0100)]
gzip -cdf now handles concatenation of gzip'd and uncompressed data
* util.c (copy): Change semantics so as to honor a decremented inptr.
* gzip.c (get_method): When needed (-cdf), decrement inptr rather
than clearing it -- and output the first magic byte.
Dmitry V. Levin [Sat, 30 Jan 2010 22:36:35 +0000 (22:36 +0000)]
zgrep: terminate gracefully when a pipeline is interrupted by a signal
zgrep is not terminated gracefully when its grep/sed pipeline
is terminated by a signal. For example, a command like
zgrep -F .TH /usr/share/man/man1/*.gz | head
continues working long after the "head" process completes.
Another example, a command like
zgrep unmatched-pattern /usr/share/man/man1/*.gz
cannot be interrupted by sending a SIGQUIT with Ctrl-\ key, it outputs
zgrep: line 221: test: : integer expression expected
and goes on.
* zgrep.in: Terminate gracefully when the grep/sed pipeline is
terminated by a signal.
* tests/zgrep-signal: New test.
* Makefile.am (TESTS): Add it.
Dmitry V. Levin [Mon, 1 Feb 2010 21:40:41 +0000 (00:40 +0300)]
wrapper scripts: write diagnostics to stderr, not to stdout
* zforce.in: In case of usage error, output short error diagnostics to
stderr instead of printing help text to stdout.
* zmore.in: Likewise.
* znew.in: Likewise.
Jim Meyering [Mon, 1 Feb 2010 12:34:46 +0000 (13:34 +0100)]
tests: remove unnecessary use of "path_prepend_ ."
It is unnecessary, since Makefile.am's TESTS_ENVIRONMENT setting
already adds the top build directory, and besides, is only
marginally useful when running stand-alone, since it presumes
that the script is being run from the top build directory.
* tests/helin-segv: Remove unnecessary use of path_prepend_.
* tests/memcpy-abuse: Likewise.
* tests/trailing-nul: Likewise.
* tests/zdiff: Likewise.
* tests/zgrep-f: Likewise.
Jim Meyering [Mon, 11 Jan 2010 10:51:13 +0000 (11:51 +0100)]
build: do not override gnulib-provided AM_CFLAGS options
Avoid a warning from automake:
lib/Makefile.am:24: AM_CFLAGS multiply defined in condition TRUE ...
lib/gnulib.mk:30: ... `AM_CFLAGS' previously defined here
lib/Makefile.am:20: `lib/gnulib.mk' included from here
* lib/Makefile.am (AM_CFLAGS): Append $(WARN_CFLAGS) and
$(WERROR_CFLAGS), i.e., use "+=", not "=".
This was introduced via 2009-12-17 commit 0341fc22,
"build: with --enable-gcc-warnings, use -Werror",
but fortunately is not a bug, because the definition
it would have overridden was always empty.
Jim Meyering [Sun, 10 Jan 2010 19:53:10 +0000 (20:53 +0100)]
gzip -d would fail with a CRC error...
...for some inputs, and some memcpy implementations. It is possible
that an offending input has to be compressed "from FAT filesystem
(MS-DOS, OS/2, NT)", since the sole reproducer no longer evokes a
CRC error when uncompressed and recompressed on a GNU/Linux system.
Also, using an unpatched reverse-memcpy-gzip on over 100,000 inputs
on a GNU/Linux system did not turn up another reproducer.
* inflate.c (inflate_codes): Don't call memcpy with overlapping regions.
Properly detect when source and destination overlap.
* tests/memcpy-abuse: New test, to trigger misbehavior.
* Makefile.am (TESTS): Add it.
* NEWS (Bug fixes): Mention it.
Reported by Alain Magloire in
http://thread.gmane.org/gmane.comp.gnu.gzip.bugs/307
Jim Meyering [Fri, 8 Jan 2010 18:18:37 +0000 (19:18 +0100)]
tests: switch to gnulib's init.sh test infrastructure
* tests/test-lib.sh: Remove file.
* tests/init.sh: New file, from gnulib.
* tests/trailing-nul: Use the new file.
* tests/zdiff: Likewise.
* tests/zgrep-f: Likewise.
* Makefile.am (EXTRA_DIST): List tests/init.sh, not test-lib.sh.