summaryrefslogtreecommitdiff
path: root/unzip.c
Commit message (Collapse)AuthorAgeFilesLines
* maint: update copyright datesJim Meyering2023-01-011-1/+1
|
* maint: port function definitions to C23Paul Eggert2022-12-251-4/+7
| | | | | | | C23 does not allow K&R style function definitions. Use protyped definitions. However, don't bother with (void) in function definitions since C23 prefers (); so prefer () to (void) as this will work with older compilers anyway.
* maint: make update-copyrightJim Meyering2022-01-031-1/+1
|
* gzip: gzip -l now outputs accurate sizePaul Eggert2021-12-151-0/+3
| | | | | | | | | | | | | | | | | | gzip -l now decompresses to see how long the uncompressed file was. This fixes what is by far the most common bug report for gzip. It has a significant performance cost, but it’s worth it nowadays. * gzip.c (main): -l now sets 'test' too. All uses of 'test' changed. (treat_stdin, treat_file): Call do_list after decompressing, so that the length is known. (do_list): Omit arg IFD, since it is no longer needed. All callers changed. Get the CRC and uncompressed size from input_crc and bytes_out instead of using lseek. * tests/list-big: New test. * unzip.c (unzip): Set unzip_crc before returning. * util.c (write_buf): If 'test', output nothing. Update bytes_out with output byte count, regardless of 'test'. All callers changed.
* maint: update all copyright year number rangesJim Meyering2021-01-011-1/+1
| | | | | | | Run "make update-copyright" and then... * gnulib: Update to latest with copyright year adjusted. * tests/init.sh: Sync with gnulib to pick up copyright year. * bootstrap: Likewise.
* maint: update all copyright year number rangesJim Meyering2020-01-011-1/+1
| | | | | | | Run "make update-copyright" and then... * gnulib: Update to latest with copyright year adjusted. * tests/init.sh: Sync with gnulib to pick up copyright year. * bootstrap: Likewise.
* Improve IBM Z patchPaul Eggert2019-04-021-1/+1
| | | | | | | | | | | | | | | Most of this is minor changes to use GNU style and C99 constructs. * NEWS: Mention IBM Z. * bootstrap.conf (gnulib_modules): Add stdalign. * dfltcc.c: Include stdalign.h, stdbool.h. (union aligned_dfltcc_qaf_param, union aligned_dfltcc_param_v0): New types, used for C11-style alignment. All uses changed. (init_param): * gzip.c (BUFFER_ALIGNED): New macro. (inbuf, outbuf, window): Use it, so buffers are aligned everywhere. * gzip.h (INBUFSIZ, OUTBUFSIZE): Use big buffers everywhere, unless SMALL_MEM. * zip.c (SLOW, FAST): Now enums since they need not be macros:
* bug#34918: [PATCH] Add support for IBM Z hardware-accelerated deflateIlya Leoshkevich2019-04-021-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Future versions of IBM Z mainframes will provide DFLTCC instruction, which implements deflate algorithm in hardware with estimated compression and decompression performance orders of magnitude faster than the current gzip and ratio comparable with that of level 1. This patch adds DFLTCC support to gzip. In order to enable it, the following build commands should be used: $ ./configure --enable-dfltcc $ make When built like this, gzip would compress in hardware on level 1, and in software on all other levels. Decompression will always happen in hardware. In order to enable DFLTCC compression for levels 1-6 (i.e. to make it used by default) one could either add -DDFLTCC_LEVEL_MASK=0x7e at compile time, or set the environment variable DFLTCC_LEVEL_MASK to 0x7e at run time. Two DFLTCC compression calls produce the same results only when they both are made on machines of the same generation, and when the respective buffers have the same offset relative to the start of the page. Therefore care should be taken when using hardware compression when reproducible results are desired. One such use case - reproducible software builds - is handled explicitly: when SOURCE_DATE_EPOCH environment variable is set, the hardware compression is disabled. This patch tries to add DFLTCC support in a least intrusive way. All SystemZ-specific code was placed into a separate file, but unfortunately there is still a noticeable amount of changes in the main gzip code. Below is the summary of those changes. DFLTCC will refuse to write an End-of-block Symbol if there is no input data, thus in some cases it is necessary to do this manually. In order to achieve this, bi_buf and bi_valid were promoted to extern variables. lm_init() function moves the input buffer into the window, which is not desirable for DFLTCC. Therefore, its invocation was moved to software-only deflate(). In addition to initializing the window, this function also used to convert compression level to flags, which is still needed for DFLTCC. This responsibility was handed off to zip() function. To achieve maximum performance with DFLTCC, inbuf and outbuf must be 256k big and page-aligned. Additionally, for DFLTCC to work at all, the window must be page-aligned. In addition to compression, DFLTCC computes CRC-32 checksum, therefore, whenever it's used, software checksumming needs to be suppressed and its results replaced by those of dfltcc. This is achieved by introducing the new getcrc() and setcrc() functions. Unlike the current software implementation, DFLTCC decompresses data into the output buffer, and not the window. Therefore, just like flushing the window, flushing the output buffer must honor the test flag. Finally, znew-k test assumes that "znew -K" would not convert the test .Z file to .gz, which is not the case with DFLTCC. Since this is not the main point of the test, this assumption was relaxed.
* maint: update all copyright dates via "make update-copyright"Jim Meyering2019-01-011-1/+1
| | | | * gnulib: Also update submodule for its copyright updates.
* maint: update gnulib and copyright dates for 2018Jim Meyering2018-01-031-1/+1
| | | | | | * gnulib: Update to latest. * bootstrap: Update from gnulib. * all files: Run "make update-copyright".
* maint: change "time stamp" to "timestamp" globallyJim Meyering2017-02-061-1/+1
| | | | | | | | | | | | | | | | | | | This avoids a new syntax-check failure. * ChangeLog-2007: Perform that change. * NEWS: Likewise. * algorithm.doc: Likewise. * doc/gzip.texi: Likewise. * gunzip.in: Likewise. * gzip.1: Likewise. * gzip.c: Likewise. * gzip.h: Likewise. * m4/.gitignore: Likewise. * sample/ztouch: Likewise. * tests/timestamp: Likewise. * unzip.c: Likewise. * zip.c: Likewise. * znew.1: Likewise. * cfg.mk: Update the old news hash accordingly.
* maint: update gnulib and copyright dates for 2017Jim Meyering2017-01-011-1/+1
| | | | | * gnulib: Update to latest. * all files: Run "make update-copyright".
* maint: update copyright year, bootstrap, init.shJim Meyering2016-01-011-1/+1
| | | | | | | | | Run "make update-copyright" and then... * gzip.c: Transform the copyright notice via s/2015/2016/. * gnulib: Update to latest. * tests/init.sh: Update from gnulib. * bootstrap: Likewise.
* maint: avoid three warnings from the very latest gcc-built-from-gitJim Meyering2015-11-011-1/+1
| | | | | * 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.
* maint: update copyright year ranges to include 2015; update gnulibJim Meyering2015-01-011-1/+1
|
* maint: udpate all copyright notices via "make update-copyright"Jim Meyering2014-06-071-1/+1
|
* maint: update all copyright year number rangesJim Meyering2013-01-041-1/+1
| | | | Run "make update-copyright".
* maint: update all copyright year number rangesJim Meyering2012-01-011-1/+1
| | | | Run "make update-copyright".
* maint: declare many variables to be staticJim Meyering2011-05-091-4/+3
| | | | | | | | | | * deflate.c: Likewise. * gzip.c: Likewise. * gzip.h: Likewise. * inflate.c: Likewise. * trees.c: Likewise. * unzip.c: Likewise. * util.c: Likewise.
* maint: remove crypt.[ch] stubsJim Meyering2011-05-091-1/+0
| | | | | | | | | | * Makefile.am (gzip_SOURCES): Remove crypt.c (EXTRA_DIST): Remove crypt.h * crypt.c, crypt.h: Remove files. * unpack.c: Don't #include "crypt.h" * zip.c: Likewise * util.c: Likewise. * unzip.c: Likewise.
* maint: update copyright year ranges to include 2011Jim Meyering2011-01-031-1/+1
| | | | Run "make update-copyright", so "make syntax-check" works in 2011.
* global: convert indentation-TABs to spacesJim Meyering2010-02-031-63/+63
| | | | | | | | | | | Transformed via this shell code: t=$'\t' git ls-files \ | grep -vE '(^|/)((GNU)?[Mm]akefile|ChangeLog)|\.(am|mk)$' \ | grep -vE 'tests/pr/|help2man' \ | xargs grep -lE "^ *$t" \ | xargs perl -MText::Tabs -ni -le \ '$m=/^( *\t[ \t]*)(.*)/; print $m ? expand($1) . $2 : $_'
* maint: update all FSF copyright year lists to include 2010Jim Meyering2010-01-011-1/+1
| | | | | | Use this command: git ls-files |grep -vE '^(\..*|COPYING|gnulib)$' |xargs \ env UPDATE_COPYRIGHT_USE_INTERVALS=1 build-aux/update-copyright
* build: avoid warnings about unused macrosJim Meyering2009-11-201-1/+1
| | | | | * unzip.c (LOCTIM): Comment out unused macro. * deflate.c (EQUAL): Remove definition. Use "0" at sole point of use.
* maint: update existing copyright year lists to include 2009Jim Meyering2009-09-261-1/+1
| | | | * bootstrap.conf (gnulib_modules): Add update-copyright.
* maint: remove RCS $Id$ variables and commentsJim Meyering2009-09-261-4/+0
|
* Update to GPLv3.Paul Eggert2007-07-031-1/+1
|
* * NEWS, configure.ac (AC_INIT):Paul Eggert2006-11-201-15/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Version 1.3.6 released. * NEWS: Describe 1.3.6's changes. * NEWS, README, README-alpha, TODO: Change from GPL to FDL. * .cvsignore, README-cvs, bootstrap, bootstrap.conf: New files. * doc/Makefile.am, lib/Makefile.am: New files. * THANKS: Change own email address to cs.ucla.edu. Add Sverre Jarp. * TODO: Add new tasks to remove porting cruft and all those buggy scripts. * configure.ac: Renamed from configure.in. (AC_PREREQ): Bump to 2.60. (AC_INIT): Bump version to 1.3.6. (AC_CONFIG_AUX_DIR): New. (AC_CONFIG_HEADERS): Move config.h to lib. Input is now lib/config.hin. (AM_INIT_AUTOMAKE): Add gnits, dist-shar. (AC_PROG_CC_STDC): New, replacing AC_PROG_CC. (AM_PROG_CC_C_O, AC_PROG_RANLIB): New. (AC_AIX, AC_GNU_SOURCE, AC_MINIX): Remove; gnulib does them now. (gl_EARLY, gl_INIT): New. match.c was moved to lib/match.c. (AC_CHECK_HEADERS_ONCE): Replace AC_CHECK_HEADERS. Don't check for sys/utime.h or utime.h. (AC_CHECK_FUNCS_ONCE): Replace AC_CHECK_FUNCS. Check for fchmod and fchown, not utime. (AC_REPLACE_FUNCS): Remove; rpmatch is now done by gnulib. (AC_CONFIG_FILES): Add doc/Makefile, lib/Makefile. * bits.c: Use the more-usual form for copyright notices in source code. * deflate.c: Likewise. * gzip.c: Likewise. * gzip.h: Likewise. * inflate.c: Likewise. * lzw.h: Likewise. * revision.h: Likewise. * tailor.h: Likewise. * trees.c: Likewise. * unpack.c: Likewise. * unzip.c: Likewise. * util.c: Likewise. * crypt.c (dummy): Add decl so that pedantic compilers won't complain about an empty file. * gzip.c (license_msg): Use more-modern wording. Include fcntl-safer.h, openat.h, stat-macros.h, stat-time.h. Simply include <dirent.h> if !NO_DIR, removing a rats-nest of #ifdefs. Simply include <utimens.h> if !defined NO_UTIME, removing a another rats-nest of #ifdefs. (DIR_OPT, TIME_OPT): Remove. (_D_EXACT_NAMLEN): Renamed from NAMLEN. All uses changed. (S_ISDIR, S_ISREG, O_BINARY, O_CREAT, O_EXCL, S_IRUSR, S_IWUSR): Remove; gnulib now does this. (RETSIGTYPE): Remove; Autoconf does this. (program_name): Renamed from progname, for compatibility with gnulib. All uses changed. (time_stamp): Now struct timespec, not time_t. All uses changd. (remove_oftime): Now volatile. (reset_times): Remove; now done by futimens. (usage): Remove. (try_help): New function. (help, license): Don't output date as part of version. A version number suffices. (help): Redo help message to match style of coreutils etc. (version): Don't bother printing compile-time configuration info like STDC_HEADERS. (main): Don't assume strlen (argv[0]) < INT_MAX (!). On usage errors, suggest --help without outputting all the help. (main, do_list): Remove unnecessary casts. (treat_stdin, treat_file, get_method, copy_stat): Support sub-second time stamp resolution. (treat_file, copy_istat): Close some race conditions if files are renamed as we read or write them. (treat_file): Do not attempt to reset the access times of directories that we read. (open_and_stat, open_input_file): New functions. (do_stat, get_istat): Remove; most of the contents went to these new functions. (make_ofname): Don't use WARN, as it affects exit status. (get_method): When the original file name was truncated, restore from its base name, not from its full name. (do_list): Avoid undefined behavior with out-of-range time stamps. ctime, for example, cannot be invoked on arbitrary time stamps safely, since it might overrun an internal buffer. Do not assume that localtime succeeds. (copy_stat): Do not remove input file; that's now the caller's responsibility. This avoids a problem if there is a write error when the caller closes the output file. (treat_dir): New arg FD, to avoid a race condition. All uses changed. (remove_output_file): New function. (abort_gzip): Use it. (abort_gzip_signal): New function, which is async-signal-safe. Exit with the signal that we got. * gzip.h (program_name, time_stamp, abort_gzip): Adjust decls to match gzip.c changes. * inflate.c (huft_build): Return 2 if null input. * tailor.h (HAVE_UTIME): Do not define; gnulib does this now. (OPEN): Use open_safer, not plain open. * unlzh.c (NPT): Set to 1<<TBIT, not to the maximum of NT and NP. (make_table): Report an error if 1<<tablebits < nextcode. (read_pt_len): Report an error if 16 < c. * unpack.c (read_tree): Report an error if the tree has too many leaves while reading it. Fix off-by-one error in final check. * util.c: Include <xalloc.h>, for xalloc_die decl. (gzip_base_name): Renamed from base_name, so we don't collide with gnulib. All uses changed. (add_envopt): Use xstrdup instead of xmalloc+strcpy. Use xcalloc rather than calloc + check. (gzip_error): Renamed from error, so we don't collide with gnulib. All uses changed. (xalloc_die): New function. (xmalloc): Remove; no longer needed. * zip.c (zip): Watch for time stamp overflow; the old code mishandled negative time stamps. * gzexe.in: Add support for --help, --version, --. Don't call basename or sed if we can avoid it. * zdiff.in: Likewise. * zforce.in: Likewise. * zgrep.in: Likewise. * zless.in: Likewise. * zmore.in: Likewise. * znew.in: Likewise. * zdiff.in: Protect against file names beginning with "-". * zmore.in: Likewise. * zgrep.in: Use printf rather than echo, to avoid problems with leading "-" and backslash. Return status of subsidiary grep. * zless.in: Add copyright notice. * zless.1: We now pass "--" to LESSOPEN. (BUGS): Mention that input file arguments are required. Add copyright notice. * COPYING: Update to current version. * Makefile.am (SUBDIRS): New macro. (AUTOMAKE_OPTIONS): Remove; now done in configure.ac. (M4DIR, ACINCLUDE_INPUTS): Remove. (EXTRA_DIST): Remove getopt.h. (gzip_SOURCES): Remove getopt.c, getopt1.c, yesno.c. (gzip_LDADD): Change from @LIBOBJS@ to lib/libgzip.a. (AM_MAKEINFOFLAGS, info_TEXINFOS, gzip_TEXINFOS, ASCPP, LN_S): (match.$(OBJEXT)): Move to subdirectory makefiles. (.in): Substitute @VERSION@, too. (check-local): New rule. (MOSTLYCLEANFILES): Add _match.S. * doc/gzip.texi: Renamed from gzip.texi. Change to GNU FDL without invariant sections or cover texts. Don't put version number or date into sample gzip -h output. * lib/match.c: Renamed from match.c. Add ia64 version written by Sverre Jarp (HP Labs). * INSTALL: Remove from CVS; now created automatically by the bootstrap script. * Makefile.in: Likewise. * aclocal.m4: Likewise. * config.h.in: Likewise. * configure: Likewise. * depcomp: Likewise. * fdl.texi: Likewise. * getopt.c: Likewise. * getopt.h: Likewise. * getopt1.c: Likewise. * gzip.doc: Likewise. * gzip.info: Likewise. * install-sh: Likewise. * mdate-sh: Likewise. * missing: Likewise. * mkinstalldirs: Likewise. * rpmatch.c: Likewise. * stamp-vti: Likewise. * texinfo.tex: Likewise. * version.texi: Likewise. * yesno.c: Likewise.
* gzip 1.3.5Paul Eggert1999-10-061-10/+15
|
* gzip 1.2.4Jean-loup Gailly1993-08-131-0/+199