Paul Eggert [Mon, 13 Mar 2017 23:35:55 +0000 (16:35 -0700)]
gzip: port zdiff, zless to Busybox
Problem reported by Denys Zagorui (Bug#26088).
* tests/zdiff: Check that diff uses POSIX-format output.
* zless.in (less_version): Don't exit merely because 'less -V'
fails; instead, assume 'less' is compatible with an old version of
the original 'less'. Busybox 'less -V' fails, but apparently its
'less' works anyway somehow.
Paul Eggert [Sat, 5 Nov 2016 03:15:42 +0000 (20:15 -0700)]
gzip: minor time stamp cleanups
* NEWS: Document this.
* gzip.c (get_method): Do not warn about MTIME out of range.
This should avoid useless chatter on hosts with 32-bit time_t
after the year 2038 (!).
(do_list): Do not pass junk time stamp to localtime.
(copy_stat): Do not report "time stamp restored" if restoration
fails.
Paul Eggert [Sat, 5 Nov 2016 03:15:42 +0000 (20:15 -0700)]
gzip --no-name: avoid spurious warning
Problem reported by Jim Meyering (Bug#24826).
* tests/timestamp: Add a test from Jim Meyering to exercise the fix
* zip.c (zip): Treat unknown time stamps as 0.
Paul Eggert [Tue, 6 Sep 2016 21:51:47 +0000 (14:51 -0700)]
gzip: fix some Y2038 etc. bugs
* NEWS: Document this.
* gzip.c (get_method): Warn about out-of-range MTIME,
and ignore it instead of relying on possibly-undefined behavior.
* tests/Makefile.am (TESTS): Add timestamp.
* tests/timestamp: New test.
* zip.c (zip): Warn about out-of-range file time stamp.
Jim Meyering [Tue, 30 Aug 2016 03:28:48 +0000 (20:28 -0700)]
maint: fix gzip-specific syntax-check rule
* cfg.mk (sc_gzip_copyright_check): This rule had two problems.
It was failing erroneously (the copyright date in gzip.c is fine),
yet it was complaining. The first problem is that the rule's
diagnostic mentioned the wrong file: lib/version-etc.c, rather than
./gzip.c. The second problem is that it specified this file name
via "in_files" rather than the "in_vc_files" variable.
Paul Eggert [Wed, 11 May 2016 23:23:51 +0000 (16:23 -0700)]
gzip: drop mentions of Amiga, VMS
These platforms were not supported anyway, and their code was
suffering from bitrot. This patch may also fix some file name
glitches on MS-Windowsish platforms.
* bootstrap.conf (gnulib_modules): Add dosname.
* gzip.c: Include dosname.h.
(shorten_name, treat_dir): Use last_component rather than looking
at path separators by hand.
* tailor.h: Remove sections on porting to VMS and to Amiga,
since dosname.h doesn't support these platforms anyway.
(PATH_SEP2, PATH_SEP3, STDC_HEADERS, SUFFIX_SEP, RECORD_IO)
(HAVE_CHOWN, HAVE_LSTAT, HAVE_SYS_DIR_H, direct): Remove. All
uses removed. Many uses replaced by calls to ISSLASH and/or
last_component.
Paul Eggert [Wed, 20 Apr 2016 05:05:57 +0000 (22:05 -0700)]
gzip: simplify by closing ourselves
This simplifies the previous fix, by avoiding the use of the
closein module. That module was problematic, as gzip normally
does not use stdio for output and never uses it for input.
Also, it is a heavyweight module, as it drags many files into lib
(c-ctype.c, c-ctype.h, closein.c, closein.h, closeout.c, closeout.h,
close-stream.c, close-stream.h, config.charset, c-strcasecmp.c,
c-strcaseeq.h, c-strcase.h, c-strncasecmp.c, fpending.c, fpending.h,
freadahead.c, freadahead.h, localcharset.c, localcharset.h, mbrtowc.c,
mbsinit.c, quotearg.c, quotearg.h, quote.h, ref-add.sin, ref-del.sin,
streq.h, wctype-h.c, wctype.in.h) and into m4 (closein.m4, closeout.m4,
close-stream.m4, codeset.m4, configmake.m4, fpending.m4, freadahead.m4,
glibc21.m4, localcharset.m4, locale-fr.m4, locale-ja.m4, locale-zh.m4,
mbrtowc.m4, mbsinit.m4, mbstate_t.m4, quotearg.m4, wctype_h.m4),
and these files are thus no longer needed.
* bootstrap.conf (gnulib_modules): Remove closein.
* gzip.c: Don't include closein.h.
(stdin_was_read): New static var.
(main): Don't use close_stdin.
Invoke finish_out to exit after outputting via stdio's stdout.
Close stdin after reading it.
Restore previous way of closing stdout.
(treat_stdin): Record that stdin was read.
(finish_out): New function.
Paul Eggert [Wed, 20 Apr 2016 00:43:09 +0000 (17:43 -0700)]
gzip: fix bug with -l output to pipes
Problem reported by Christian Franke via Eric Blake in:
http://bugs.gnu.org/23314
* NEWS: Mention this.
* gzip.c (main): Do not close stdout twice when given -l.
Instead, -l now just fflushes stdout, so that fdatasync
can synchronize it if --synchronize is also specified.
* tests/list: New test case.
* tests/Makefile.am (TESTS): Add it.
Paul Eggert [Mon, 28 Mar 2016 23:26:45 +0000 (16:26 -0700)]
Port to Oracle Solaris Studio 12.4
Problem reported by Kiyoshi KANAZAWA in: http://bugs.gnu.org/23133
* NEWS: Document this.
* configure.ac (ASMV): Do not define if NO_ASM is
anywhere in DEFS; it doesn't need to be surrounded by white space.
* lib/match.c: Do not use x86 version if __x86_64__ is defined.
Paul Eggert [Fri, 25 Mar 2016 19:57:05 +0000 (12:57 -0700)]
Port to NetBSD 7.0
Problem reported by Assaf Gordon in: http://bugs.gnu.org/23107#13
* gzexe.in, zdiff.in, zgrep.in: Don't rely on mktemp -t,
as it has a different meaning in NetBSD.
Jim Meyering [Thu, 24 Mar 2016 16:06:18 +0000 (09:06 -0700)]
gzip: also honor GZIP=--rsyncable
* gzip.c (main): Also accept --rsyncable when it is specified
via the GZIP environment variable.
I noticed this when gzip's "make dist" failed because maint.mk
detected that gzip now honors --rsyncable, yet when it set GZIP_ENV
to include that, and that propagated via automake-generated code
to the GZIP setting used in the "make dist" rule, there, it was not
honored, and caused "make dist" to fail.
Paul Eggert [Mon, 21 Mar 2016 22:41:55 +0000 (15:41 -0700)]
Port to Solaris 11 /bin/sh
* m4/shell.m4 (AC_PROG_SHELL): Reject Solaris 11 /bin/sh.
A problem was reported by Nelson H. F. Beebe for OpenIndiana.
I reproduced a problem with different symptoms on Solaris 11.
Switching to Bash fixed it, and I hope this fixes it for
OpenIndiana too, since both problems appear to be shell-related.
Paul Eggert [Fri, 18 Mar 2016 22:20:53 +0000 (15:20 -0700)]
zgrep: with -f SPECIAL, read SPECIAL just once
Problem reported by Fulvio Scapin in: http://bugs.gnu.org/22945
* NEWS: Document this.
* tests/zgrep-f: Add a test.
Adjust a test to cover the case of more than one line in -f's input.
* zgrep.in (with_filename): With -f FILE, if FILE is stdin or not
a regular file, copy it into a temporary and use the temporary.
Paul Eggert [Tue, 15 Mar 2016 22:45:42 +0000 (15:45 -0700)]
gzip: port to AIX 7.1 + xlc V12.1
* inflate.c, unlzw.c, util.c: Include tailor.h after including any
system include file that might in turn include signal.h for the
first time, so that SIGPIPE is not #defined to 0 prematurely,
which clashes with signal.h's SIGPIPE.
Paul Eggert [Mon, 7 Mar 2016 00:47:22 +0000 (16:47 -0800)]
gzip: pacify clang
* gzip.c (do_list): Use 2D array of char for month abbreviations,
as this is clearer anyway, and it pacifies Clang. Problem reported
by Assaf Gordon in: http://bugs.gnu.org/22900#40
Paul Eggert [Sun, 6 Mar 2016 08:17:41 +0000 (00:17 -0800)]
gzip: port zgrep to Solaris 11.2
Problem reported by Assaf Gordon in: http://bugs.gnu.org/22900#11
* zgrep.in: Port to Solaris 11.2 /bin/sh (ksh 93u 2011-02-08),
where $? is 256+SIG when a process was killed with signal SIG, and
where 'exit 257' is equivalent to 'exit 1'. Apparently some other
sh implementations use 256+128+SIG. So, instead of using plain
'exit $?', use the equivalent of 'exit ((128 * (128 <= $?)) + $? %
128)' within the script, and use the equivalent of 'kill -$($? %
128)' at the top level if the exit status is 128 or more.
Paul Eggert [Sun, 6 Mar 2016 01:18:59 +0000 (17:18 -0800)]
gzip: remove --__bindir
* NEWS: Document this.
* gzexe.in, gunzip.in, zcat.in, zcmp.in, zdiff.in, zegrep.in:
* zfgrep.in, zforce.in, zgrep.in, zless.in, zmore.in, znew.in:
Remove support for undocumented --__bindir option. Callers can
set PATH instead; that's less error-prone. This fixes some
'make check' failures on my Solaris 11 box, which occurred
because the test scripts were mistakenly testing the installed
gzip rather than the gzip in the working directory.
* Makefile.am (.in): Don't replace bindir.
(check-local): Set PATH instead of using --__bindir.
* tests/help-version (gunzip_setuphelp, gzexe_setuphelp)
(zcat_setuphelp, zcmp_setuphelp, zdiff_setuphelp)
(zegrep_setuphelp, zfgrep_setuphelp, zforce_setuphelp)
(zgrep_setuphelp, zless_setuphelp, zmore_setuphelp)
(znew_setuphelp): Remove. All uses removed.
(lbracket_setup): Default args to empty.
Jim Meyering [Sat, 5 Mar 2016 01:24:53 +0000 (17:24 -0800)]
tests: fix "make check" failure on AIX 7.1
* tests/Makefile.am (TESTS_ENVIRONMENT): Modernize:
remove unused shell_or_perl_ function, and use an
export_with_values function as grep does, to remove
a lot of duplication.
Reported by Assaf Gordon in http://debbugs.gnu.org/22900
Jim Meyering [Mon, 29 Feb 2016 03:48:38 +0000 (19:48 -0800)]
maint: dist-check.mk: remove .deps dirs before comparing
"make distcheck" with automake-from-trunk would fail like this:
...
Only in /gz/tests/torture/gzip/test/gzip-1.6.42-9d47.old: .deps
Only in /gz/tests/torture/gzip/test/gzip-1.6.42-9d47.old/lib: .deps
Only in /gz/tests/torture/gzip/test/gzip-1.6.42-9d47.old/lib/glthread: .deps
* dist-check.mk (my-distcheck): Remove all .deps directories before
comparing the two hierarchies.
Paul Eggert [Sun, 28 Feb 2016 07:58:54 +0000 (23:58 -0800)]
gzip: new option --synchronous
This follows up on the earlier patch to avoid data loss near the
system crashes. It makes the new behavior optional, with the
default off. See: http://bugs.gnu.org/22768
* NEWS, doc/gzip.texi (Sample, Invoking gzip), gunzip.in (usage):
* gzip.1, zcat.in (usage):
Document this.
* gzip.c (synchronous): New static var.
(SYNCHRONOUS_OPTION): New constant.
(longopts, help, main, treat_file): Add support for --synchronous.
Paul Eggert [Sat, 27 Feb 2016 22:12:46 +0000 (14:12 -0800)]
gzip: fdatasync output dir before unlinking
This follows up on the earlier patch to avoid data loss near
the system crashes. See: http://bugs.gnu.org/22768
* bootstrap.conf (gnulib_modules): Add dirname-lgpl, fdatasync,
openat-safer, unistd-safer, unlinkat.
* gzip.c: Include stddef.h, dirname.h.
Include fcntl--.h instead of fcntl-safer.h.
(RW_USER): Remove; no longer needed.
(dfname, dfd): New static vars.
(dot): New static const.
(atdir_eq, atdir_set): New functions.
(treat_file): Also fdatasync the output directory, if !keep.
(treat_file, create_outfile, open_and_stat):
Use dir fd for unlinkat and openat, if possible.
(open_and_stat): Omit mode argument, since it was always the
same. All callers changed.
* lib/.gitignore, m4/.gitignore: Add new gnulib files.
* tailor.h (PROTO, NO_STDIN_FSTAT, OPEN): Remove. Remove MACOS
section, as this stuff would not work anyway now, and circa 2001
Apple stopped supporting Mac OS 9 and earlier.
* zip.c: Do not include unistd.h and fcntl.h, as this file does
not directly use any symbols defined by those headers.
Jim Meyering [Mon, 2 Nov 2015 05:58:42 +0000 (21:58 -0800)]
maint: avoid three warnings from the very latest gcc-built-from-git
* unzip.c (unzip): Correct two format strings to match the types of the corresponding arguments.
* unlzw.c (unlzw): Cast an "int" to unsigned to match expected type of %x.
Jim Meyering [Mon, 24 Aug 2015 17:08:16 +0000 (10:08 -0700)]
maint: adjust copyright notices in *.in files to be consistent
The copyright year ranges in *.in files were not being updated,
because of a missing ", Inc." suffix. Add that, run
run "make udpate-copyright", and ensure 2010..2015 year
ranges are covered.
* gunzip.in: Update copyright notice and year ranges.
* gzexe.in: Likewise.
* zcat.in: Likewise.
* zdiff.in: Likewise.
* zforce.in: Likewise.
* zgrep.in: Likewise.
* zless.in: Likewise.
* zmore.in: Likewise.
* znew.in: Likewise.
Jim Meyering [Mon, 24 Aug 2015 16:10:51 +0000 (09:10 -0700)]
build: avoid -Wshift-negative-value warning
Configured with --enable-gcc-warnings, a gcc-6.x build would fail with this:
gzip.c:118:32: error: left shift of negative value
#define OFF_T_MIN (~ (off_t) 0 << (sizeof (off_t) * CHAR_BIT - 1))
* gzip.c [OFF_T_MAX]: Define in terms of TYPE_MAXIMUM, not OFF_T_MIN.
[OFF_T_MIN]: Remove now-unused definition.
Include "intprops.h" for definiton of TYPE_MAXIMUM.
* bootstrap.conf (gnulib_modules): Add intprops.
Jim Meyering [Wed, 29 Jul 2015 05:31:30 +0000 (22:31 -0700)]
maint: remove dead code
This package has not been compilable with -DCRYPT
since commit v1.4-82-g9d1b943. Remove final vestiges.
* bits.c (copy_block) [CRYPT]: Remove #ifdef'd code.
* inflate.c (NEXTBYTE) [CRYPT]: Likewise.
Prompted by a report from Flávio Medeiros
that HEADER and T might be used uninitialized.
Paul Eggert [Mon, 16 Mar 2015 21:25:17 +0000 (14:25 -0700)]
gzip: make the GZIP env var obsolescent
* NEWS, gzip.1:
* doc/gzip.texi (Environment, Tapes): Document this.
* gzip.c (args): Remove static var; no longer needed now that
'main' frees it. All uses removed.
(ENV_OPTION, shortopts): New constants.
(main): Warn about nontrivial uses of GZIP. Reject dangerous uses.
* tests/gzip-env: New test case.
* tests/Makefile.am (TESTS): Add it.
* util.c (add_envopt): Create new vector instead of adding to old
one. Only use changed.
Jim Meyering [Mon, 10 Jun 2013 01:35:47 +0000 (18:35 -0700)]
maint: ensure that --version's copyright date is current
* cfg.mk (sc_gzip_copyright_check): Ensure we keep this copyright
year number up to date. Reported by Paul Eggert.
* gzip.c (license_msg): Include only the current year number,
as is done in nearly every other program.
Paul Eggert [Mon, 10 Nov 2014 19:02:38 +0000 (11:02 -0800)]
gzip: adjust -v output when -k is also specified
Problem reported by Eric Benoit in: http://bugs.gnu.org/16401
* gzip.c (treat_file): When keeping a file, don't say it's replaced.
* NEWS: Document this.
* tests/keep: Test this.
Jim Meyering [Tue, 19 Aug 2014 15:59:38 +0000 (08:59 -0700)]
maint: enable more syntax checks
* cfg.mk (local-checks-to-skip): Remove several rule names from this
list, thus enabling the corresponding checks. To fix some, I made
syntactic changes to source files. In other cases, I exempted certain
files from the checks.
Add exemptions for these:
sc_prohibit_atoi_atof = ^(gzip|sample/sub)\.c$$
sc_space_tab = ^lib/match\.c$$
sc_useless_cpp_parens = ^(lib/match\.c|tailor\.h)$$
* configure.ac: Add quotes to fix under-quoting.
* deflate.c: Remove unnecessary cpp parentheses.
* tests/Makefile.am (TEST_ENVIRONMENT): Remove space-before-TAB.
* unlzw.c: Change some TABs to spaces.
Paul Eggert [Sun, 10 Aug 2014 23:29:06 +0000 (16:29 -0700)]
gzip: fix --suffix=z bug (Bug#18239)
* gzip.c (get_suffix): Put --suffix string at the end
of the list of suffixes if it is a suffix of one one them.
* tests/z-suffix: New file.
* tests/Makefile.am (TESTS): Add it.
Paul Eggert [Fri, 13 Jun 2014 01:43:08 +0000 (18:43 -0700)]
zgrep: exit with status 0 if a file matches and there's no trouble
Reported by Pavel Raiskup in: http://bugs.gnu.org/17760
* zgrep.in (res): Treat exit status 0 to be greater than 1.
Also, exit immediately on software configuration error.
Jim Meyering [Sun, 4 May 2014 02:04:12 +0000 (19:04 -0700)]
maint: update gnulib to latest and adapt streamsavedir usage
* gnulib: Update module to latest.
* gzip.c (treat_dir): Gnulib's streamsavedir API has changed:
call it with a new argument, SAVEDIR_SORT_NONE, to retain the
preceding behavior.
Paul Eggert [Fri, 7 Mar 2014 01:31:25 +0000 (17:31 -0800)]
zless: improve gzip failure checking, and port to new -V format
Problem reported by Jaroslaw Weglinski, and LESSOPEN change
suggested by Mark Nudelman, in: http://bugs.gnu.org/16951
This doesn't fix bug 16951 entirely, as 'less' needs to be changed
too, but it's a start.
* zless.in (check_exit_status): New var.
(LESSOPEN): Use it.
(use_input_pipe_on_stdin): Adjust to output format on Fedora 20,
where 'less -V' outputs "less 458 (POSIX regular expressions)"
on the first line.
Paul Eggert [Thu, 24 Oct 2013 07:19:56 +0000 (00:19 -0700)]
gzip: fix permissions issue on Solaris-like systems
I.e., on systems that let users give files away.
* gzip.c (do_chown): New function.
(copy_stat): Use it, to change the group, then the permissions,
then the owner. Idea suggested by Vladimir Marek in
<http://bugs.gnu.org/15672#11>
Paul Eggert [Fri, 4 Oct 2013 04:12:09 +0000 (21:12 -0700)]
znew: avoid denial-of-service issue
Reported by Rich Burridge in <http://bugs.gnu.org/15522>.
* znew.in: Rewrite to avoid the need for a temporary file in /tmp.
That way, we avoid the need for set -C
and worrying about denial of service.
Use touch -r and chmod --reference rather than cpmod.
Assume cp -p works, as it's now universal.
Quote 'echo' args better, while we're at it.
(warn, tmp, cpmod, cpmodarg): Remove.
(GZIP): Unset, so that we needn't test for gzip extension.
(ext): Now always '.gz'.
* znew.1: Document the change of implementation assumptions.
Paul Eggert [Wed, 19 Jun 2013 15:46:29 +0000 (08:46 -0700)]
tests: zgrep-signal race condition fix
* tests/zgrep-signal: Check that Perl supports dup2.
(exec_with_SIGPIPE_SIGDFL): Remove.
(write_to_dangling_pipe): Simplify by moving more of it into Perl.
Fix race condition, where subcommand writes to a pipe before the ":"
command exits. Problem reported by Thorsten Glaser in
<http://lists.gnu.org/archive/html/bug-gzip/2013-06/msg00028.html>.
Paul Eggert [Wed, 12 Jun 2013 18:42:34 +0000 (11:42 -0700)]
zgrep: usage should say which grep options are not supported
* zgrep.in (usage): Document which grep options are not supported.
Problem reported by Liron Paryente in
<http://lists.gnu.org/archive/html/bug-grep/2013-06/msg00005.html>.
Paul Eggert [Wed, 12 Jun 2013 03:34:06 +0000 (20:34 -0700)]
gzip: port util.c to Compaq C V6.5-303
* util.c (crc_32_tab): Move definition to front, since this
compiler doesn't allow declarations of static arrays with
incomplete types. Problem reported by Steven M. Schweda in
<http://lists.gnu.org/archive/html/bug-gzip/2013-06/msg00010.html>.
Paul Eggert [Wed, 12 Jun 2013 03:23:28 +0000 (20:23 -0700)]
tests: zgrep-context assumes grep knows context
* tests/Makefile.am (TESTS_ENVIRONMENT): Pass GREP too.
* tests/zgrep-context: Check that the underlying grep supports
context options. Problem reported by Steven M. Schweda in
<http://lists.gnu.org/archive/html/bug-gzip/2013-06/msg00010.html>.
Paul Eggert [Wed, 12 Jun 2013 00:53:53 +0000 (17:53 -0700)]
maint: port to platforms lacking SIGPIPE
* tailor.h (SIGPIPE): Define to 0 if not defined. This fixes a
porting bug introduced as part of 2012-11-16 syntax-check cleanup.
Problem reported by Bdale Garbee in
<http://lists.gnu.org/archive/html/bug-gzip/2013-06/msg00006.html>.
gzip: add "--keep" option to retain (don't delete) input files
gzip now accepts the --keep (-k) option, for consistency with tools
like xz, lzip and bzip2. With this option, gzip no longer removes
named input files when compressing and decompressing.
* doc/gzip.texi: Document it.
* gzip.1: Likewise.
* gunzip.in: Likewise.
* NEWS: Likewise.
* gzip.c: Add support for "--keep".
Paul Eggert [Mon, 15 Apr 2013 18:03:38 +0000 (11:03 -0700)]
tests: redo patch for non-GNU gzip installed in /usr/local/bin
Problem with previous patch reported by Antonio Diaz Diaz in
<http://lists.gnu.org/archive/html/bug-gzip/2013-04/msg00011.html>.
* tests/help-version (gunzip_setuphelp, gzexe_setuphelp)
(zcat_setuphelp, zcmp_setuphelp, zdiff_setuphelp)
(zegrep_setuphelp, zfgrep_setuphelp, zforce_setuphelp)
(zgrep_setuphelp, zless_setuphelp, zmore_setuphelp)
(znew_setuphelp): New functions, used when testing even --help.
(zdiff_setup, zcat_setup, znew_setup, zgrep_setup, gzexe_setup):
Use gzip_setuphelp to set --__bindir.
Paul Eggert [Wed, 10 Apr 2013 22:26:47 +0000 (15:26 -0700)]
tests: work even if non-GNU gzip is installed in /usr/local/bin
Problem reported by Antonio Diaz Diaz in
<http://lists.gnu.org/archive/html/bug-gzip/2013-04/msg00004.html>.
* tests/help-version (zdiff_setup, zcat_setup, znew_setup, zgrep_setup)
(gzexe_setup): Pass --__bindir so that subsidiary programs are our
own's, not /usr/local/bin's. This requires using 'eval' on the result.
(zcmp_setup, gunzip_setup, zmore_setup, zless_setup, zforce_setup)
(zegrep_setup, zfgrep_setup): Invoke one of the other setup functions,
to make the patterns more obvious and simplify future maintenance.
* zcmp.in, zegrep.in, zfgrep.in: Pass __bindir to subsidiary program.