Upgrade zlib to version 1.3.1
This commit is contained in:
parent
7e74b98d5b
commit
fb1b8c07ec
|
@ -1,6 +1,109 @@
|
||||||
|
|
||||||
ChangeLog file for zlib
|
ChangeLog file for zlib
|
||||||
|
|
||||||
|
Changes in 1.3.1 (22 Jan 2024)
|
||||||
|
- Reject overflows of zip header fields in minizip
|
||||||
|
- Fix bug in inflateSync() for data held in bit buffer
|
||||||
|
- Add LIT_MEM define to use more memory for a small deflate speedup
|
||||||
|
- Fix decision on the emission of Zip64 end records in minizip
|
||||||
|
- Add bounds checking to ERR_MSG() macro, used by zError()
|
||||||
|
- Neutralize zip file traversal attacks in miniunz
|
||||||
|
- Fix a bug in ZLIB_DEBUG compiles in check_match()
|
||||||
|
- Various portability and appearance improvements
|
||||||
|
|
||||||
|
Changes in 1.3 (18 Aug 2023)
|
||||||
|
- Remove K&R function definitions and zlib2ansi
|
||||||
|
- Fix bug in deflateBound() for level 0 and memLevel 9
|
||||||
|
- Fix bug when gzungetc() is used immediately after gzopen()
|
||||||
|
- Fix bug when using gzflush() with a very small buffer
|
||||||
|
- Fix crash when gzsetparams() attempted for transparent write
|
||||||
|
- Fix test/example.c to work with FORCE_STORED
|
||||||
|
- Rewrite of zran in examples (see zran.c version history)
|
||||||
|
- Fix minizip to allow it to open an empty zip file
|
||||||
|
- Fix reading disk number start on zip64 files in minizip
|
||||||
|
- Fix logic error in minizip argument processing
|
||||||
|
- Add minizip testing to Makefile
|
||||||
|
- Read multiple bytes instead of byte-by-byte in minizip unzip.c
|
||||||
|
- Add memory sanitizer to configure (--memory)
|
||||||
|
- Various portability improvements
|
||||||
|
- Various documentation improvements
|
||||||
|
- Various spelling and typo corrections
|
||||||
|
|
||||||
|
Changes in 1.2.13 (13 Oct 2022)
|
||||||
|
- Fix configure issue that discarded provided CC definition
|
||||||
|
- Correct incorrect inputs provided to the CRC functions
|
||||||
|
- Repair prototypes and exporting of new CRC functions
|
||||||
|
- Fix inflateBack to detect invalid input with distances too far
|
||||||
|
- Have infback() deliver all of the available output up to any error
|
||||||
|
- Fix a bug when getting a gzip header extra field with inflate()
|
||||||
|
- Fix bug in block type selection when Z_FIXED used
|
||||||
|
- Tighten deflateBound bounds
|
||||||
|
- Remove deleted assembler code references
|
||||||
|
- Various portability and appearance improvements
|
||||||
|
|
||||||
|
Changes in 1.2.12 (27 Mar 2022)
|
||||||
|
- Cygwin does not have _wopen(), so do not create gzopen_w() there
|
||||||
|
- Permit a deflateParams() parameter change as soon as possible
|
||||||
|
- Limit hash table inserts after switch from stored deflate
|
||||||
|
- Fix bug when window full in deflate_stored()
|
||||||
|
- Fix CLEAR_HASH macro to be usable as a single statement
|
||||||
|
- Avoid a conversion error in gzseek when off_t type too small
|
||||||
|
- Have Makefile return non-zero error code on test failure
|
||||||
|
- Avoid some conversion warnings in gzread.c and gzwrite.c
|
||||||
|
- Update use of errno for newer Windows CE versions
|
||||||
|
- Small speedup to inflate [psumbera]
|
||||||
|
- Return an error if the gzputs string length can't fit in an int
|
||||||
|
- Add address checking in clang to -w option of configure
|
||||||
|
- Don't compute check value for raw inflate if asked to validate
|
||||||
|
- Handle case where inflateSync used when header never processed
|
||||||
|
- Avoid the use of ptrdiff_t
|
||||||
|
- Avoid an undefined behavior of memcpy() in gzappend()
|
||||||
|
- Avoid undefined behaviors of memcpy() in gz*printf()
|
||||||
|
- Avoid an undefined behavior of memcpy() in _tr_stored_block()
|
||||||
|
- Make the names in functions declarations identical to definitions
|
||||||
|
- Remove old assembler code in which bugs have manifested
|
||||||
|
- Fix deflateEnd() to not report an error at start of raw deflate
|
||||||
|
- Add legal disclaimer to README
|
||||||
|
- Emphasize the need to continue decompressing gzip members
|
||||||
|
- Correct the initialization requirements for deflateInit2()
|
||||||
|
- Fix a bug that can crash deflate on some input when using Z_FIXED
|
||||||
|
- Assure that the number of bits for deflatePrime() is valid
|
||||||
|
- Use a structure to make globals in enough.c evident
|
||||||
|
- Use a macro for the printf format of big_t in enough.c
|
||||||
|
- Clean up code style in enough.c, update version
|
||||||
|
- Use inline function instead of macro for index in enough.c
|
||||||
|
- Clarify that prefix codes are counted in enough.c
|
||||||
|
- Show all the codes for the maximum tables size in enough.c
|
||||||
|
- Add gznorm.c example, which normalizes gzip files
|
||||||
|
- Fix the zran.c example to work on a multiple-member gzip file
|
||||||
|
- Add tables for crc32_combine(), to speed it up by a factor of 200
|
||||||
|
- Add crc32_combine_gen() and crc32_combine_op() for fast combines
|
||||||
|
- Speed up software CRC-32 computation by a factor of 1.5 to 3
|
||||||
|
- Use atomic test and set, if available, for dynamic CRC tables
|
||||||
|
- Don't bother computing check value after successful inflateSync()
|
||||||
|
- Correct comment in crc32.c
|
||||||
|
- Add use of the ARMv8 crc32 instructions when requested
|
||||||
|
- Use ARM crc32 instructions if the ARM architecture has them
|
||||||
|
- Explicitly note that the 32-bit check values are 32 bits
|
||||||
|
- Avoid adding empty gzip member after gzflush with Z_FINISH
|
||||||
|
- Fix memory leak on error in gzlog.c
|
||||||
|
- Fix error in comment on the polynomial representation of a byte
|
||||||
|
- Clarify gz* function interfaces, referring to parameter names
|
||||||
|
- Change macro name in inflate.c to avoid collision in VxWorks
|
||||||
|
- Correct typo in blast.c
|
||||||
|
- Improve portability of contrib/minizip
|
||||||
|
- Fix indentation in minizip's zip.c
|
||||||
|
- Replace black/white with allow/block. (theresa-m)
|
||||||
|
- minizip warning fix if MAXU32 already defined. (gvollant)
|
||||||
|
- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner)
|
||||||
|
- Clean up minizip to reduce warnings for testing
|
||||||
|
- Add fallthrough comments for gcc
|
||||||
|
- Eliminate use of ULL constants
|
||||||
|
- Separate out address sanitizing from warnings in configure
|
||||||
|
- Remove destructive aspects of make distclean
|
||||||
|
- Check for cc masquerading as gcc or clang in configure
|
||||||
|
- Fix crc32.c to compile local functions only if used
|
||||||
|
|
||||||
Changes in 1.2.11 (15 Jan 2017)
|
Changes in 1.2.11 (15 Jan 2017)
|
||||||
- Fix deflate stored bug when pulling last block from window
|
- Fix deflate stored bug when pulling last block from window
|
||||||
- Permit immediate deflateParams changes before any deflate input
|
- Permit immediate deflateParams changes before any deflate input
|
||||||
|
@ -96,7 +199,7 @@ Changes in 1.2.7.1 (24 Mar 2013)
|
||||||
- Fix types in contrib/minizip to match result of get_crc_table()
|
- Fix types in contrib/minizip to match result of get_crc_table()
|
||||||
- Simplify contrib/vstudio/vc10 with 'd' suffix
|
- Simplify contrib/vstudio/vc10 with 'd' suffix
|
||||||
- Add TOP support to win32/Makefile.msc
|
- Add TOP support to win32/Makefile.msc
|
||||||
- Suport i686 and amd64 assembler builds in CMakeLists.txt
|
- Support i686 and amd64 assembler builds in CMakeLists.txt
|
||||||
- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
|
- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
|
||||||
- Add vc11 and vc12 build files to contrib/vstudio
|
- Add vc11 and vc12 build files to contrib/vstudio
|
||||||
- Add gzvprintf() as an undocumented function in zlib
|
- Add gzvprintf() as an undocumented function in zlib
|
||||||
|
@ -296,14 +399,14 @@ Changes in 1.2.5.1 (10 Sep 2011)
|
||||||
- Use u4 type for crc_table to avoid conversion warnings
|
- Use u4 type for crc_table to avoid conversion warnings
|
||||||
- Apply casts in zlib.h to avoid conversion warnings
|
- Apply casts in zlib.h to avoid conversion warnings
|
||||||
- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
|
- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
|
||||||
- Improve inflateSync() documentation to note indeterminancy
|
- Improve inflateSync() documentation to note indeterminacy
|
||||||
- Add deflatePending() function to return the amount of pending output
|
- Add deflatePending() function to return the amount of pending output
|
||||||
- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
|
- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
|
||||||
- Add a check in configure for stdarg.h, use for gzprintf()
|
- Add a check in configure for stdarg.h, use for gzprintf()
|
||||||
- Check that pointers fit in ints when gzprint() compiled old style
|
- Check that pointers fit in ints when gzprint() compiled old style
|
||||||
- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
|
- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
|
||||||
- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
|
- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
|
||||||
- Add debug records in assmebler code [Londer]
|
- Add debug records in assembler code [Londer]
|
||||||
- Update RFC references to use http://tools.ietf.org/html/... [Li]
|
- Update RFC references to use http://tools.ietf.org/html/... [Li]
|
||||||
- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
|
- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
|
||||||
|
|
||||||
|
@ -511,7 +614,7 @@ Changes in 1.2.3.5 (8 Jan 2010)
|
||||||
- Don't use _vsnprintf on later versions of MSVC [Lowman]
|
- Don't use _vsnprintf on later versions of MSVC [Lowman]
|
||||||
- Add CMake build script and input file [Lowman]
|
- Add CMake build script and input file [Lowman]
|
||||||
- Update contrib/minizip to 1.1 [Svensson, Vollant]
|
- Update contrib/minizip to 1.1 [Svensson, Vollant]
|
||||||
- Moved nintendods directory from contrib to .
|
- Moved nintendods directory from contrib to root
|
||||||
- Replace gzio.c with a new set of routines with the same functionality
|
- Replace gzio.c with a new set of routines with the same functionality
|
||||||
- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
|
- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
|
||||||
- Update contrib/minizip to 1.1b
|
- Update contrib/minizip to 1.1b
|
||||||
|
@ -685,7 +788,7 @@ Changes in 1.2.2.4 (11 July 2005)
|
||||||
- Be more strict on incomplete code sets in inflate_table() and increase
|
- Be more strict on incomplete code sets in inflate_table() and increase
|
||||||
ENOUGH and MAXD -- this repairs a possible security vulnerability for
|
ENOUGH and MAXD -- this repairs a possible security vulnerability for
|
||||||
invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
|
invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
|
||||||
discovering the vulnerability and providing test cases.
|
discovering the vulnerability and providing test cases
|
||||||
- Add ia64 support to configure for HP-UX [Smith]
|
- Add ia64 support to configure for HP-UX [Smith]
|
||||||
- Add error return to gzread() for format or i/o error [Levin]
|
- Add error return to gzread() for format or i/o error [Levin]
|
||||||
- Use malloc.h for OS/2 [Necasek]
|
- Use malloc.h for OS/2 [Necasek]
|
||||||
|
@ -721,7 +824,7 @@ Changes in 1.2.2.2 (30 December 2004)
|
||||||
- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
|
- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
|
||||||
- Add updated make_vms.com [Coghlan], update README
|
- Add updated make_vms.com [Coghlan], update README
|
||||||
- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
|
- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
|
||||||
fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
|
fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html
|
||||||
- Add FAQ entry and comments in deflate.c on uninitialized memory access
|
- Add FAQ entry and comments in deflate.c on uninitialized memory access
|
||||||
- Add Solaris 9 make options in configure [Gilbert]
|
- Add Solaris 9 make options in configure [Gilbert]
|
||||||
- Allow strerror() usage in gzio.c for STDC
|
- Allow strerror() usage in gzio.c for STDC
|
||||||
|
@ -792,7 +895,7 @@ Changes in 1.2.1.1 (9 January 2004)
|
||||||
- Fix a big fat bug in inftrees.c that prevented decoding valid
|
- Fix a big fat bug in inftrees.c that prevented decoding valid
|
||||||
dynamic blocks with only literals and no distance codes --
|
dynamic blocks with only literals and no distance codes --
|
||||||
Thanks to "Hot Emu" for the bug report and sample file
|
Thanks to "Hot Emu" for the bug report and sample file
|
||||||
- Add a note to puff.c on no distance codes case.
|
- Add a note to puff.c on no distance codes case
|
||||||
|
|
||||||
Changes in 1.2.1 (17 November 2003)
|
Changes in 1.2.1 (17 November 2003)
|
||||||
- Remove a tab in contrib/gzappend/gzappend.c
|
- Remove a tab in contrib/gzappend/gzappend.c
|
||||||
|
@ -970,7 +1073,7 @@ Changes in 1.2.0.1 (17 March 2003)
|
||||||
- Include additional header file on VMS for off_t typedef
|
- Include additional header file on VMS for off_t typedef
|
||||||
- Try to use _vsnprintf where it supplants vsprintf [Vollant]
|
- Try to use _vsnprintf where it supplants vsprintf [Vollant]
|
||||||
- Add some casts in inffast.c
|
- Add some casts in inffast.c
|
||||||
- Enchance comments in zlib.h on what happens if gzprintf() tries to
|
- Enhance comments in zlib.h on what happens if gzprintf() tries to
|
||||||
write more than 4095 bytes before compression
|
write more than 4095 bytes before compression
|
||||||
- Remove unused state from inflateBackEnd()
|
- Remove unused state from inflateBackEnd()
|
||||||
- Remove exit(0) from minigzip.c, example.c
|
- Remove exit(0) from minigzip.c, example.c
|
||||||
|
@ -1036,14 +1139,14 @@ Changes in 1.2.0 (9 March 2003)
|
||||||
- Add contrib/puff/ simple inflate for deflate format description
|
- Add contrib/puff/ simple inflate for deflate format description
|
||||||
|
|
||||||
Changes in 1.1.4 (11 March 2002)
|
Changes in 1.1.4 (11 March 2002)
|
||||||
- ZFREE was repeated on same allocation on some error conditions.
|
- ZFREE was repeated on same allocation on some error conditions
|
||||||
This creates a security problem described in
|
This creates a security problem described in
|
||||||
http://www.zlib.org/advisory-2002-03-11.txt
|
http://www.zlib.org/advisory-2002-03-11.txt
|
||||||
- Returned incorrect error (Z_MEM_ERROR) on some invalid data
|
- Returned incorrect error (Z_MEM_ERROR) on some invalid data
|
||||||
- Avoid accesses before window for invalid distances with inflate window
|
- Avoid accesses before window for invalid distances with inflate window
|
||||||
less than 32K.
|
less than 32K
|
||||||
- force windowBits > 8 to avoid a bug in the encoder for a window size
|
- force windowBits > 8 to avoid a bug in the encoder for a window size
|
||||||
of 256 bytes. (A complete fix will be available in 1.1.5).
|
of 256 bytes. (A complete fix will be available in 1.1.5)
|
||||||
|
|
||||||
Changes in 1.1.3 (9 July 1998)
|
Changes in 1.1.3 (9 July 1998)
|
||||||
- fix "an inflate input buffer bug that shows up on rare but persistent
|
- fix "an inflate input buffer bug that shows up on rare but persistent
|
||||||
|
@ -1117,7 +1220,7 @@ Changes in 1.1.1 (27 Feb 98)
|
||||||
- remove block truncation heuristic which had very marginal effect for zlib
|
- remove block truncation heuristic which had very marginal effect for zlib
|
||||||
(smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
|
(smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
|
||||||
compression ratio on some files. This also allows inlining _tr_tally for
|
compression ratio on some files. This also allows inlining _tr_tally for
|
||||||
matches in deflate_slow.
|
matches in deflate_slow
|
||||||
- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
|
- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
|
||||||
|
|
||||||
Changes in 1.1.0 (24 Feb 98)
|
Changes in 1.1.0 (24 Feb 98)
|
||||||
|
@ -1148,7 +1251,7 @@ Changes in 1.0.9 (17 Feb 1998)
|
||||||
- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8
|
- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8
|
||||||
- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)
|
- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)
|
||||||
- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with
|
- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with
|
||||||
the declaration of FAR (Gilles VOllant)
|
the declaration of FAR (Gilles Vollant)
|
||||||
- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)
|
- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)
|
||||||
- read_buf buf parameter of type Bytef* instead of charf*
|
- read_buf buf parameter of type Bytef* instead of charf*
|
||||||
- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)
|
- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)
|
||||||
|
@ -1162,7 +1265,7 @@ Changes in 1.0.8 (27 Jan 1998)
|
||||||
- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
|
- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
|
||||||
- use constant arrays for the static trees in trees.c instead of computing
|
- use constant arrays for the static trees in trees.c instead of computing
|
||||||
them at run time (thanks to Ken Raeburn for this suggestion). To create
|
them at run time (thanks to Ken Raeburn for this suggestion). To create
|
||||||
trees.h, compile with GEN_TREES_H and run "make test".
|
trees.h, compile with GEN_TREES_H and run "make test"
|
||||||
- check return code of example in "make test" and display result
|
- check return code of example in "make test" and display result
|
||||||
- pass minigzip command line options to file_compress
|
- pass minigzip command line options to file_compress
|
||||||
- simplifying code of inflateSync to avoid gcc 2.8 bug
|
- simplifying code of inflateSync to avoid gcc 2.8 bug
|
||||||
|
@ -1201,12 +1304,12 @@ Changes in 1.0.6 (19 Jan 1998)
|
||||||
- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
|
- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
|
||||||
gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
|
gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
|
||||||
- Fix a deflate bug occurring only with compression level 0 (thanks to
|
- Fix a deflate bug occurring only with compression level 0 (thanks to
|
||||||
Andy Buckler for finding this one).
|
Andy Buckler for finding this one)
|
||||||
- In minigzip, pass transparently also the first byte for .Z files.
|
- In minigzip, pass transparently also the first byte for .Z files
|
||||||
- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
|
- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
|
||||||
- check Z_FINISH in inflate (thanks to Marc Schluper)
|
- check Z_FINISH in inflate (thanks to Marc Schluper)
|
||||||
- Implement deflateCopy (thanks to Adam Costello)
|
- Implement deflateCopy (thanks to Adam Costello)
|
||||||
- make static libraries by default in configure, add --shared option.
|
- make static libraries by default in configure, add --shared option
|
||||||
- move MSDOS or Windows specific files to directory msdos
|
- move MSDOS or Windows specific files to directory msdos
|
||||||
- suppress the notion of partial flush to simplify the interface
|
- suppress the notion of partial flush to simplify the interface
|
||||||
(but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
|
(but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
|
||||||
|
@ -1218,7 +1321,7 @@ Changes in 1.0.6 (19 Jan 1998)
|
||||||
- added Makefile.nt (thanks to Stephen Williams)
|
- added Makefile.nt (thanks to Stephen Williams)
|
||||||
- added the unsupported "contrib" directory:
|
- added the unsupported "contrib" directory:
|
||||||
contrib/asm386/ by Gilles Vollant <info@winimage.com>
|
contrib/asm386/ by Gilles Vollant <info@winimage.com>
|
||||||
386 asm code replacing longest_match().
|
386 asm code replacing longest_match()
|
||||||
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
|
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
|
||||||
A C++ I/O streams interface to the zlib gz* functions
|
A C++ I/O streams interface to the zlib gz* functions
|
||||||
contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
|
contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
|
||||||
|
@ -1226,7 +1329,7 @@ Changes in 1.0.6 (19 Jan 1998)
|
||||||
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
|
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
|
||||||
A very simple tar.gz file extractor using zlib
|
A very simple tar.gz file extractor using zlib
|
||||||
contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
|
contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
|
||||||
How to use compress(), uncompress() and the gz* functions from VB.
|
How to use compress(), uncompress() and the gz* functions from VB
|
||||||
- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
|
- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
|
||||||
level) in minigzip (thanks to Tom Lane)
|
level) in minigzip (thanks to Tom Lane)
|
||||||
|
|
||||||
|
@ -1235,8 +1338,8 @@ Changes in 1.0.6 (19 Jan 1998)
|
||||||
- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
|
- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
|
||||||
- add undocumented function zError to convert error code to string
|
- add undocumented function zError to convert error code to string
|
||||||
(for Tim Smithers)
|
(for Tim Smithers)
|
||||||
- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
|
- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code
|
||||||
- Use default memcpy for Symantec MSDOS compiler.
|
- Use default memcpy for Symantec MSDOS compiler
|
||||||
- Add EXPORT keyword for check_func (needed for Windows DLL)
|
- Add EXPORT keyword for check_func (needed for Windows DLL)
|
||||||
- add current directory to LD_LIBRARY_PATH for "make test"
|
- add current directory to LD_LIBRARY_PATH for "make test"
|
||||||
- create also a link for libz.so.1
|
- create also a link for libz.so.1
|
||||||
|
@ -1249,7 +1352,7 @@ Changes in 1.0.6 (19 Jan 1998)
|
||||||
- allow compilation with ANSI keywords only enabled for TurboC in large model
|
- allow compilation with ANSI keywords only enabled for TurboC in large model
|
||||||
- avoid "versionString"[0] (Borland bug)
|
- avoid "versionString"[0] (Borland bug)
|
||||||
- add NEED_DUMMY_RETURN for Borland
|
- add NEED_DUMMY_RETURN for Borland
|
||||||
- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
|
- use variable z_verbose for tracing in debug mode (L. Peter Deutsch)
|
||||||
- allow compilation with CC
|
- allow compilation with CC
|
||||||
- defined STDC for OS/2 (David Charlap)
|
- defined STDC for OS/2 (David Charlap)
|
||||||
- limit external names to 8 chars for MVS (Thomas Lund)
|
- limit external names to 8 chars for MVS (Thomas Lund)
|
||||||
|
@ -1259,7 +1362,7 @@ Changes in 1.0.6 (19 Jan 1998)
|
||||||
- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
|
- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
|
||||||
- added makelcc.bat for lcc-win32 (Tom St Denis)
|
- added makelcc.bat for lcc-win32 (Tom St Denis)
|
||||||
- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
|
- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
|
||||||
- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
|
- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion
|
||||||
- check for unistd.h in configure (for off_t)
|
- check for unistd.h in configure (for off_t)
|
||||||
- remove useless check parameter in inflate_blocks_free
|
- remove useless check parameter in inflate_blocks_free
|
||||||
- avoid useless assignment of s->check to itself in inflate_blocks_new
|
- avoid useless assignment of s->check to itself in inflate_blocks_new
|
||||||
|
@ -1280,7 +1383,7 @@ Changes in 1.0.5 (3 Jan 98)
|
||||||
Changes in 1.0.4 (24 Jul 96)
|
Changes in 1.0.4 (24 Jul 96)
|
||||||
- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
|
- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
|
||||||
bit, so the decompressor could decompress all the correct data but went
|
bit, so the decompressor could decompress all the correct data but went
|
||||||
on to attempt decompressing extra garbage data. This affected minigzip too.
|
on to attempt decompressing extra garbage data. This affected minigzip too
|
||||||
- zlibVersion and gzerror return const char* (needed for DLL)
|
- zlibVersion and gzerror return const char* (needed for DLL)
|
||||||
- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
|
- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
|
||||||
- use z_error only for DEBUG (avoid problem with DLLs)
|
- use z_error only for DEBUG (avoid problem with DLLs)
|
||||||
|
@ -1310,7 +1413,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
|
||||||
- fix array overlay in deflate.c which sometimes caused bad compressed data
|
- fix array overlay in deflate.c which sometimes caused bad compressed data
|
||||||
- fix inflate bug with empty stored block
|
- fix inflate bug with empty stored block
|
||||||
- fix MSDOS medium model which was broken in 0.99
|
- fix MSDOS medium model which was broken in 0.99
|
||||||
- fix deflateParams() which could generate bad compressed data.
|
- fix deflateParams() which could generate bad compressed data
|
||||||
- Bytef is define'd instead of typedef'ed (work around Borland bug)
|
- Bytef is define'd instead of typedef'ed (work around Borland bug)
|
||||||
- added an INDEX file
|
- added an INDEX file
|
||||||
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
|
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
|
||||||
|
@ -1331,7 +1434,7 @@ Changes in 0.99 (27 Jan 96)
|
||||||
- allow preset dictionary shared between compressor and decompressor
|
- allow preset dictionary shared between compressor and decompressor
|
||||||
- allow compression level 0 (no compression)
|
- allow compression level 0 (no compression)
|
||||||
- add deflateParams in zlib.h: allow dynamic change of compression level
|
- add deflateParams in zlib.h: allow dynamic change of compression level
|
||||||
and compression strategy.
|
and compression strategy
|
||||||
- test large buffers and deflateParams in example.c
|
- test large buffers and deflateParams in example.c
|
||||||
- add optional "configure" to build zlib as a shared library
|
- add optional "configure" to build zlib as a shared library
|
||||||
- suppress Makefile.qnx, use configure instead
|
- suppress Makefile.qnx, use configure instead
|
||||||
|
@ -1370,33 +1473,33 @@ Changes in 0.99 (27 Jan 96)
|
||||||
- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
|
- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
|
||||||
- in fcalloc, normalize pointer if size > 65520 bytes
|
- in fcalloc, normalize pointer if size > 65520 bytes
|
||||||
- don't use special fcalloc for 32 bit Borland C++
|
- don't use special fcalloc for 32 bit Borland C++
|
||||||
- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
|
- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc.
|
||||||
- use Z_BINARY instead of BINARY
|
- use Z_BINARY instead of BINARY
|
||||||
- document that gzclose after gzdopen will close the file
|
- document that gzclose after gzdopen will close the file
|
||||||
- allow "a" as mode in gzopen.
|
- allow "a" as mode in gzopen
|
||||||
- fix error checking in gzread
|
- fix error checking in gzread
|
||||||
- allow skipping .gz extra-field on pipes
|
- allow skipping .gz extra-field on pipes
|
||||||
- added reference to Perl interface in README
|
- added reference to Perl interface in README
|
||||||
- put the crc table in FAR data (I dislike more and more the medium model :)
|
- put the crc table in FAR data (I dislike more and more the medium model :)
|
||||||
- added get_crc_table
|
- added get_crc_table
|
||||||
- added a dimension to all arrays (Borland C can't count).
|
- added a dimension to all arrays (Borland C can't count)
|
||||||
- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
|
- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
|
||||||
- guard against multiple inclusion of *.h (for precompiled header on Mac)
|
- guard against multiple inclusion of *.h (for precompiled header on Mac)
|
||||||
- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
|
- Watcom C pretends to be Microsoft C small model even in 32 bit mode
|
||||||
- don't use unsized arrays to avoid silly warnings by Visual C++:
|
- don't use unsized arrays to avoid silly warnings by Visual C++:
|
||||||
warning C4746: 'inflate_mask' : unsized array treated as '__far'
|
warning C4746: 'inflate_mask' : unsized array treated as '__far'
|
||||||
(what's wrong with far data in far model?).
|
(what's wrong with far data in far model?)
|
||||||
- define enum out of inflate_blocks_state to allow compilation with C++
|
- define enum out of inflate_blocks_state to allow compilation with C++
|
||||||
|
|
||||||
Changes in 0.95 (16 Aug 95)
|
Changes in 0.95 (16 Aug 95)
|
||||||
- fix MSDOS small and medium model (now easier to adapt to any compiler)
|
- fix MSDOS small and medium model (now easier to adapt to any compiler)
|
||||||
- inlined send_bits
|
- inlined send_bits
|
||||||
- fix the final (:-) bug for deflate with flush (output was correct but
|
- fix the final (:-) bug for deflate with flush (output was correct but
|
||||||
not completely flushed in rare occasions).
|
not completely flushed in rare occasions)
|
||||||
- default window size is same for compression and decompression
|
- default window size is same for compression and decompression
|
||||||
(it's now sufficient to set MAX_WBITS in zconf.h).
|
(it's now sufficient to set MAX_WBITS in zconf.h)
|
||||||
- voidp -> voidpf and voidnp -> voidp (for consistency with other
|
- voidp -> voidpf and voidnp -> voidp (for consistency with other
|
||||||
typedefs and because voidnp was not near in large model).
|
typedefs and because voidnp was not near in large model)
|
||||||
|
|
||||||
Changes in 0.94 (13 Aug 95)
|
Changes in 0.94 (13 Aug 95)
|
||||||
- support MSDOS medium model
|
- support MSDOS medium model
|
||||||
|
@ -1405,12 +1508,12 @@ Changes in 0.94 (13 Aug 95)
|
||||||
- added support for VMS
|
- added support for VMS
|
||||||
- allow a compression level in gzopen()
|
- allow a compression level in gzopen()
|
||||||
- gzflush now calls fflush
|
- gzflush now calls fflush
|
||||||
- For deflate with flush, flush even if no more input is provided.
|
- For deflate with flush, flush even if no more input is provided
|
||||||
- rename libgz.a as libz.a
|
- rename libgz.a as libz.a
|
||||||
- avoid complex expression in infcodes.c triggering Turbo C bug
|
- avoid complex expression in infcodes.c triggering Turbo C bug
|
||||||
- work around a problem with gcc on Alpha (in INSERT_STRING)
|
- work around a problem with gcc on Alpha (in INSERT_STRING)
|
||||||
- don't use inline functions (problem with some gcc versions)
|
- don't use inline functions (problem with some gcc versions)
|
||||||
- allow renaming of Byte, uInt, etc... with #define.
|
- allow renaming of Byte, uInt, etc... with #define
|
||||||
- avoid warning about (unused) pointer before start of array in deflate.c
|
- avoid warning about (unused) pointer before start of array in deflate.c
|
||||||
- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
|
- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
|
||||||
- avoid reserved word 'new' in trees.c
|
- avoid reserved word 'new' in trees.c
|
||||||
|
@ -1429,7 +1532,7 @@ Changes in 0.92 (3 May 95)
|
||||||
- no memcpy on Pyramid
|
- no memcpy on Pyramid
|
||||||
- suppressed inftest.c
|
- suppressed inftest.c
|
||||||
- optimized fill_window, put longest_match inline for gcc
|
- optimized fill_window, put longest_match inline for gcc
|
||||||
- optimized inflate on stored blocks.
|
- optimized inflate on stored blocks
|
||||||
- untabify all sources to simplify patches
|
- untabify all sources to simplify patches
|
||||||
|
|
||||||
Changes in 0.91 (2 May 95)
|
Changes in 0.91 (2 May 95)
|
||||||
|
@ -1447,7 +1550,7 @@ Changes in 0.9 (1 May 95)
|
||||||
- let again gzread copy uncompressed data unchanged (was working in 0.71)
|
- let again gzread copy uncompressed data unchanged (was working in 0.71)
|
||||||
- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
|
- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
|
||||||
- added a test of inflateSync in example.c
|
- added a test of inflateSync in example.c
|
||||||
- moved MAX_WBITS to zconf.h because users might want to change that.
|
- moved MAX_WBITS to zconf.h because users might want to change that
|
||||||
- document explicitly that zalloc(64K) on MSDOS must return a normalized
|
- document explicitly that zalloc(64K) on MSDOS must return a normalized
|
||||||
pointer (zero offset)
|
pointer (zero offset)
|
||||||
- added Makefiles for Microsoft C, Turbo C, Borland C++
|
- added Makefiles for Microsoft C, Turbo C, Borland C++
|
||||||
|
@ -1456,7 +1559,7 @@ Changes in 0.9 (1 May 95)
|
||||||
Changes in 0.8 (29 April 95)
|
Changes in 0.8 (29 April 95)
|
||||||
- added fast inflate (inffast.c)
|
- added fast inflate (inffast.c)
|
||||||
- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
|
- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
|
||||||
is incompatible with previous versions of zlib which returned Z_OK.
|
is incompatible with previous versions of zlib which returned Z_OK
|
||||||
- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
|
- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
|
||||||
(actually that was not a compiler bug, see 0.81 above)
|
(actually that was not a compiler bug, see 0.81 above)
|
||||||
- gzread no longer reads one extra byte in certain cases
|
- gzread no longer reads one extra byte in certain cases
|
||||||
|
@ -1466,50 +1569,50 @@ Changes in 0.8 (29 April 95)
|
||||||
|
|
||||||
Changes in 0.71 (14 April 95)
|
Changes in 0.71 (14 April 95)
|
||||||
- Fixed more MSDOS compilation problems :( There is still a bug with
|
- Fixed more MSDOS compilation problems :( There is still a bug with
|
||||||
TurboC large model.
|
TurboC large model
|
||||||
|
|
||||||
Changes in 0.7 (14 April 95)
|
Changes in 0.7 (14 April 95)
|
||||||
- Added full inflate support.
|
- Added full inflate support
|
||||||
- Simplified the crc32() interface. The pre- and post-conditioning
|
- Simplified the crc32() interface. The pre- and post-conditioning
|
||||||
(one's complement) is now done inside crc32(). WARNING: this is
|
(one's complement) is now done inside crc32(). WARNING: this is
|
||||||
incompatible with previous versions; see zlib.h for the new usage.
|
incompatible with previous versions; see zlib.h for the new usage
|
||||||
|
|
||||||
Changes in 0.61 (12 April 95)
|
Changes in 0.61 (12 April 95)
|
||||||
- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
|
- workaround for a bug in TurboC. example and minigzip now work on MSDOS
|
||||||
|
|
||||||
Changes in 0.6 (11 April 95)
|
Changes in 0.6 (11 April 95)
|
||||||
- added minigzip.c
|
- added minigzip.c
|
||||||
- added gzdopen to reopen a file descriptor as gzFile
|
- added gzdopen to reopen a file descriptor as gzFile
|
||||||
- added transparent reading of non-gziped files in gzread.
|
- added transparent reading of non-gziped files in gzread
|
||||||
- fixed bug in gzread (don't read crc as data)
|
- fixed bug in gzread (don't read crc as data)
|
||||||
- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
|
- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose)
|
||||||
- don't allocate big arrays in the stack (for MSDOS)
|
- don't allocate big arrays in the stack (for MSDOS)
|
||||||
- fix some MSDOS compilation problems
|
- fix some MSDOS compilation problems
|
||||||
|
|
||||||
Changes in 0.5:
|
Changes in 0.5:
|
||||||
- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
|
- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
|
||||||
not yet Z_FULL_FLUSH.
|
not yet Z_FULL_FLUSH
|
||||||
- support decompression but only in a single step (forced Z_FINISH)
|
- support decompression but only in a single step (forced Z_FINISH)
|
||||||
- added opaque object for zalloc and zfree.
|
- added opaque object for zalloc and zfree
|
||||||
- added deflateReset and inflateReset
|
- added deflateReset and inflateReset
|
||||||
- added a variable zlib_version for consistency checking.
|
- added a variable zlib_version for consistency checking
|
||||||
- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
|
- renamed the 'filter' parameter of deflateInit2 as 'strategy'
|
||||||
Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
|
Added Z_FILTERED and Z_HUFFMAN_ONLY constants
|
||||||
|
|
||||||
Changes in 0.4:
|
Changes in 0.4:
|
||||||
- avoid "zip" everywhere, use zlib instead of ziplib.
|
- avoid "zip" everywhere, use zlib instead of ziplib
|
||||||
- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
|
- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
|
||||||
if compression method == 8.
|
if compression method == 8
|
||||||
- added adler32 and crc32
|
- added adler32 and crc32
|
||||||
- renamed deflateOptions as deflateInit2, call one or the other but not both
|
- renamed deflateOptions as deflateInit2, call one or the other but not both
|
||||||
- added the method parameter for deflateInit2.
|
- added the method parameter for deflateInit2
|
||||||
- added inflateInit2
|
- added inflateInit2
|
||||||
- simplied considerably deflateInit and inflateInit by not supporting
|
- simplified considerably deflateInit and inflateInit by not supporting
|
||||||
user-provided history buffer. This is supported only in deflateInit2
|
user-provided history buffer. This is supported only in deflateInit2
|
||||||
and inflateInit2.
|
and inflateInit2
|
||||||
|
|
||||||
Changes in 0.3:
|
Changes in 0.3:
|
||||||
- prefix all macro names with Z_
|
- prefix all macro names with Z_
|
||||||
- use Z_FINISH instead of deflateEnd to finish compression.
|
- use Z_FINISH instead of deflateEnd to finish compression
|
||||||
- added Z_HUFFMAN_ONLY
|
- added Z_HUFFMAN_ONLY
|
||||||
- added gzerror()
|
- added gzerror()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
ZLIB DATA COMPRESSION LIBRARY
|
ZLIB DATA COMPRESSION LIBRARY
|
||||||
|
|
||||||
zlib 1.2.11 is a general purpose data compression library. All the code is
|
zlib 1.3.1 is a general purpose data compression library. All the code is
|
||||||
thread safe. The data format used by the zlib library is described by RFCs
|
thread safe. The data format used by the zlib library is described by RFCs
|
||||||
(Request for Comments) 1950 to 1952 in the files
|
(Request for Comments) 1950 to 1952 in the files
|
||||||
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
|
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
|
||||||
|
@ -29,18 +29,17 @@ PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
|
||||||
|
|
||||||
Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
|
Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
|
||||||
issue of Dr. Dobb's Journal; a copy of the article is available at
|
issue of Dr. Dobb's Journal; a copy of the article is available at
|
||||||
http://marknelson.us/1997/01/01/zlib-engine/ .
|
https://marknelson.us/posts/1997/01/01/zlib-engine.html .
|
||||||
|
|
||||||
The changes made in version 1.2.11 are documented in the file ChangeLog.
|
The changes made in version 1.3.1 are documented in the file ChangeLog.
|
||||||
|
|
||||||
Unsupported third party contributions are provided in directory contrib/ .
|
Unsupported third party contributions are provided in directory contrib/ .
|
||||||
|
|
||||||
zlib is available in Java using the java.util.zip package, documented at
|
zlib is available in Java using the java.util.zip package. Follow the API
|
||||||
http://java.sun.com/developer/technicalArticles/Programming/compression/ .
|
Documentation link at: https://docs.oracle.com/search/?q=java.util.zip .
|
||||||
|
|
||||||
A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
|
A Perl interface to zlib and bzip2 written by Paul Marquess <pmqs@cpan.org>
|
||||||
at CPAN (Comprehensive Perl Archive Network) sites, including
|
can be found at https://github.com/pmqs/IO-Compress .
|
||||||
http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
|
|
||||||
|
|
||||||
A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
|
A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
|
||||||
available in Python 1.5 and later versions, see
|
available in Python 1.5 and later versions, see
|
||||||
|
@ -64,7 +63,7 @@ Notes for some targets:
|
||||||
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
|
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
|
||||||
when compiled with cc.
|
when compiled with cc.
|
||||||
|
|
||||||
- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
|
- On Digital Unix 4.0D (formerly OSF/1) on AlphaServer, the cc option -std1 is
|
||||||
necessary to get gzprintf working correctly. This is done by configure.
|
necessary to get gzprintf working correctly. This is done by configure.
|
||||||
|
|
||||||
- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
|
- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
|
||||||
|
@ -84,7 +83,7 @@ Acknowledgments:
|
||||||
|
|
||||||
Copyright notice:
|
Copyright notice:
|
||||||
|
|
||||||
(C) 1995-2017 Jean-loup Gailly and Mark Adler
|
(C) 1995-2024 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -108,7 +107,10 @@ Copyright notice:
|
||||||
If you use the zlib library in a product, we would appreciate *not* receiving
|
If you use the zlib library in a product, we would appreciate *not* receiving
|
||||||
lengthy legal documents to sign. The sources are provided for free but without
|
lengthy legal documents to sign. The sources are provided for free but without
|
||||||
warranty of any kind. The library has been entirely written by Jean-loup
|
warranty of any kind. The library has been entirely written by Jean-loup
|
||||||
Gailly and Mark Adler; it does not include third-party code.
|
Gailly and Mark Adler; it does not include third-party code. We make all
|
||||||
|
contributions to and distributions of this project solely in our personal
|
||||||
|
capacity, and are not conveying any rights to any intellectual property of
|
||||||
|
any third parties.
|
||||||
|
|
||||||
If you redistribute modified sources, we would appreciate that you include in
|
If you redistribute modified sources, we would appreciate that you include in
|
||||||
the file ChangeLog history information documenting your changes. Please read
|
the file ChangeLog history information documenting your changes. Please read
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
|
|
||||||
#include "zutil.h"
|
#include "zutil.h"
|
||||||
|
|
||||||
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
|
|
||||||
|
|
||||||
#define BASE 65521U /* largest prime smaller than 65536 */
|
#define BASE 65521U /* largest prime smaller than 65536 */
|
||||||
#define NMAX 5552
|
#define NMAX 5552
|
||||||
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
|
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
|
||||||
|
@ -60,11 +58,7 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
uLong ZEXPORT adler32_z(adler, buf, len)
|
uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len) {
|
||||||
uLong adler;
|
|
||||||
const Bytef *buf;
|
|
||||||
z_size_t len;
|
|
||||||
{
|
|
||||||
unsigned long sum2;
|
unsigned long sum2;
|
||||||
unsigned n;
|
unsigned n;
|
||||||
|
|
||||||
|
@ -131,20 +125,12 @@ uLong ZEXPORT adler32_z(adler, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
uLong ZEXPORT adler32(adler, buf, len)
|
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) {
|
||||||
uLong adler;
|
|
||||||
const Bytef *buf;
|
|
||||||
uInt len;
|
|
||||||
{
|
|
||||||
return adler32_z(adler, buf, len);
|
return adler32_z(adler, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
local uLong adler32_combine_(adler1, adler2, len2)
|
local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2) {
|
||||||
uLong adler1;
|
|
||||||
uLong adler2;
|
|
||||||
z_off64_t len2;
|
|
||||||
{
|
|
||||||
unsigned long sum1;
|
unsigned long sum1;
|
||||||
unsigned long sum2;
|
unsigned long sum2;
|
||||||
unsigned rem;
|
unsigned rem;
|
||||||
|
@ -169,18 +155,10 @@ local uLong adler32_combine_(adler1, adler2, len2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
uLong ZEXPORT adler32_combine(adler1, adler2, len2)
|
uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2) {
|
||||||
uLong adler1;
|
|
||||||
uLong adler2;
|
|
||||||
z_off_t len2;
|
|
||||||
{
|
|
||||||
return adler32_combine_(adler1, adler2, len2);
|
return adler32_combine_(adler1, adler2, len2);
|
||||||
}
|
}
|
||||||
|
|
||||||
uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
|
uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2) {
|
||||||
uLong adler1;
|
|
||||||
uLong adler2;
|
|
||||||
z_off64_t len2;
|
|
||||||
{
|
|
||||||
return adler32_combine_(adler1, adler2, len2);
|
return adler32_combine_(adler1, adler2, len2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,8 @@
|
||||||
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
|
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
|
||||||
Z_STREAM_ERROR if the level parameter is invalid.
|
Z_STREAM_ERROR if the level parameter is invalid.
|
||||||
*/
|
*/
|
||||||
int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
|
int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source,
|
||||||
Bytef *dest;
|
uLong sourceLen, int level) {
|
||||||
uLongf *destLen;
|
|
||||||
const Bytef *source;
|
|
||||||
uLong sourceLen;
|
|
||||||
int level;
|
|
||||||
{
|
|
||||||
z_stream stream;
|
z_stream stream;
|
||||||
int err;
|
int err;
|
||||||
const uInt max = (uInt)-1;
|
const uInt max = (uInt)-1;
|
||||||
|
@ -65,12 +60,8 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
*/
|
*/
|
||||||
int ZEXPORT compress (dest, destLen, source, sourceLen)
|
int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source,
|
||||||
Bytef *dest;
|
uLong sourceLen) {
|
||||||
uLongf *destLen;
|
|
||||||
const Bytef *source;
|
|
||||||
uLong sourceLen;
|
|
||||||
{
|
|
||||||
return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
|
return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,9 +69,7 @@ int ZEXPORT compress (dest, destLen, source, sourceLen)
|
||||||
If the default memLevel or windowBits for deflateInit() is changed, then
|
If the default memLevel or windowBits for deflateInit() is changed, then
|
||||||
this function needs to be updated.
|
this function needs to be updated.
|
||||||
*/
|
*/
|
||||||
uLong ZEXPORT compressBound (sourceLen)
|
uLong ZEXPORT compressBound(uLong sourceLen) {
|
||||||
uLong sourceLen;
|
|
||||||
{
|
|
||||||
return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
|
return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
|
||||||
(sourceLen >> 25) + 13;
|
(sourceLen >> 25) + 13;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,12 +32,12 @@
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Return the next byte in the pseudo-random sequence
|
* Return the next byte in the pseudo-random sequence
|
||||||
*/
|
*/
|
||||||
static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
|
static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab) {
|
||||||
{
|
|
||||||
unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
|
unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
|
||||||
* unpredictable manner on 16-bit systems; not a problem
|
* unpredictable manner on 16-bit systems; not a problem
|
||||||
* with any known compiler so far, though */
|
* with any known compiler so far, though */
|
||||||
|
|
||||||
|
(void)pcrc_32_tab;
|
||||||
temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
|
temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
|
||||||
return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
|
return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
|
||||||
}
|
}
|
||||||
|
@ -45,8 +45,7 @@ static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Update the encryption keys with the next byte of plain text
|
* Update the encryption keys with the next byte of plain text
|
||||||
*/
|
*/
|
||||||
static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c)
|
static int update_keys(unsigned long* pkeys, const z_crc_t* pcrc_32_tab, int c) {
|
||||||
{
|
|
||||||
(*(pkeys+0)) = CRC32((*(pkeys+0)), c);
|
(*(pkeys+0)) = CRC32((*(pkeys+0)), c);
|
||||||
(*(pkeys+1)) += (*(pkeys+0)) & 0xff;
|
(*(pkeys+1)) += (*(pkeys+0)) & 0xff;
|
||||||
(*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
|
(*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
|
||||||
|
@ -62,8 +61,7 @@ static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c)
|
||||||
* Initialize the encryption keys and the random header according to
|
* Initialize the encryption keys and the random header according to
|
||||||
* the given password.
|
* the given password.
|
||||||
*/
|
*/
|
||||||
static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab)
|
static void init_keys(const char* passwd, unsigned long* pkeys, const z_crc_t* pcrc_32_tab) {
|
||||||
{
|
|
||||||
*(pkeys+0) = 305419896L;
|
*(pkeys+0) = 305419896L;
|
||||||
*(pkeys+1) = 591751049L;
|
*(pkeys+1) = 591751049L;
|
||||||
*(pkeys+2) = 878082192L;
|
*(pkeys+2) = 878082192L;
|
||||||
|
@ -77,7 +75,7 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcr
|
||||||
(update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
|
(update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
|
||||||
|
|
||||||
#define zencode(pkeys,pcrc_32_tab,c,t) \
|
#define zencode(pkeys,pcrc_32_tab,c,t) \
|
||||||
(t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
|
(t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c))
|
||||||
|
|
||||||
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
|
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
|
||||||
|
|
||||||
|
@ -87,14 +85,13 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcr
|
||||||
# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
|
# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
static int crypthead(const char* passwd, /* password string */
|
static unsigned crypthead(const char* passwd, /* password string */
|
||||||
unsigned char* buf, /* where to write header */
|
unsigned char* buf, /* where to write header */
|
||||||
int bufSize,
|
int bufSize,
|
||||||
unsigned long* pkeys,
|
unsigned long* pkeys,
|
||||||
const z_crc_t* pcrc_32_tab,
|
const z_crc_t* pcrc_32_tab,
|
||||||
unsigned long crcForCrypting)
|
unsigned long crcForCrypting) {
|
||||||
{
|
unsigned n; /* index in random header */
|
||||||
int n; /* index in random header */
|
|
||||||
int t; /* temporary */
|
int t; /* temporary */
|
||||||
int c; /* random byte */
|
int c; /* random byte */
|
||||||
unsigned char header[RAND_HEAD_LEN-2]; /* random header */
|
unsigned char header[RAND_HEAD_LEN-2]; /* random header */
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__APPLE__) || defined(IOAPI_NO_64)
|
#if defined(__APPLE__) || defined(IOAPI_NO_64) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64)
|
||||||
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
|
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
|
||||||
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
|
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
|
||||||
#define FTELLO_FUNC(stream) ftello(stream)
|
#define FTELLO_FUNC(stream) ftello(stream)
|
||||||
|
@ -28,8 +28,7 @@
|
||||||
|
|
||||||
#include "ioapi.h"
|
#include "ioapi.h"
|
||||||
|
|
||||||
voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
|
voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc, const void*filename, int mode) {
|
||||||
{
|
|
||||||
if (pfilefunc->zfile_func64.zopen64_file != NULL)
|
if (pfilefunc->zfile_func64.zopen64_file != NULL)
|
||||||
return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
|
return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
|
||||||
else
|
else
|
||||||
|
@ -38,8 +37,7 @@ voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
|
long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) {
|
||||||
{
|
|
||||||
if (pfilefunc->zfile_func64.zseek64_file != NULL)
|
if (pfilefunc->zfile_func64.zseek64_file != NULL)
|
||||||
return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
|
return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
|
||||||
else
|
else
|
||||||
|
@ -52,13 +50,12 @@ long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
|
ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc, voidpf filestream) {
|
||||||
{
|
|
||||||
if (pfilefunc->zfile_func64.zseek64_file != NULL)
|
if (pfilefunc->zfile_func64.zseek64_file != NULL)
|
||||||
return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
|
return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
|
uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
|
||||||
if ((tell_uLong) == MAXU32)
|
if ((tell_uLong) == MAXU32)
|
||||||
return (ZPOS64_T)-1;
|
return (ZPOS64_T)-1;
|
||||||
else
|
else
|
||||||
|
@ -66,11 +63,9 @@ ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
|
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32, const zlib_filefunc_def* p_filefunc32) {
|
||||||
{
|
|
||||||
p_filefunc64_32->zfile_func64.zopen64_file = NULL;
|
p_filefunc64_32->zfile_func64.zopen64_file = NULL;
|
||||||
p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
|
p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
|
||||||
p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
|
|
||||||
p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
|
p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
|
||||||
p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
|
p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
|
||||||
p_filefunc64_32->zfile_func64.ztell64_file = NULL;
|
p_filefunc64_32->zfile_func64.ztell64_file = NULL;
|
||||||
|
@ -84,18 +79,10 @@ void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filef
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
|
static voidpf ZCALLBACK fopen_file_func(voidpf opaque, const char* filename, int mode) {
|
||||||
static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
|
|
||||||
static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
|
|
||||||
static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
|
|
||||||
static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
|
|
||||||
static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
|
|
||||||
static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
|
|
||||||
|
|
||||||
static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
|
|
||||||
{
|
|
||||||
FILE* file = NULL;
|
FILE* file = NULL;
|
||||||
const char* mode_fopen = NULL;
|
const char* mode_fopen = NULL;
|
||||||
|
(void)opaque;
|
||||||
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
||||||
mode_fopen = "rb";
|
mode_fopen = "rb";
|
||||||
else
|
else
|
||||||
|
@ -110,10 +97,10 @@ static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, in
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
|
static voidpf ZCALLBACK fopen64_file_func(voidpf opaque, const void* filename, int mode) {
|
||||||
{
|
|
||||||
FILE* file = NULL;
|
FILE* file = NULL;
|
||||||
const char* mode_fopen = NULL;
|
const char* mode_fopen = NULL;
|
||||||
|
(void)opaque;
|
||||||
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
||||||
mode_fopen = "rb";
|
mode_fopen = "rb";
|
||||||
else
|
else
|
||||||
|
@ -129,39 +116,39 @@ static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
|
static uLong ZCALLBACK fread_file_func(voidpf opaque, voidpf stream, void* buf, uLong size) {
|
||||||
{
|
|
||||||
uLong ret;
|
uLong ret;
|
||||||
|
(void)opaque;
|
||||||
ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
|
ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
|
static uLong ZCALLBACK fwrite_file_func(voidpf opaque, voidpf stream, const void* buf, uLong size) {
|
||||||
{
|
|
||||||
uLong ret;
|
uLong ret;
|
||||||
|
(void)opaque;
|
||||||
ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
|
ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
|
static long ZCALLBACK ftell_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
long ret;
|
long ret;
|
||||||
|
(void)opaque;
|
||||||
ret = ftell((FILE *)stream);
|
ret = ftell((FILE *)stream);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
|
static ZPOS64_T ZCALLBACK ftell64_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
ZPOS64_T ret;
|
ZPOS64_T ret;
|
||||||
ret = FTELLO_FUNC((FILE *)stream);
|
(void)opaque;
|
||||||
|
ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
|
static long ZCALLBACK fseek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin) {
|
||||||
{
|
|
||||||
int fseek_origin=0;
|
int fseek_origin=0;
|
||||||
long ret;
|
long ret;
|
||||||
|
(void)opaque;
|
||||||
switch (origin)
|
switch (origin)
|
||||||
{
|
{
|
||||||
case ZLIB_FILEFUNC_SEEK_CUR :
|
case ZLIB_FILEFUNC_SEEK_CUR :
|
||||||
|
@ -176,15 +163,15 @@ static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offs
|
||||||
default: return -1;
|
default: return -1;
|
||||||
}
|
}
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if (fseek((FILE *)stream, offset, fseek_origin) != 0)
|
if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
|
static long ZCALLBACK fseek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) {
|
||||||
{
|
|
||||||
int fseek_origin=0;
|
int fseek_origin=0;
|
||||||
long ret;
|
long ret;
|
||||||
|
(void)opaque;
|
||||||
switch (origin)
|
switch (origin)
|
||||||
{
|
{
|
||||||
case ZLIB_FILEFUNC_SEEK_CUR :
|
case ZLIB_FILEFUNC_SEEK_CUR :
|
||||||
|
@ -200,30 +187,28 @@ static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T
|
||||||
}
|
}
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
|
if(FSEEKO_FUNC((FILE *)stream, (z_off64_t)offset, fseek_origin) != 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
|
static int ZCALLBACK fclose_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
int ret;
|
int ret;
|
||||||
|
(void)opaque;
|
||||||
ret = fclose((FILE *)stream);
|
ret = fclose((FILE *)stream);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
|
static int ZCALLBACK ferror_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
int ret;
|
int ret;
|
||||||
|
(void)opaque;
|
||||||
ret = ferror((FILE *)stream);
|
ret = ferror((FILE *)stream);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_fopen_filefunc (pzlib_filefunc_def)
|
void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def) {
|
||||||
zlib_filefunc_def* pzlib_filefunc_def;
|
|
||||||
{
|
|
||||||
pzlib_filefunc_def->zopen_file = fopen_file_func;
|
pzlib_filefunc_def->zopen_file = fopen_file_func;
|
||||||
pzlib_filefunc_def->zread_file = fread_file_func;
|
pzlib_filefunc_def->zread_file = fread_file_func;
|
||||||
pzlib_filefunc_def->zwrite_file = fwrite_file_func;
|
pzlib_filefunc_def->zwrite_file = fwrite_file_func;
|
||||||
|
@ -234,8 +219,7 @@ void fill_fopen_filefunc (pzlib_filefunc_def)
|
||||||
pzlib_filefunc_def->opaque = NULL;
|
pzlib_filefunc_def->opaque = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def)
|
void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
pzlib_filefunc_def->zopen64_file = fopen64_file_func;
|
pzlib_filefunc_def->zopen64_file = fopen64_file_func;
|
||||||
pzlib_filefunc_def->zread_file = fread_file_func;
|
pzlib_filefunc_def->zread_file = fread_file_func;
|
||||||
pzlib_filefunc_def->zwrite_file = fwrite_file_func;
|
pzlib_filefunc_def->zwrite_file = fwrite_file_func;
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
#define ftello64 ftell
|
#define ftello64 ftell
|
||||||
#define fseeko64 fseek
|
#define fseeko64 fseek
|
||||||
#else
|
#else
|
||||||
#ifdef __FreeBSD__
|
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64)
|
||||||
#define fopen64 fopen
|
#define fopen64 fopen
|
||||||
#define ftello64 ftello
|
#define ftello64 ftello
|
||||||
#define fseeko64 fseeko
|
#define fseeko64 fseeko
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
#include "mz64conf.h"
|
#include "mz64conf.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* a type choosen by DEFINE */
|
/* a type chosen by DEFINE */
|
||||||
#ifdef HAVE_64BIT_INT_CUSTOM
|
#ifdef HAVE_64BIT_INT_CUSTOM
|
||||||
typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
|
typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
|
||||||
#else
|
#else
|
||||||
|
@ -91,8 +91,7 @@ typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
|
||||||
typedef uint64_t ZPOS64_T;
|
typedef uint64_t ZPOS64_T;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* Maximum unsigned 32-bit value used as placeholder for zip64 */
|
|
||||||
#define MAXU32 0xffffffff
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
#if defined(_MSC_VER) || defined(__BORLANDC__)
|
||||||
typedef unsigned __int64 ZPOS64_T;
|
typedef unsigned __int64 ZPOS64_T;
|
||||||
|
@ -102,7 +101,10 @@ typedef unsigned long long int ZPOS64_T;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Maximum unsigned 32-bit value used as placeholder for zip64 */
|
||||||
|
#ifndef MAXU32
|
||||||
|
#define MAXU32 (0xffffffff)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -132,17 +134,17 @@ extern "C" {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
|
typedef voidpf (ZCALLBACK *open_file_func) (voidpf opaque, const char* filename, int mode);
|
||||||
typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
|
typedef uLong (ZCALLBACK *read_file_func) (voidpf opaque, voidpf stream, void* buf, uLong size);
|
||||||
typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
|
typedef uLong (ZCALLBACK *write_file_func) (voidpf opaque, voidpf stream, const void* buf, uLong size);
|
||||||
typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
|
typedef int (ZCALLBACK *close_file_func) (voidpf opaque, voidpf stream);
|
||||||
typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
|
typedef int (ZCALLBACK *testerror_file_func) (voidpf opaque, voidpf stream);
|
||||||
|
|
||||||
typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
|
typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream);
|
||||||
typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
|
typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin);
|
||||||
|
|
||||||
|
|
||||||
/* here is the "old" 32 bits structure structure */
|
/* here is the "old" 32 bits structure */
|
||||||
typedef struct zlib_filefunc_def_s
|
typedef struct zlib_filefunc_def_s
|
||||||
{
|
{
|
||||||
open_file_func zopen_file;
|
open_file_func zopen_file;
|
||||||
|
@ -155,9 +157,9 @@ typedef struct zlib_filefunc_def_s
|
||||||
voidpf opaque;
|
voidpf opaque;
|
||||||
} zlib_filefunc_def;
|
} zlib_filefunc_def;
|
||||||
|
|
||||||
typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream));
|
typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (voidpf opaque, voidpf stream);
|
||||||
typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
|
typedef long (ZCALLBACK *seek64_file_func) (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin);
|
||||||
typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode));
|
typedef voidpf (ZCALLBACK *open64_file_func) (voidpf opaque, const void* filename, int mode);
|
||||||
|
|
||||||
typedef struct zlib_filefunc64_def_s
|
typedef struct zlib_filefunc64_def_s
|
||||||
{
|
{
|
||||||
|
@ -171,8 +173,8 @@ typedef struct zlib_filefunc64_def_s
|
||||||
voidpf opaque;
|
voidpf opaque;
|
||||||
} zlib_filefunc64_def;
|
} zlib_filefunc64_def;
|
||||||
|
|
||||||
void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
|
void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def);
|
||||||
void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
|
void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def);
|
||||||
|
|
||||||
/* now internal definition, only for zip.c and unzip.h */
|
/* now internal definition, only for zip.c and unzip.h */
|
||||||
typedef struct zlib_filefunc64_32_def_s
|
typedef struct zlib_filefunc64_32_def_s
|
||||||
|
@ -191,9 +193,9 @@ typedef struct zlib_filefunc64_32_def_s
|
||||||
#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream))
|
#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream))
|
||||||
#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream))
|
#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream))
|
||||||
|
|
||||||
voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
|
voidpf call_zopen64(const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode);
|
||||||
long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
|
long call_zseek64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin);
|
||||||
ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
|
ZPOS64_T call_ztell64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream);
|
||||||
|
|
||||||
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
|
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
|
||||||
|
|
||||||
|
|
|
@ -28,19 +28,16 @@
|
||||||
|
|
||||||
// see Include/shared/winapifamily.h in the Windows Kit
|
// see Include/shared/winapifamily.h in the Windows Kit
|
||||||
#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
|
#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
|
||||||
|
|
||||||
|
#if !defined(WINAPI_FAMILY_ONE_PARTITION)
|
||||||
|
#define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
|
#if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
|
||||||
#define IOWIN32_USING_WINRT_API 1
|
#define IOWIN32_USING_WINRT_API 1
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode));
|
|
||||||
uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
|
|
||||||
uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
|
|
||||||
ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream));
|
|
||||||
long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
|
|
||||||
int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
|
|
||||||
int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HANDLE hf;
|
HANDLE hf;
|
||||||
|
@ -52,8 +49,7 @@ static void win32_translate_open_mode(int mode,
|
||||||
DWORD* lpdwDesiredAccess,
|
DWORD* lpdwDesiredAccess,
|
||||||
DWORD* lpdwCreationDisposition,
|
DWORD* lpdwCreationDisposition,
|
||||||
DWORD* lpdwShareMode,
|
DWORD* lpdwShareMode,
|
||||||
DWORD* lpdwFlagsAndAttributes)
|
DWORD* lpdwFlagsAndAttributes) {
|
||||||
{
|
|
||||||
*lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
|
*lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
|
||||||
|
|
||||||
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
||||||
|
@ -74,8 +70,7 @@ static void win32_translate_open_mode(int mode,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static voidpf win32_build_iowin(HANDLE hFile)
|
static voidpf win32_build_iowin(HANDLE hFile) {
|
||||||
{
|
|
||||||
voidpf ret=NULL;
|
voidpf ret=NULL;
|
||||||
|
|
||||||
if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
|
if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
|
||||||
|
@ -93,8 +88,7 @@ static voidpf win32_build_iowin(HANDLE hFile)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
|
voidpf ZCALLBACK win32_open64_file_func(voidpf opaque, const void* filename, int mode) {
|
||||||
{
|
|
||||||
const char* mode_fopen = NULL;
|
const char* mode_fopen = NULL;
|
||||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
|
@ -122,8 +116,7 @@ voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
|
voidpf ZCALLBACK win32_open64_file_funcA(voidpf opaque, const void* filename, int mode) {
|
||||||
{
|
|
||||||
const char* mode_fopen = NULL;
|
const char* mode_fopen = NULL;
|
||||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
|
@ -146,8 +139,7 @@ voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
|
voidpf ZCALLBACK win32_open64_file_funcW(voidpf opaque, const void* filename, int mode) {
|
||||||
{
|
|
||||||
const char* mode_fopen = NULL;
|
const char* mode_fopen = NULL;
|
||||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
|
@ -166,8 +158,7 @@ voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
|
voidpf ZCALLBACK win32_open_file_func(voidpf opaque, const char* filename, int mode) {
|
||||||
{
|
|
||||||
const char* mode_fopen = NULL;
|
const char* mode_fopen = NULL;
|
||||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
|
@ -195,8 +186,7 @@ voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
|
uLong ZCALLBACK win32_read_file_func(voidpf opaque, voidpf stream, void* buf,uLong size) {
|
||||||
{
|
|
||||||
uLong ret=0;
|
uLong ret=0;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
if (stream!=NULL)
|
if (stream!=NULL)
|
||||||
|
@ -217,8 +207,7 @@ uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
|
uLong ZCALLBACK win32_write_file_func(voidpf opaque, voidpf stream, const void* buf, uLong size) {
|
||||||
{
|
|
||||||
uLong ret=0;
|
uLong ret=0;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
if (stream!=NULL)
|
if (stream!=NULL)
|
||||||
|
@ -238,8 +227,7 @@ uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* b
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod)
|
static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod) {
|
||||||
{
|
|
||||||
#ifdef IOWIN32_USING_WINRT_API
|
#ifdef IOWIN32_USING_WINRT_API
|
||||||
return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
|
return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
|
||||||
#else
|
#else
|
||||||
|
@ -258,8 +246,7 @@ static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *n
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
|
long ZCALLBACK win32_tell_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
long ret=-1;
|
long ret=-1;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
if (stream!=NULL)
|
if (stream!=NULL)
|
||||||
|
@ -281,8 +268,7 @@ long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
|
ZPOS64_T ZCALLBACK win32_tell64_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
ZPOS64_T ret= (ZPOS64_T)-1;
|
ZPOS64_T ret= (ZPOS64_T)-1;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
if (stream!=NULL)
|
if (stream!=NULL)
|
||||||
|
@ -306,8 +292,7 @@ ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
|
long ZCALLBACK win32_seek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin) {
|
||||||
{
|
|
||||||
DWORD dwMoveMethod=0xFFFFFFFF;
|
DWORD dwMoveMethod=0xFFFFFFFF;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
|
|
||||||
|
@ -344,8 +329,7 @@ long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,in
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
|
long ZCALLBACK win32_seek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) {
|
||||||
{
|
|
||||||
DWORD dwMoveMethod=0xFFFFFFFF;
|
DWORD dwMoveMethod=0xFFFFFFFF;
|
||||||
HANDLE hFile = NULL;
|
HANDLE hFile = NULL;
|
||||||
long ret=-1;
|
long ret=-1;
|
||||||
|
@ -383,8 +367,7 @@ long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T off
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
|
int ZCALLBACK win32_close_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
int ret=-1;
|
int ret=-1;
|
||||||
|
|
||||||
if (stream!=NULL)
|
if (stream!=NULL)
|
||||||
|
@ -401,8 +384,7 @@ int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
|
int ZCALLBACK win32_error_file_func(voidpf opaque, voidpf stream) {
|
||||||
{
|
|
||||||
int ret=-1;
|
int ret=-1;
|
||||||
if (stream!=NULL)
|
if (stream!=NULL)
|
||||||
{
|
{
|
||||||
|
@ -411,8 +393,7 @@ int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
|
void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
pzlib_filefunc_def->zopen_file = win32_open_file_func;
|
pzlib_filefunc_def->zopen_file = win32_open_file_func;
|
||||||
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
||||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
||||||
|
@ -423,8 +404,7 @@ void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
|
||||||
pzlib_filefunc_def->opaque = NULL;
|
pzlib_filefunc_def->opaque = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
|
void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
|
pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
|
||||||
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
||||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
||||||
|
@ -436,8 +416,7 @@ void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
|
void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
|
pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
|
||||||
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
||||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
||||||
|
@ -449,8 +428,7 @@ void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
|
void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
|
pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
|
||||||
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
pzlib_filefunc_def->zread_file = win32_read_file_func;
|
||||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
||||||
|
|
|
@ -18,10 +18,10 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
|
void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def);
|
||||||
void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));
|
void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def);
|
||||||
void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));
|
void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def);
|
||||||
void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));
|
void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if defined(__APPLE__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64)
|
||||||
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
|
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
|
||||||
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
|
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
|
||||||
#define FTELLO_FUNC(stream) ftello(stream)
|
#define FTELLO_FUNC(stream) ftello(stream)
|
||||||
|
@ -45,6 +45,7 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include <direct.h>
|
# include <direct.h>
|
||||||
|
@ -78,13 +79,9 @@
|
||||||
|
|
||||||
/* change_file_date : change the date/time of a file
|
/* change_file_date : change the date/time of a file
|
||||||
filename : the filename of the file where date/time must be modified
|
filename : the filename of the file where date/time must be modified
|
||||||
dosdate : the new date at the MSDos format (4 bytes)
|
dosdate : the new date at the MSDOS format (4 bytes)
|
||||||
tmu_date : the SAME new date at the tm_unz format */
|
tmu_date : the SAME new date at the tm_unz format */
|
||||||
void change_file_date(filename,dosdate,tmu_date)
|
static void change_file_date(const char *filename, uLong dosdate, tm_unz tmu_date) {
|
||||||
const char *filename;
|
|
||||||
uLong dosdate;
|
|
||||||
tm_unz tmu_date;
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;
|
FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;
|
||||||
|
@ -97,7 +94,8 @@ void change_file_date(filename,dosdate,tmu_date)
|
||||||
SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
|
SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
#else
|
#else
|
||||||
#ifdef unix || __APPLE__
|
#if defined(unix) || defined(__APPLE__)
|
||||||
|
(void)dosdate;
|
||||||
struct utimbuf ut;
|
struct utimbuf ut;
|
||||||
struct tm newdate;
|
struct tm newdate;
|
||||||
newdate.tm_sec = tmu_date.tm_sec;
|
newdate.tm_sec = tmu_date.tm_sec;
|
||||||
|
@ -113,6 +111,10 @@ void change_file_date(filename,dosdate,tmu_date)
|
||||||
|
|
||||||
ut.actime=ut.modtime=mktime(&newdate);
|
ut.actime=ut.modtime=mktime(&newdate);
|
||||||
utime(filename,&ut);
|
utime(filename,&ut);
|
||||||
|
#else
|
||||||
|
(void)filename;
|
||||||
|
(void)dosdate;
|
||||||
|
(void)tmu_date;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -121,9 +123,7 @@ void change_file_date(filename,dosdate,tmu_date)
|
||||||
/* mymkdir and change_file_date are not 100 % portable
|
/* mymkdir and change_file_date are not 100 % portable
|
||||||
As I don't know well Unix, I wait feedback for the unix portion */
|
As I don't know well Unix, I wait feedback for the unix portion */
|
||||||
|
|
||||||
int mymkdir(dirname)
|
static int mymkdir(const char* dirname) {
|
||||||
const char* dirname;
|
|
||||||
{
|
|
||||||
int ret=0;
|
int ret=0;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
ret = _mkdir(dirname);
|
ret = _mkdir(dirname);
|
||||||
|
@ -131,18 +131,18 @@ int mymkdir(dirname)
|
||||||
ret = mkdir (dirname,0775);
|
ret = mkdir (dirname,0775);
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
ret = mkdir (dirname,0775);
|
ret = mkdir (dirname,0775);
|
||||||
|
#else
|
||||||
|
(void)dirname;
|
||||||
#endif
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int makedir (newdir)
|
static int makedir(const char *newdir) {
|
||||||
char *newdir;
|
|
||||||
{
|
|
||||||
char *buffer ;
|
char *buffer ;
|
||||||
char *p;
|
char *p;
|
||||||
int len = (int)strlen(newdir);
|
size_t len = strlen(newdir);
|
||||||
|
|
||||||
if (len <= 0)
|
if (len == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
buffer = (char*)malloc(len+1);
|
buffer = (char*)malloc(len+1);
|
||||||
|
@ -185,14 +185,12 @@ int makedir (newdir)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_banner()
|
static void do_banner(void) {
|
||||||
{
|
printf("MiniUnz 1.1, demo of zLib + Unz package written by Gilles Vollant\n");
|
||||||
printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
|
|
||||||
printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
|
printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_help()
|
static void do_help(void) {
|
||||||
{
|
|
||||||
printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
|
printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
|
||||||
" -e Extract without pathname (junk paths)\n" \
|
" -e Extract without pathname (junk paths)\n" \
|
||||||
" -x Extract with pathname\n" \
|
" -x Extract with pathname\n" \
|
||||||
|
@ -200,11 +198,10 @@ void do_help()
|
||||||
" -l list files\n" \
|
" -l list files\n" \
|
||||||
" -d directory to extract into\n" \
|
" -d directory to extract into\n" \
|
||||||
" -o overwrite files without prompting\n" \
|
" -o overwrite files without prompting\n" \
|
||||||
" -p extract crypted file using password\n\n");
|
" -p extract encrypted file using password\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display64BitsSize(ZPOS64_T n, int size_char)
|
static void Display64BitsSize(ZPOS64_T n, int size_char) {
|
||||||
{
|
|
||||||
/* to avoid compatibility problem , we do here the conversion */
|
/* to avoid compatibility problem , we do here the conversion */
|
||||||
char number[21];
|
char number[21];
|
||||||
int offset=19;
|
int offset=19;
|
||||||
|
@ -231,9 +228,7 @@ void Display64BitsSize(ZPOS64_T n, int size_char)
|
||||||
printf("%s",&number[pos_string]);
|
printf("%s",&number[pos_string]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_list(uf)
|
static int do_list(unzFile uf) {
|
||||||
unzFile uf;
|
|
||||||
{
|
|
||||||
uLong i;
|
uLong i;
|
||||||
unz_global_info64 gi;
|
unz_global_info64 gi;
|
||||||
int err;
|
int err;
|
||||||
|
@ -248,7 +243,7 @@ int do_list(uf)
|
||||||
char filename_inzip[256];
|
char filename_inzip[256];
|
||||||
unz_file_info64 file_info;
|
unz_file_info64 file_info;
|
||||||
uLong ratio=0;
|
uLong ratio=0;
|
||||||
const char *string_method;
|
const char *string_method = "";
|
||||||
char charCrypt=' ';
|
char charCrypt=' ';
|
||||||
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
|
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
|
||||||
if (err!=UNZ_OK)
|
if (err!=UNZ_OK)
|
||||||
|
@ -259,7 +254,7 @@ int do_list(uf)
|
||||||
if (file_info.uncompressed_size>0)
|
if (file_info.uncompressed_size>0)
|
||||||
ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);
|
ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);
|
||||||
|
|
||||||
/* display a '*' if the file is crypted */
|
/* display a '*' if the file is encrypted */
|
||||||
if ((file_info.flag & 1) != 0)
|
if ((file_info.flag & 1) != 0)
|
||||||
charCrypt='*';
|
charCrypt='*';
|
||||||
|
|
||||||
|
@ -309,12 +304,7 @@ int do_list(uf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
|
static int do_extract_currentfile(unzFile uf, const int* popt_extract_without_path, int* popt_overwrite, const char* password) {
|
||||||
unzFile uf;
|
|
||||||
const int* popt_extract_without_path;
|
|
||||||
int* popt_overwrite;
|
|
||||||
const char* password;
|
|
||||||
{
|
|
||||||
char filename_inzip[256];
|
char filename_inzip[256];
|
||||||
char* filename_withoutpath;
|
char* filename_withoutpath;
|
||||||
char* p;
|
char* p;
|
||||||
|
@ -324,7 +314,6 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
|
||||||
uInt size_buf;
|
uInt size_buf;
|
||||||
|
|
||||||
unz_file_info64 file_info;
|
unz_file_info64 file_info;
|
||||||
uLong ratio=0;
|
|
||||||
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
|
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
|
||||||
|
|
||||||
if (err!=UNZ_OK)
|
if (err!=UNZ_OK)
|
||||||
|
@ -367,6 +356,20 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
|
||||||
else
|
else
|
||||||
write_filename = filename_withoutpath;
|
write_filename = filename_withoutpath;
|
||||||
|
|
||||||
|
if (write_filename[0]!='\0')
|
||||||
|
{
|
||||||
|
const char* relative_check = write_filename;
|
||||||
|
while (relative_check[1]!='\0')
|
||||||
|
{
|
||||||
|
if (relative_check[0]=='.' && relative_check[1]=='.')
|
||||||
|
write_filename = relative_check;
|
||||||
|
relative_check++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (write_filename[0]=='/' || write_filename[0]=='.')
|
||||||
|
write_filename++;
|
||||||
|
|
||||||
err = unzOpenCurrentFilePassword(uf,password);
|
err = unzOpenCurrentFilePassword(uf,password);
|
||||||
if (err!=UNZ_OK)
|
if (err!=UNZ_OK)
|
||||||
{
|
{
|
||||||
|
@ -439,7 +442,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (err>0)
|
if (err>0)
|
||||||
if (fwrite(buf,err,1,fout)!=1)
|
if (fwrite(buf,(unsigned)err,1,fout)!=1)
|
||||||
{
|
{
|
||||||
printf("error in writing extracted file\n");
|
printf("error in writing extracted file\n");
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
|
@ -472,16 +475,10 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
|
static int do_extract(unzFile uf, int opt_extract_without_path, int opt_overwrite, const char* password) {
|
||||||
unzFile uf;
|
|
||||||
int opt_extract_without_path;
|
|
||||||
int opt_overwrite;
|
|
||||||
const char* password;
|
|
||||||
{
|
|
||||||
uLong i;
|
uLong i;
|
||||||
unz_global_info64 gi;
|
unz_global_info64 gi;
|
||||||
int err;
|
int err;
|
||||||
FILE* fout=NULL;
|
|
||||||
|
|
||||||
err = unzGetGlobalInfo64(uf,&gi);
|
err = unzGetGlobalInfo64(uf,&gi);
|
||||||
if (err!=UNZ_OK)
|
if (err!=UNZ_OK)
|
||||||
|
@ -508,14 +505,7 @@ int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
|
static int do_extract_onefile(unzFile uf, const char* filename, int opt_extract_without_path, int opt_overwrite, const char* password) {
|
||||||
unzFile uf;
|
|
||||||
const char* filename;
|
|
||||||
int opt_extract_without_path;
|
|
||||||
int opt_overwrite;
|
|
||||||
const char* password;
|
|
||||||
{
|
|
||||||
int err = UNZ_OK;
|
|
||||||
if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
|
if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
|
||||||
{
|
{
|
||||||
printf("file %s not found in the zipfile\n",filename);
|
printf("file %s not found in the zipfile\n",filename);
|
||||||
|
@ -531,10 +521,7 @@ int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,passwo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(argc,argv)
|
int main(int argc, char *argv[]) {
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
|
||||||
const char *zipfilename=NULL;
|
const char *zipfilename=NULL;
|
||||||
const char *filename_to_extract=NULL;
|
const char *filename_to_extract=NULL;
|
||||||
const char *password=NULL;
|
const char *password=NULL;
|
||||||
|
@ -565,7 +552,7 @@ int main(argc,argv)
|
||||||
|
|
||||||
while ((*p)!='\0')
|
while ((*p)!='\0')
|
||||||
{
|
{
|
||||||
char c=*(p++);;
|
char c=*(p++);
|
||||||
if ((c=='l') || (c=='L'))
|
if ((c=='l') || (c=='L'))
|
||||||
opt_do_list = 1;
|
opt_do_list = 1;
|
||||||
if ((c=='v') || (c=='V'))
|
if ((c=='v') || (c=='V'))
|
||||||
|
@ -607,7 +594,7 @@ int main(argc,argv)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
strncpy(filename_try, zipfilename,MAXFILENAME-1);
|
strncpy(filename_try, zipfilename,MAXFILENAME-1);
|
||||||
/* strncpy doesnt append the trailing NULL, of the string is too long. */
|
/* strncpy doesn't append the trailing NULL, of the string is too long. */
|
||||||
filename_try[ MAXFILENAME ] = '\0';
|
filename_try[ MAXFILENAME ] = '\0';
|
||||||
|
|
||||||
# ifdef USEWIN32IOAPI
|
# ifdef USEWIN32IOAPI
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if defined(__APPLE__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64)
|
||||||
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
|
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
|
||||||
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
|
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
|
||||||
#define FTELLO_FUNC(stream) ftello(stream)
|
#define FTELLO_FUNC(stream) ftello(stream)
|
||||||
|
@ -71,11 +71,9 @@
|
||||||
#define MAXFILENAME (256)
|
#define MAXFILENAME (256)
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
uLong filetime(f, tmzip, dt)
|
/* f: name of file to get info on, tmzip: return value: access,
|
||||||
char *f; /* name of file to get info on */
|
modification and creation times, dt: dostime */
|
||||||
tm_zip *tmzip; /* return value: access, modific. and creation times */
|
static int filetime(const char *f, tm_zip *tmzip, uLong *dt) {
|
||||||
uLong *dt; /* dostime */
|
|
||||||
{
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
{
|
{
|
||||||
FILETIME ftLocal;
|
FILETIME ftLocal;
|
||||||
|
@ -94,12 +92,11 @@ uLong filetime(f, tmzip, dt)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#ifdef unix || __APPLE__
|
#if defined(unix) || defined(__APPLE__)
|
||||||
uLong filetime(f, tmzip, dt)
|
/* f: name of file to get info on, tmzip: return value: access,
|
||||||
char *f; /* name of file to get info on */
|
modification and creation times, dt: dostime */
|
||||||
tm_zip *tmzip; /* return value: access, modific. and creation times */
|
static int filetime(const char *f, tm_zip *tmzip, uLong *dt) {
|
||||||
uLong *dt; /* dostime */
|
(void)dt;
|
||||||
{
|
|
||||||
int ret=0;
|
int ret=0;
|
||||||
struct stat s; /* results of stat() */
|
struct stat s; /* results of stat() */
|
||||||
struct tm* filedate;
|
struct tm* filedate;
|
||||||
|
@ -108,12 +105,12 @@ uLong filetime(f, tmzip, dt)
|
||||||
if (strcmp(f,"-")!=0)
|
if (strcmp(f,"-")!=0)
|
||||||
{
|
{
|
||||||
char name[MAXFILENAME+1];
|
char name[MAXFILENAME+1];
|
||||||
int len = strlen(f);
|
size_t len = strlen(f);
|
||||||
if (len > MAXFILENAME)
|
if (len > MAXFILENAME)
|
||||||
len = MAXFILENAME;
|
len = MAXFILENAME;
|
||||||
|
|
||||||
strncpy(name, f,MAXFILENAME-1);
|
strncpy(name, f,MAXFILENAME-1);
|
||||||
/* strncpy doesnt append the trailing NULL, of the string is too long. */
|
/* strncpy doesn't append the trailing NULL, of the string is too long. */
|
||||||
name[ MAXFILENAME ] = '\0';
|
name[ MAXFILENAME ] = '\0';
|
||||||
|
|
||||||
if (name[len - 1] == '/')
|
if (name[len - 1] == '/')
|
||||||
|
@ -137,11 +134,12 @@ uLong filetime(f, tmzip, dt)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
uLong filetime(f, tmzip, dt)
|
/* f: name of file to get info on, tmzip: return value: access,
|
||||||
char *f; /* name of file to get info on */
|
modification and creation times, dt: dostime */
|
||||||
tm_zip *tmzip; /* return value: access, modific. and creation times */
|
static int filetime(const char *f, tm_zip *tmzip, uLong *dt) {
|
||||||
uLong *dt; /* dostime */
|
(void)f;
|
||||||
{
|
(void)tmzip;
|
||||||
|
(void)dt;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -150,9 +148,7 @@ uLong filetime(f, tmzip, dt)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int check_exist_file(filename)
|
static int check_exist_file(const char* filename) {
|
||||||
const char* filename;
|
|
||||||
{
|
|
||||||
FILE* ftestexist;
|
FILE* ftestexist;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
ftestexist = FOPEN_FUNC(filename,"rb");
|
ftestexist = FOPEN_FUNC(filename,"rb");
|
||||||
|
@ -163,14 +159,12 @@ int check_exist_file(filename)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_banner()
|
static void do_banner(void) {
|
||||||
{
|
|
||||||
printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
|
printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
|
||||||
printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
|
printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_help()
|
static void do_help(void) {
|
||||||
{
|
|
||||||
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
|
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
|
||||||
" -o Overwrite existing file.zip\n" \
|
" -o Overwrite existing file.zip\n" \
|
||||||
" -a Append to existing file.zip\n" \
|
" -a Append to existing file.zip\n" \
|
||||||
|
@ -182,14 +176,13 @@ void do_help()
|
||||||
|
|
||||||
/* calculate the CRC32 of a file,
|
/* calculate the CRC32 of a file,
|
||||||
because to encrypt a file, we need known the CRC32 of the file before */
|
because to encrypt a file, we need known the CRC32 of the file before */
|
||||||
int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
|
static int getFileCrc(const char* filenameinzip, void* buf, unsigned long size_buf, unsigned long* result_crc) {
|
||||||
{
|
|
||||||
unsigned long calculate_crc=0;
|
unsigned long calculate_crc=0;
|
||||||
int err=ZIP_OK;
|
int err=ZIP_OK;
|
||||||
FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
|
FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
|
||||||
|
|
||||||
unsigned long size_read = 0;
|
unsigned long size_read = 0;
|
||||||
unsigned long total_read = 0;
|
/* unsigned long total_read = 0; */
|
||||||
if (fin==NULL)
|
if (fin==NULL)
|
||||||
{
|
{
|
||||||
err = ZIP_ERRNO;
|
err = ZIP_ERRNO;
|
||||||
|
@ -199,7 +192,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
err = ZIP_OK;
|
err = ZIP_OK;
|
||||||
size_read = (int)fread(buf,1,size_buf,fin);
|
size_read = fread(buf,1,size_buf,fin);
|
||||||
if (size_read < size_buf)
|
if (size_read < size_buf)
|
||||||
if (feof(fin)==0)
|
if (feof(fin)==0)
|
||||||
{
|
{
|
||||||
|
@ -208,8 +201,8 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size_read>0)
|
if (size_read>0)
|
||||||
calculate_crc = crc32(calculate_crc,buf,size_read);
|
calculate_crc = crc32_z(calculate_crc,buf,size_read);
|
||||||
total_read += size_read;
|
/* total_read += size_read; */
|
||||||
|
|
||||||
} while ((err == ZIP_OK) && (size_read>0));
|
} while ((err == ZIP_OK) && (size_read>0));
|
||||||
|
|
||||||
|
@ -221,18 +214,17 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int isLargeFile(const char* filename)
|
static int isLargeFile(const char* filename) {
|
||||||
{
|
|
||||||
int largeFile = 0;
|
int largeFile = 0;
|
||||||
ZPOS64_T pos = 0;
|
ZPOS64_T pos = 0;
|
||||||
FILE* pFile = FOPEN_FUNC(filename, "rb");
|
FILE* pFile = FOPEN_FUNC(filename, "rb");
|
||||||
|
|
||||||
if(pFile != NULL)
|
if(pFile != NULL)
|
||||||
{
|
{
|
||||||
int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
|
FSEEKO_FUNC(pFile, 0, SEEK_END);
|
||||||
pos = FTELLO_FUNC(pFile);
|
pos = (ZPOS64_T)FTELLO_FUNC(pFile);
|
||||||
|
|
||||||
printf("File : %s is %lld bytes\n", filename, pos);
|
printf("File : %s is %llu bytes\n", filename, pos);
|
||||||
|
|
||||||
if(pos >= 0xffffffff)
|
if(pos >= 0xffffffff)
|
||||||
largeFile = 1;
|
largeFile = 1;
|
||||||
|
@ -243,10 +235,7 @@ int isLargeFile(const char* filename)
|
||||||
return largeFile;
|
return largeFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(argc,argv)
|
int main(int argc, char *argv[]) {
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
|
||||||
int i;
|
int i;
|
||||||
int opt_overwrite=0;
|
int opt_overwrite=0;
|
||||||
int opt_compress_level=Z_DEFAULT_COMPRESSION;
|
int opt_compress_level=Z_DEFAULT_COMPRESSION;
|
||||||
|
@ -255,7 +244,7 @@ int main(argc,argv)
|
||||||
char filename_try[MAXFILENAME+16];
|
char filename_try[MAXFILENAME+16];
|
||||||
int zipok;
|
int zipok;
|
||||||
int err=0;
|
int err=0;
|
||||||
int size_buf=0;
|
size_t size_buf=0;
|
||||||
void* buf=NULL;
|
void* buf=NULL;
|
||||||
const char* password=NULL;
|
const char* password=NULL;
|
||||||
|
|
||||||
|
@ -276,7 +265,7 @@ int main(argc,argv)
|
||||||
|
|
||||||
while ((*p)!='\0')
|
while ((*p)!='\0')
|
||||||
{
|
{
|
||||||
char c=*(p++);;
|
char c=*(p++);
|
||||||
if ((c=='o') || (c=='O'))
|
if ((c=='o') || (c=='O'))
|
||||||
opt_overwrite = 1;
|
opt_overwrite = 1;
|
||||||
if ((c=='a') || (c=='A'))
|
if ((c=='a') || (c=='A'))
|
||||||
|
@ -322,7 +311,7 @@ int main(argc,argv)
|
||||||
|
|
||||||
zipok = 1 ;
|
zipok = 1 ;
|
||||||
strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
|
strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
|
||||||
/* strncpy doesnt append the trailing NULL, of the string is too long. */
|
/* strncpy doesn't append the trailing NULL, of the string is too long. */
|
||||||
filename_try[ MAXFILENAME ] = '\0';
|
filename_try[ MAXFILENAME ] = '\0';
|
||||||
|
|
||||||
len=(int)strlen(filename_try);
|
len=(int)strlen(filename_try);
|
||||||
|
@ -392,11 +381,11 @@ int main(argc,argv)
|
||||||
((argv[i][1]=='o') || (argv[i][1]=='O') ||
|
((argv[i][1]=='o') || (argv[i][1]=='O') ||
|
||||||
(argv[i][1]=='a') || (argv[i][1]=='A') ||
|
(argv[i][1]=='a') || (argv[i][1]=='A') ||
|
||||||
(argv[i][1]=='p') || (argv[i][1]=='P') ||
|
(argv[i][1]=='p') || (argv[i][1]=='P') ||
|
||||||
((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
|
((argv[i][1]>='0') && (argv[i][1]<='9'))) &&
|
||||||
(strlen(argv[i]) == 2)))
|
(strlen(argv[i]) == 2)))
|
||||||
{
|
{
|
||||||
FILE * fin;
|
FILE * fin = NULL;
|
||||||
int size_read;
|
size_t size_read;
|
||||||
const char* filenameinzip = argv[i];
|
const char* filenameinzip = argv[i];
|
||||||
const char *savefilenameinzip;
|
const char *savefilenameinzip;
|
||||||
zip_fileinfo zi;
|
zip_fileinfo zi;
|
||||||
|
@ -472,7 +461,7 @@ int main(argc,argv)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
err = ZIP_OK;
|
err = ZIP_OK;
|
||||||
size_read = (int)fread(buf,1,size_buf,fin);
|
size_read = fread(buf,1,size_buf,fin);
|
||||||
if (size_read < size_buf)
|
if (size_read < size_buf)
|
||||||
if (feof(fin)==0)
|
if (feof(fin)==0)
|
||||||
{
|
{
|
||||||
|
@ -482,7 +471,7 @@ int main(argc,argv)
|
||||||
|
|
||||||
if (size_read>0)
|
if (size_read>0)
|
||||||
{
|
{
|
||||||
err = zipWriteInFileInZip (zf,buf,size_read);
|
err = zipWriteInFileInZip (zf,buf,(unsigned)size_read);
|
||||||
if (err<0)
|
if (err<0)
|
||||||
{
|
{
|
||||||
printf("error in writing %s in the zipfile\n",
|
printf("error in writing %s in the zipfile\n",
|
||||||
|
|
|
@ -27,13 +27,7 @@
|
||||||
WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
|
WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)
|
extern int ZEXPORT unzRepair(const char* file, const char* fileOut, const char* fileOutTmp, uLong* nRecovered, uLong* bytesRecovered) {
|
||||||
const char* file;
|
|
||||||
const char* fileOut;
|
|
||||||
const char* fileOutTmp;
|
|
||||||
uLong* nRecovered;
|
|
||||||
uLong* bytesRecovered;
|
|
||||||
{
|
|
||||||
int err = Z_OK;
|
int err = Z_OK;
|
||||||
FILE* fpZip = fopen(file, "rb");
|
FILE* fpZip = fopen(file, "rb");
|
||||||
FILE* fpOut = fopen(fileOut, "wb");
|
FILE* fpOut = fopen(fileOut, "wb");
|
||||||
|
|
|
@ -53,8 +53,8 @@
|
||||||
Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
|
Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
|
||||||
should only read the compressed/uncompressed size from the Zip64 format if
|
should only read the compressed/uncompressed size from the Zip64 format if
|
||||||
the size from normal header was 0xFFFFFFFF
|
the size from normal header was 0xFFFFFFFF
|
||||||
Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant
|
Oct-2009 - Mathias Svensson - Applied some bug fixes from patches received from Gilles Vollant
|
||||||
Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)
|
Oct-2009 - Mathias Svensson - Applied support to unzip files with compression method BZIP2 (bzip2 lib is required)
|
||||||
Patch created by Daniel Borca
|
Patch created by Daniel Borca
|
||||||
|
|
||||||
Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
|
Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
|
||||||
|
@ -77,8 +77,6 @@
|
||||||
|
|
||||||
#ifdef STDC
|
#ifdef STDC
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
# include <string.h>
|
|
||||||
# include <stdlib.h>
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef NO_ERRNO_H
|
#ifdef NO_ERRNO_H
|
||||||
extern int errno;
|
extern int errno;
|
||||||
|
@ -111,9 +109,6 @@
|
||||||
#ifndef ALLOC
|
#ifndef ALLOC
|
||||||
# define ALLOC(size) (malloc(size))
|
# define ALLOC(size) (malloc(size))
|
||||||
#endif
|
#endif
|
||||||
#ifndef TRYFREE
|
|
||||||
# define TRYFREE(p) {if (p) free(p);}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SIZECENTRALDIRITEM (0x2e)
|
#define SIZECENTRALDIRITEM (0x2e)
|
||||||
#define SIZEZIPLOCALHEADER (0x1e)
|
#define SIZEZIPLOCALHEADER (0x1e)
|
||||||
|
@ -122,7 +117,7 @@
|
||||||
const char unz_copyright[] =
|
const char unz_copyright[] =
|
||||||
" unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
|
" unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
|
||||||
|
|
||||||
/* unz_file_info_interntal contain internal info about a file in zipfile*/
|
/* unz_file_info64_internal contain internal info about a file in zipfile*/
|
||||||
typedef struct unz_file_info64_internal_s
|
typedef struct unz_file_info64_internal_s
|
||||||
{
|
{
|
||||||
ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */
|
ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */
|
||||||
|
@ -153,7 +148,7 @@ typedef struct
|
||||||
ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */
|
ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */
|
||||||
ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/
|
ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/
|
||||||
zlib_filefunc64_32_def z_filefunc;
|
zlib_filefunc64_32_def z_filefunc;
|
||||||
voidpf filestream; /* io structore of the zipfile */
|
voidpf filestream; /* io structure of the zipfile */
|
||||||
uLong compression_method; /* compression method (0==store) */
|
uLong compression_method; /* compression method (0==store) */
|
||||||
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
|
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
|
||||||
int raw;
|
int raw;
|
||||||
|
@ -166,7 +161,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
zlib_filefunc64_32_def z_filefunc;
|
zlib_filefunc64_32_def z_filefunc;
|
||||||
int is64bitOpenFunction;
|
int is64bitOpenFunction;
|
||||||
voidpf filestream; /* io structore of the zipfile */
|
voidpf filestream; /* io structure of the zipfile */
|
||||||
unz_global_info64 gi; /* public global information */
|
unz_global_info64 gi; /* public global information */
|
||||||
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
|
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
|
||||||
ZPOS64_T num_file; /* number of the current file in the zipfile*/
|
ZPOS64_T num_file; /* number of the current file in the zipfile*/
|
||||||
|
@ -197,29 +192,44 @@ typedef struct
|
||||||
#include "crypt.h"
|
#include "crypt.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
Read a byte from a gz_stream; update next_in and avail_in. Return EOF
|
Reads a long in LSB order from the given gz_stream. Sets
|
||||||
for end of file.
|
|
||||||
IN assertion: the stream s has been successfully opened for reading.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
local int unz64local_getShort(const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
local int unz64local_getByte OF((
|
|
||||||
const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream,
|
voidpf filestream,
|
||||||
int *pi));
|
uLong *pX) {
|
||||||
|
unsigned char c[2];
|
||||||
local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)
|
int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,2);
|
||||||
|
if (err==2)
|
||||||
{
|
{
|
||||||
unsigned char c;
|
*pX = c[0] | ((uLong)c[1] << 8);
|
||||||
int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
|
|
||||||
if (err==1)
|
|
||||||
{
|
|
||||||
*pi = (int)c;
|
|
||||||
return UNZ_OK;
|
return UNZ_OK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
*pX = 0;
|
||||||
|
if (ZERROR64(*pzlib_filefunc_def,filestream))
|
||||||
|
return UNZ_ERRNO;
|
||||||
|
else
|
||||||
|
return UNZ_EOF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local int unz64local_getLong(const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
|
voidpf filestream,
|
||||||
|
uLong *pX) {
|
||||||
|
unsigned char c[4];
|
||||||
|
int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,4);
|
||||||
|
if (err==4)
|
||||||
|
{
|
||||||
|
*pX = c[0] | ((uLong)c[1] << 8) | ((uLong)c[2] << 16) | ((uLong)c[3] << 24);
|
||||||
|
return UNZ_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pX = 0;
|
||||||
if (ZERROR64(*pzlib_filefunc_def,filestream))
|
if (ZERROR64(*pzlib_filefunc_def,filestream))
|
||||||
return UNZ_ERRNO;
|
return UNZ_ERRNO;
|
||||||
else
|
else
|
||||||
|
@ -228,126 +238,29 @@ local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
Reads a long in LSB order from the given gz_stream. Sets
|
|
||||||
*/
|
|
||||||
local int unz64local_getShort OF((
|
|
||||||
const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream,
|
|
||||||
uLong *pX));
|
|
||||||
|
|
||||||
local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream,
|
|
||||||
uLong *pX)
|
|
||||||
{
|
|
||||||
uLong x ;
|
|
||||||
int i = 0;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x = (uLong)i;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((uLong)i)<<8;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
*pX = x;
|
|
||||||
else
|
|
||||||
*pX = 0;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
local int unz64local_getLong OF((
|
|
||||||
const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream,
|
|
||||||
uLong *pX));
|
|
||||||
|
|
||||||
local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream,
|
|
||||||
uLong *pX)
|
|
||||||
{
|
|
||||||
uLong x ;
|
|
||||||
int i = 0;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x = (uLong)i;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((uLong)i)<<8;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((uLong)i)<<16;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x += ((uLong)i)<<24;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
*pX = x;
|
|
||||||
else
|
|
||||||
*pX = 0;
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
local int unz64local_getLong64 OF((
|
|
||||||
const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream,
|
|
||||||
ZPOS64_T *pX));
|
|
||||||
|
|
||||||
|
|
||||||
local int unz64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
local int unz64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
voidpf filestream,
|
voidpf filestream,
|
||||||
ZPOS64_T *pX)
|
ZPOS64_T *pX) {
|
||||||
|
unsigned char c[8];
|
||||||
|
int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,8);
|
||||||
|
if (err==8)
|
||||||
{
|
{
|
||||||
ZPOS64_T x ;
|
*pX = c[0] | ((ZPOS64_T)c[1] << 8) | ((ZPOS64_T)c[2] << 16) | ((ZPOS64_T)c[3] << 24)
|
||||||
int i = 0;
|
| ((ZPOS64_T)c[4] << 32) | ((ZPOS64_T)c[5] << 40) | ((ZPOS64_T)c[6] << 48) | ((ZPOS64_T)c[7] << 56);
|
||||||
int err;
|
return UNZ_OK;
|
||||||
|
}
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x = (ZPOS64_T)i;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<8;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<16;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<24;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<32;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<40;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<48;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
|
|
||||||
x |= ((ZPOS64_T)i)<<56;
|
|
||||||
|
|
||||||
if (err==UNZ_OK)
|
|
||||||
*pX = x;
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
*pX = 0;
|
*pX = 0;
|
||||||
return err;
|
if (ZERROR64(*pzlib_filefunc_def,filestream))
|
||||||
|
return UNZ_ERRNO;
|
||||||
|
else
|
||||||
|
return UNZ_EOF;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* My own strcmpi / strcasecmp */
|
/* My own strcmpi / strcasecmp */
|
||||||
local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)
|
local int strcmpcasenosensitive_internal(const char* fileName1, const char* fileName2) {
|
||||||
{
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
char c1=*(fileName1++);
|
char c1=*(fileName1++);
|
||||||
|
@ -379,19 +292,17 @@ local int strcmpcasenosensitive_internal (const char* fileName1, const char* fil
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Compare two filename (fileName1,fileName2).
|
Compare two filenames (fileName1,fileName2).
|
||||||
If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
|
If iCaseSensitivity = 1, comparison is case sensitive (like strcmp)
|
||||||
If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
|
If iCaseSensitivity = 2, comparison is not case sensitive (like strcmpi
|
||||||
or strcasecmp)
|
or strcasecmp)
|
||||||
If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
|
If iCaseSensitivity = 0, case sensitivity is default of your operating system
|
||||||
(like 1 on Unix, 2 on Windows)
|
(like 1 on Unix, 2 on Windows)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
|
extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
|
||||||
const char* fileName2,
|
const char* fileName2,
|
||||||
int iCaseSensitivity)
|
int iCaseSensitivity) {
|
||||||
|
|
||||||
{
|
|
||||||
if (iCaseSensitivity==0)
|
if (iCaseSensitivity==0)
|
||||||
iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
|
iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
|
||||||
|
|
||||||
|
@ -405,21 +316,23 @@ extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
|
||||||
#define BUFREADCOMMENT (0x400)
|
#define BUFREADCOMMENT (0x400)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CENTRALDIRINVALID
|
||||||
|
#define CENTRALDIRINVALID ((ZPOS64_T)(-1))
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Locate the Central directory of a zipfile (at the end, just before
|
Locate the Central directory of a zipfile (at the end, just before
|
||||||
the global comment)
|
the global comment)
|
||||||
*/
|
*/
|
||||||
local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
|
local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) {
|
||||||
local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
|
|
||||||
{
|
|
||||||
unsigned char* buf;
|
unsigned char* buf;
|
||||||
ZPOS64_T uSizeFile;
|
ZPOS64_T uSizeFile;
|
||||||
ZPOS64_T uBackRead;
|
ZPOS64_T uBackRead;
|
||||||
ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
|
ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
|
||||||
ZPOS64_T uPosFound=0;
|
ZPOS64_T uPosFound=CENTRALDIRINVALID;
|
||||||
|
|
||||||
if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
|
if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
|
|
||||||
uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
|
uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
|
||||||
|
@ -429,7 +342,7 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
|
||||||
|
|
||||||
buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
|
buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
|
||||||
if (buf==NULL)
|
if (buf==NULL)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
uBackRead = 4;
|
uBackRead = 4;
|
||||||
while (uBackRead<uMaxBack)
|
while (uBackRead<uMaxBack)
|
||||||
|
@ -455,14 +368,14 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
|
||||||
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
|
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
|
||||||
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
|
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
|
||||||
{
|
{
|
||||||
uPosFound = uReadPos+i;
|
uPosFound = uReadPos+(unsigned)i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uPosFound!=0)
|
if (uPosFound!=CENTRALDIRINVALID)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
TRYFREE(buf);
|
free(buf);
|
||||||
return uPosFound;
|
return uPosFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,23 +384,18 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
|
||||||
Locate the Central directory 64 of a zipfile (at the end, just before
|
Locate the Central directory 64 of a zipfile (at the end, just before
|
||||||
the global comment)
|
the global comment)
|
||||||
*/
|
*/
|
||||||
local ZPOS64_T unz64local_SearchCentralDir64 OF((
|
|
||||||
const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
|
||||||
voidpf filestream));
|
|
||||||
|
|
||||||
local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
voidpf filestream)
|
voidpf filestream) {
|
||||||
{
|
|
||||||
unsigned char* buf;
|
unsigned char* buf;
|
||||||
ZPOS64_T uSizeFile;
|
ZPOS64_T uSizeFile;
|
||||||
ZPOS64_T uBackRead;
|
ZPOS64_T uBackRead;
|
||||||
ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
|
ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
|
||||||
ZPOS64_T uPosFound=0;
|
ZPOS64_T uPosFound=CENTRALDIRINVALID;
|
||||||
uLong uL;
|
uLong uL;
|
||||||
ZPOS64_T relativeOffset;
|
ZPOS64_T relativeOffset;
|
||||||
|
|
||||||
if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
|
if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
|
|
||||||
uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
|
uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
|
||||||
|
@ -497,7 +405,7 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
|
||||||
|
|
||||||
buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
|
buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
|
||||||
if (buf==NULL)
|
if (buf==NULL)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
uBackRead = 4;
|
uBackRead = 4;
|
||||||
while (uBackRead<uMaxBack)
|
while (uBackRead<uMaxBack)
|
||||||
|
@ -523,51 +431,51 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
|
||||||
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
|
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
|
||||||
((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
|
((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
|
||||||
{
|
{
|
||||||
uPosFound = uReadPos+i;
|
uPosFound = uReadPos+(unsigned)i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uPosFound!=0)
|
if (uPosFound!=CENTRALDIRINVALID)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
TRYFREE(buf);
|
free(buf);
|
||||||
if (uPosFound == 0)
|
if (uPosFound == CENTRALDIRINVALID)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* Zip64 end of central directory locator */
|
/* Zip64 end of central directory locator */
|
||||||
if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
|
if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* the signature, already checked */
|
/* the signature, already checked */
|
||||||
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* number of the disk with the start of the zip64 end of central directory */
|
/* number of the disk with the start of the zip64 end of central directory */
|
||||||
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
if (uL != 0)
|
if (uL != 0)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* relative offset of the zip64 end of central directory record */
|
/* relative offset of the zip64 end of central directory record */
|
||||||
if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
|
if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* total number of disks */
|
/* total number of disks */
|
||||||
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
if (uL != 1)
|
if (uL != 1)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* Goto end of central directory record */
|
/* Goto end of central directory record */
|
||||||
if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
|
if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
/* the signature */
|
/* the signature */
|
||||||
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
if (uL != 0x06064b50)
|
if (uL != 0x06064b50)
|
||||||
return 0;
|
return CENTRALDIRINVALID;
|
||||||
|
|
||||||
return relativeOffset;
|
return relativeOffset;
|
||||||
}
|
}
|
||||||
|
@ -583,17 +491,16 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
|
||||||
*/
|
*/
|
||||||
local unzFile unzOpenInternal(const void *path,
|
local unzFile unzOpenInternal(const void *path,
|
||||||
zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
|
zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
|
||||||
int is64bitOpenFunction)
|
int is64bitOpenFunction) {
|
||||||
{
|
|
||||||
unz64_s us;
|
unz64_s us;
|
||||||
unz64_s *s;
|
unz64_s *s;
|
||||||
ZPOS64_T central_pos;
|
ZPOS64_T central_pos;
|
||||||
uLong uL;
|
uLong uL;
|
||||||
|
|
||||||
uLong number_disk; /* number of the current dist, used for
|
uLong number_disk; /* number of the current disk, used for
|
||||||
spaning ZIP, unsupported, always 0*/
|
spanning ZIP, unsupported, always 0*/
|
||||||
uLong number_disk_with_CD; /* number the the disk with central dir, used
|
uLong number_disk_with_CD; /* number the disk with central dir, used
|
||||||
for spaning ZIP, unsupported, always 0*/
|
for spanning ZIP, unsupported, always 0*/
|
||||||
ZPOS64_T number_entry_CD; /* total number of entries in
|
ZPOS64_T number_entry_CD; /* total number of entries in
|
||||||
the central dir
|
the central dir
|
||||||
(same than number_entry on nospan) */
|
(same than number_entry on nospan) */
|
||||||
|
@ -621,7 +528,7 @@ local unzFile unzOpenInternal (const void *path,
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
|
central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
|
||||||
if (central_pos)
|
if (central_pos!=CENTRALDIRINVALID)
|
||||||
{
|
{
|
||||||
uLong uS;
|
uLong uS;
|
||||||
ZPOS64_T uL64;
|
ZPOS64_T uL64;
|
||||||
|
@ -683,7 +590,7 @@ local unzFile unzOpenInternal (const void *path,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
|
central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
|
||||||
if (central_pos==0)
|
if (central_pos==CENTRALDIRINVALID)
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
|
|
||||||
us.isZip64 = 0;
|
us.isZip64 = 0;
|
||||||
|
@ -763,8 +670,7 @@ local unzFile unzOpenInternal (const void *path,
|
||||||
|
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen2(const char *path,
|
extern unzFile ZEXPORT unzOpen2(const char *path,
|
||||||
zlib_filefunc_def* pzlib_filefunc32_def)
|
zlib_filefunc_def* pzlib_filefunc32_def) {
|
||||||
{
|
|
||||||
if (pzlib_filefunc32_def != NULL)
|
if (pzlib_filefunc32_def != NULL)
|
||||||
{
|
{
|
||||||
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
||||||
|
@ -776,8 +682,7 @@ extern unzFile ZEXPORT unzOpen2 (const char *path,
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen2_64(const void *path,
|
extern unzFile ZEXPORT unzOpen2_64(const void *path,
|
||||||
zlib_filefunc64_def* pzlib_filefunc_def)
|
zlib_filefunc64_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
if (pzlib_filefunc_def != NULL)
|
if (pzlib_filefunc_def != NULL)
|
||||||
{
|
{
|
||||||
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
||||||
|
@ -790,13 +695,11 @@ extern unzFile ZEXPORT unzOpen2_64 (const void *path,
|
||||||
return unzOpenInternal(path, NULL, 1);
|
return unzOpenInternal(path, NULL, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen (const char *path)
|
extern unzFile ZEXPORT unzOpen(const char *path) {
|
||||||
{
|
|
||||||
return unzOpenInternal(path, NULL, 0);
|
return unzOpenInternal(path, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen64 (const void *path)
|
extern unzFile ZEXPORT unzOpen64(const void *path) {
|
||||||
{
|
|
||||||
return unzOpenInternal(path, NULL, 1);
|
return unzOpenInternal(path, NULL, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,8 +708,7 @@ extern unzFile ZEXPORT unzOpen64 (const void *path)
|
||||||
If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
|
If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
|
||||||
these files MUST be closed with unzCloseCurrentFile before call unzClose.
|
these files MUST be closed with unzCloseCurrentFile before call unzClose.
|
||||||
return UNZ_OK if there is no problem. */
|
return UNZ_OK if there is no problem. */
|
||||||
extern int ZEXPORT unzClose (unzFile file)
|
extern int ZEXPORT unzClose(unzFile file) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
return UNZ_PARAMERROR;
|
return UNZ_PARAMERROR;
|
||||||
|
@ -816,7 +718,7 @@ extern int ZEXPORT unzClose (unzFile file)
|
||||||
unzCloseCurrentFile(file);
|
unzCloseCurrentFile(file);
|
||||||
|
|
||||||
ZCLOSE64(s->z_filefunc, s->filestream);
|
ZCLOSE64(s->z_filefunc, s->filestream);
|
||||||
TRYFREE(s);
|
free(s);
|
||||||
return UNZ_OK;
|
return UNZ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -825,8 +727,7 @@ extern int ZEXPORT unzClose (unzFile file)
|
||||||
Write info about the ZipFile in the *pglobal_info structure.
|
Write info about the ZipFile in the *pglobal_info structure.
|
||||||
No preparation of the structure is needed
|
No preparation of the structure is needed
|
||||||
return UNZ_OK if there is no problem. */
|
return UNZ_OK if there is no problem. */
|
||||||
extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)
|
extern int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64* pglobal_info) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
return UNZ_PARAMERROR;
|
return UNZ_PARAMERROR;
|
||||||
|
@ -835,8 +736,7 @@ extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_
|
||||||
return UNZ_OK;
|
return UNZ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32)
|
extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
return UNZ_PARAMERROR;
|
return UNZ_PARAMERROR;
|
||||||
|
@ -847,35 +747,23 @@ extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info
|
||||||
return UNZ_OK;
|
return UNZ_OK;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Translate date/time from Dos format to tm_unz (readable more easilty)
|
Translate date/time from Dos format to tm_unz (readable more easily)
|
||||||
*/
|
*/
|
||||||
local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
|
local void unz64local_DosDateToTmuDate(ZPOS64_T ulDosDate, tm_unz* ptm) {
|
||||||
{
|
|
||||||
ZPOS64_T uDate;
|
ZPOS64_T uDate;
|
||||||
uDate = (ZPOS64_T)(ulDosDate>>16);
|
uDate = (ZPOS64_T)(ulDosDate>>16);
|
||||||
ptm->tm_mday = (uInt)(uDate&0x1f) ;
|
ptm->tm_mday = (int)(uDate&0x1f) ;
|
||||||
ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
|
ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ;
|
||||||
ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
|
ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ;
|
||||||
|
|
||||||
ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
|
ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800);
|
||||||
ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
|
ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ;
|
||||||
ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
|
ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Get Info about the current file in the zipfile, with internal only info
|
Get Info about the current file in the zipfile, with internal only info
|
||||||
*/
|
*/
|
||||||
local int unz64local_GetCurrentFileInfoInternal OF((unzFile file,
|
|
||||||
unz_file_info64 *pfile_info,
|
|
||||||
unz_file_info64_internal
|
|
||||||
*pfile_info_internal,
|
|
||||||
char *szFileName,
|
|
||||||
uLong fileNameBufferSize,
|
|
||||||
void *extraField,
|
|
||||||
uLong extraFieldBufferSize,
|
|
||||||
char *szComment,
|
|
||||||
uLong commentBufferSize));
|
|
||||||
|
|
||||||
local int unz64local_GetCurrentFileInfoInternal(unzFile file,
|
local int unz64local_GetCurrentFileInfoInternal(unzFile file,
|
||||||
unz_file_info64 *pfile_info,
|
unz_file_info64 *pfile_info,
|
||||||
unz_file_info64_internal
|
unz_file_info64_internal
|
||||||
|
@ -885,8 +773,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
|
||||||
void *extraField,
|
void *extraField,
|
||||||
uLong extraFieldBufferSize,
|
uLong extraFieldBufferSize,
|
||||||
char *szComment,
|
char *szComment,
|
||||||
uLong commentBufferSize)
|
uLong commentBufferSize) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
unz_file_info64 file_info;
|
unz_file_info64 file_info;
|
||||||
unz_file_info64_internal file_info_internal;
|
unz_file_info64_internal file_info_internal;
|
||||||
|
@ -993,7 +880,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
|
||||||
|
|
||||||
if (lSeek!=0)
|
if (lSeek!=0)
|
||||||
{
|
{
|
||||||
if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
|
if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
|
||||||
lSeek=0;
|
lSeek=0;
|
||||||
else
|
else
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
|
@ -1018,7 +905,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
|
||||||
|
|
||||||
if (lSeek!=0)
|
if (lSeek!=0)
|
||||||
{
|
{
|
||||||
if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
|
if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
|
||||||
lSeek=0;
|
lSeek=0;
|
||||||
else
|
else
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
|
@ -1038,8 +925,6 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
|
||||||
/* ZIP64 extra fields */
|
/* ZIP64 extra fields */
|
||||||
if (headerId == 0x0001)
|
if (headerId == 0x0001)
|
||||||
{
|
{
|
||||||
uLong uL;
|
|
||||||
|
|
||||||
if(file_info.uncompressed_size == MAXU32)
|
if(file_info.uncompressed_size == MAXU32)
|
||||||
{
|
{
|
||||||
if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
|
if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
|
||||||
|
@ -1059,10 +944,10 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(file_info.disk_num_start == MAXU32)
|
if(file_info.disk_num_start == 0xffff)
|
||||||
{
|
{
|
||||||
/* Disk Start Number */
|
/* Disk Start Number */
|
||||||
if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
|
if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,7 +975,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
|
||||||
|
|
||||||
if (lSeek!=0)
|
if (lSeek!=0)
|
||||||
{
|
{
|
||||||
if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
|
if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
|
||||||
lSeek=0;
|
lSeek=0;
|
||||||
else
|
else
|
||||||
err=UNZ_ERRNO;
|
err=UNZ_ERRNO;
|
||||||
|
@ -1125,8 +1010,7 @@ extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,
|
||||||
unz_file_info64 * pfile_info,
|
unz_file_info64 * pfile_info,
|
||||||
char * szFileName, uLong fileNameBufferSize,
|
char * szFileName, uLong fileNameBufferSize,
|
||||||
void *extraField, uLong extraFieldBufferSize,
|
void *extraField, uLong extraFieldBufferSize,
|
||||||
char* szComment, uLong commentBufferSize)
|
char* szComment, uLong commentBufferSize) {
|
||||||
{
|
|
||||||
return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
|
return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
|
||||||
szFileName,fileNameBufferSize,
|
szFileName,fileNameBufferSize,
|
||||||
extraField,extraFieldBufferSize,
|
extraField,extraFieldBufferSize,
|
||||||
|
@ -1137,8 +1021,7 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
|
||||||
unz_file_info * pfile_info,
|
unz_file_info * pfile_info,
|
||||||
char * szFileName, uLong fileNameBufferSize,
|
char * szFileName, uLong fileNameBufferSize,
|
||||||
void *extraField, uLong extraFieldBufferSize,
|
void *extraField, uLong extraFieldBufferSize,
|
||||||
char* szComment, uLong commentBufferSize)
|
char* szComment, uLong commentBufferSize) {
|
||||||
{
|
|
||||||
int err;
|
int err;
|
||||||
unz_file_info64 file_info64;
|
unz_file_info64 file_info64;
|
||||||
err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,
|
err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,
|
||||||
|
@ -1162,7 +1045,7 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
|
||||||
pfile_info->internal_fa = file_info64.internal_fa;
|
pfile_info->internal_fa = file_info64.internal_fa;
|
||||||
pfile_info->external_fa = file_info64.external_fa;
|
pfile_info->external_fa = file_info64.external_fa;
|
||||||
|
|
||||||
pfile_info->tmu_date = file_info64.tmu_date,
|
pfile_info->tmu_date = file_info64.tmu_date;
|
||||||
|
|
||||||
|
|
||||||
pfile_info->compressed_size = (uLong)file_info64.compressed_size;
|
pfile_info->compressed_size = (uLong)file_info64.compressed_size;
|
||||||
|
@ -1175,8 +1058,7 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
|
||||||
Set the current file of the zipfile to the first file.
|
Set the current file of the zipfile to the first file.
|
||||||
return UNZ_OK if there is no problem
|
return UNZ_OK if there is no problem
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzGoToFirstFile (unzFile file)
|
extern int ZEXPORT unzGoToFirstFile(unzFile file) {
|
||||||
{
|
|
||||||
int err=UNZ_OK;
|
int err=UNZ_OK;
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
|
@ -1196,8 +1078,7 @@ extern int ZEXPORT unzGoToFirstFile (unzFile file)
|
||||||
return UNZ_OK if there is no problem
|
return UNZ_OK if there is no problem
|
||||||
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
|
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzGoToNextFile (unzFile file)
|
extern int ZEXPORT unzGoToNextFile(unzFile file) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1229,8 +1110,7 @@ extern int ZEXPORT unzGoToNextFile (unzFile file)
|
||||||
UNZ_OK if the file is found. It becomes the current file.
|
UNZ_OK if the file is found. It becomes the current file.
|
||||||
UNZ_END_OF_LIST_OF_FILE if the file is not found
|
UNZ_END_OF_LIST_OF_FILE if the file is not found
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)
|
extern int ZEXPORT unzLocateFile(unzFile file, const char *szFileName, int iCaseSensitivity) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1305,8 +1185,7 @@ typedef struct unz_file_pos_s
|
||||||
} unz_file_pos;
|
} unz_file_pos;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos)
|
extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
|
|
||||||
if (file==NULL || file_pos==NULL)
|
if (file==NULL || file_pos==NULL)
|
||||||
|
@ -1321,10 +1200,7 @@ extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos)
|
||||||
return UNZ_OK;
|
return UNZ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzGetFilePos(
|
extern int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos* file_pos) {
|
||||||
unzFile file,
|
|
||||||
unz_file_pos* file_pos)
|
|
||||||
{
|
|
||||||
unz64_file_pos file_pos64;
|
unz64_file_pos file_pos64;
|
||||||
int err = unzGetFilePos64(file,&file_pos64);
|
int err = unzGetFilePos64(file,&file_pos64);
|
||||||
if (err==UNZ_OK)
|
if (err==UNZ_OK)
|
||||||
|
@ -1335,8 +1211,7 @@ extern int ZEXPORT unzGetFilePos(
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos)
|
extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1357,10 +1232,7 @@ extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzGoToFilePos(
|
extern int ZEXPORT unzGoToFilePos(unzFile file, unz_file_pos* file_pos) {
|
||||||
unzFile file,
|
|
||||||
unz_file_pos* file_pos)
|
|
||||||
{
|
|
||||||
unz64_file_pos file_pos64;
|
unz64_file_pos file_pos64;
|
||||||
if (file_pos == NULL)
|
if (file_pos == NULL)
|
||||||
return UNZ_PARAMERROR;
|
return UNZ_PARAMERROR;
|
||||||
|
@ -1384,8 +1256,7 @@ extern int ZEXPORT unzGoToFilePos(
|
||||||
*/
|
*/
|
||||||
local int unz64local_CheckCurrentFileCoherencyHeader(unz64_s* s, uInt* piSizeVar,
|
local int unz64local_CheckCurrentFileCoherencyHeader(unz64_s* s, uInt* piSizeVar,
|
||||||
ZPOS64_T * poffset_local_extrafield,
|
ZPOS64_T * poffset_local_extrafield,
|
||||||
uInt * psize_local_extrafield)
|
uInt * psize_local_extrafield) {
|
||||||
{
|
|
||||||
uLong uMagic,uData,uFlags;
|
uLong uMagic,uData,uFlags;
|
||||||
uLong size_filename;
|
uLong size_filename;
|
||||||
uLong size_extra_field;
|
uLong size_extra_field;
|
||||||
|
@ -1470,8 +1341,7 @@ local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVa
|
||||||
If there is no error and the file is opened, the return value is UNZ_OK.
|
If there is no error and the file is opened, the return value is UNZ_OK.
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method,
|
extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method,
|
||||||
int* level, int raw, const char* password)
|
int* level, int raw, const char* password) {
|
||||||
{
|
|
||||||
int err=UNZ_OK;
|
int err=UNZ_OK;
|
||||||
uInt iSizeVar;
|
uInt iSizeVar;
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
|
@ -1509,7 +1379,7 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
|
||||||
|
|
||||||
if (pfile_in_zip_read_info->read_buffer==NULL)
|
if (pfile_in_zip_read_info->read_buffer==NULL)
|
||||||
{
|
{
|
||||||
TRYFREE(pfile_in_zip_read_info);
|
free(pfile_in_zip_read_info);
|
||||||
return UNZ_INTERNALERROR;
|
return UNZ_INTERNALERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1566,7 +1436,8 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
|
||||||
pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
|
pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TRYFREE(pfile_in_zip_read_info);
|
free(pfile_in_zip_read_info->read_buffer);
|
||||||
|
free(pfile_in_zip_read_info);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -1586,7 +1457,8 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
|
||||||
pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
|
pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TRYFREE(pfile_in_zip_read_info);
|
free(pfile_in_zip_read_info->read_buffer);
|
||||||
|
free(pfile_in_zip_read_info);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
/* windowBits is passed < 0 to tell that there is no zlib header.
|
/* windowBits is passed < 0 to tell that there is no zlib header.
|
||||||
|
@ -1638,25 +1510,21 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
|
||||||
return UNZ_OK;
|
return UNZ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFile (unzFile file)
|
extern int ZEXPORT unzOpenCurrentFile(unzFile file) {
|
||||||
{
|
|
||||||
return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
|
return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password)
|
extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char* password) {
|
||||||
{
|
|
||||||
return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
|
return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw)
|
extern int ZEXPORT unzOpenCurrentFile2(unzFile file, int* method, int* level, int raw) {
|
||||||
{
|
|
||||||
return unzOpenCurrentFile3(file, method, level, raw, NULL);
|
return unzOpenCurrentFile3(file, method, level, raw, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Addition for GDAL : START */
|
/** Addition for GDAL : START */
|
||||||
|
|
||||||
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)
|
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
||||||
s=(unz64_s*)file;
|
s=(unz64_s*)file;
|
||||||
|
@ -1676,13 +1544,12 @@ extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)
|
||||||
buf contain buffer where data must be copied
|
buf contain buffer where data must be copied
|
||||||
len the size of buf.
|
len the size of buf.
|
||||||
|
|
||||||
return the number of byte copied if somes bytes are copied
|
return the number of byte copied if some bytes are copied
|
||||||
return 0 if the end of file was reached
|
return 0 if the end of file was reached
|
||||||
return <0 with error code if there is an error
|
return <0 with error code if there is an error
|
||||||
(UNZ_ERRNO for IO error, or zLib error for uncompress error)
|
(UNZ_ERRNO for IO error, or zLib error for uncompress error)
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
|
extern int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len) {
|
||||||
{
|
|
||||||
int err=UNZ_OK;
|
int err=UNZ_OK;
|
||||||
uInt iRead = 0;
|
uInt iRead = 0;
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
|
@ -1767,7 +1634,7 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
|
||||||
|
|
||||||
if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
|
if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
|
||||||
(pfile_in_zip_read_info->rest_read_compressed == 0))
|
(pfile_in_zip_read_info->rest_read_compressed == 0))
|
||||||
return (iRead==0) ? UNZ_EOF : iRead;
|
return (iRead==0) ? UNZ_EOF : (int)iRead;
|
||||||
|
|
||||||
if (pfile_in_zip_read_info->stream.avail_out <
|
if (pfile_in_zip_read_info->stream.avail_out <
|
||||||
pfile_in_zip_read_info->stream.avail_in)
|
pfile_in_zip_read_info->stream.avail_in)
|
||||||
|
@ -1857,6 +1724,9 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
|
||||||
err = Z_DATA_ERROR;
|
err = Z_DATA_ERROR;
|
||||||
|
|
||||||
uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
|
uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
|
||||||
|
/* Detect overflow, because z_stream.total_out is uLong (32 bits) */
|
||||||
|
if (uTotalOutAfter<uTotalOutBefore)
|
||||||
|
uTotalOutAfter += 1LL << 32; /* Add maximum value of uLong + 1 */
|
||||||
uOutThis = uTotalOutAfter-uTotalOutBefore;
|
uOutThis = uTotalOutAfter-uTotalOutBefore;
|
||||||
|
|
||||||
pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
|
pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
|
||||||
|
@ -1871,14 +1741,14 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
|
||||||
iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
|
iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
|
||||||
|
|
||||||
if (err==Z_STREAM_END)
|
if (err==Z_STREAM_END)
|
||||||
return (iRead==0) ? UNZ_EOF : iRead;
|
return (iRead==0) ? UNZ_EOF : (int)iRead;
|
||||||
if (err!=Z_OK)
|
if (err!=Z_OK)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err==Z_OK)
|
if (err==Z_OK)
|
||||||
return iRead;
|
return (int)iRead;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1886,8 +1756,7 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
|
||||||
/*
|
/*
|
||||||
Give the current position in uncompressed data
|
Give the current position in uncompressed data
|
||||||
*/
|
*/
|
||||||
extern z_off_t ZEXPORT unztell (unzFile file)
|
extern z_off_t ZEXPORT unztell(unzFile file) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
|
@ -1901,8 +1770,7 @@ extern z_off_t ZEXPORT unztell (unzFile file)
|
||||||
return (z_off_t)pfile_in_zip_read_info->stream.total_out;
|
return (z_off_t)pfile_in_zip_read_info->stream.total_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern ZPOS64_T ZEXPORT unztell64 (unzFile file)
|
extern ZPOS64_T ZEXPORT unztell64(unzFile file) {
|
||||||
{
|
|
||||||
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
||||||
|
@ -1921,8 +1789,7 @@ extern ZPOS64_T ZEXPORT unztell64 (unzFile file)
|
||||||
/*
|
/*
|
||||||
return 1 if the end of file was reached, 0 elsewhere
|
return 1 if the end of file was reached, 0 elsewhere
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzeof (unzFile file)
|
extern int ZEXPORT unzeof(unzFile file) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
|
@ -1953,8 +1820,7 @@ more info in the local-header version than in the central-header)
|
||||||
the return value is the number of bytes copied in buf, or (if <0)
|
the return value is the number of bytes copied in buf, or (if <0)
|
||||||
the error code
|
the error code
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
|
extern int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsigned len) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
file_in_zip64_read_info_s* pfile_in_zip_read_info;
|
||||||
uInt read_now;
|
uInt read_now;
|
||||||
|
@ -2001,8 +1867,7 @@ extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
|
||||||
Close the file in zip opened with unzOpenCurrentFile
|
Close the file in zip opened with unzOpenCurrentFile
|
||||||
Return UNZ_CRCERROR if all the file was read but the CRC is not good
|
Return UNZ_CRCERROR if all the file was read but the CRC is not good
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzCloseCurrentFile (unzFile file)
|
extern int ZEXPORT unzCloseCurrentFile(unzFile file) {
|
||||||
{
|
|
||||||
int err=UNZ_OK;
|
int err=UNZ_OK;
|
||||||
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
|
@ -2024,7 +1889,7 @@ extern int ZEXPORT unzCloseCurrentFile (unzFile file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TRYFREE(pfile_in_zip_read_info->read_buffer);
|
free(pfile_in_zip_read_info->read_buffer);
|
||||||
pfile_in_zip_read_info->read_buffer = NULL;
|
pfile_in_zip_read_info->read_buffer = NULL;
|
||||||
if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
|
if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
|
||||||
inflateEnd(&pfile_in_zip_read_info->stream);
|
inflateEnd(&pfile_in_zip_read_info->stream);
|
||||||
|
@ -2035,7 +1900,7 @@ extern int ZEXPORT unzCloseCurrentFile (unzFile file)
|
||||||
|
|
||||||
|
|
||||||
pfile_in_zip_read_info->stream_initialised = 0;
|
pfile_in_zip_read_info->stream_initialised = 0;
|
||||||
TRYFREE(pfile_in_zip_read_info);
|
free(pfile_in_zip_read_info);
|
||||||
|
|
||||||
s->pfile_in_zip_read=NULL;
|
s->pfile_in_zip_read=NULL;
|
||||||
|
|
||||||
|
@ -2048,8 +1913,7 @@ extern int ZEXPORT unzCloseCurrentFile (unzFile file)
|
||||||
uSizeBuf is the size of the szComment buffer.
|
uSizeBuf is the size of the szComment buffer.
|
||||||
return the number of byte copied or an error code <0
|
return the number of byte copied or an error code <0
|
||||||
*/
|
*/
|
||||||
extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)
|
extern int ZEXPORT unzGetGlobalComment(unzFile file, char * szComment, uLong uSizeBuf) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
uLong uReadThis ;
|
uLong uReadThis ;
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
|
@ -2076,8 +1940,7 @@ extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uS
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Additions by RX '2004 */
|
/* Additions by RX '2004 */
|
||||||
extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
|
extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
|
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
|
@ -2091,8 +1954,7 @@ extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
|
||||||
return s->pos_in_central_dir;
|
return s->pos_in_central_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern uLong ZEXPORT unzGetOffset (unzFile file)
|
extern uLong ZEXPORT unzGetOffset(unzFile file) {
|
||||||
{
|
|
||||||
ZPOS64_T offset64;
|
ZPOS64_T offset64;
|
||||||
|
|
||||||
if (file==NULL)
|
if (file==NULL)
|
||||||
|
@ -2101,8 +1963,7 @@ extern uLong ZEXPORT unzGetOffset (unzFile file)
|
||||||
return (uLong)offset64;
|
return (uLong)offset64;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
|
extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) {
|
||||||
{
|
|
||||||
unz64_s* s;
|
unz64_s* s;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -2119,7 +1980,6 @@ extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT unzSetOffset (unzFile file, uLong pos)
|
extern int ZEXPORT unzSetOffset (unzFile file, uLong pos) {
|
||||||
{
|
|
||||||
return unzSetOffset64(file,pos);
|
return unzSetOffset64(file,pos);
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,12 +83,12 @@ typedef voidp unzFile;
|
||||||
/* tm_unz contain date/time info */
|
/* tm_unz contain date/time info */
|
||||||
typedef struct tm_unz_s
|
typedef struct tm_unz_s
|
||||||
{
|
{
|
||||||
uInt tm_sec; /* seconds after the minute - [0,59] */
|
int tm_sec; /* seconds after the minute - [0,59] */
|
||||||
uInt tm_min; /* minutes after the hour - [0,59] */
|
int tm_min; /* minutes after the hour - [0,59] */
|
||||||
uInt tm_hour; /* hours since midnight - [0,23] */
|
int tm_hour; /* hours since midnight - [0,23] */
|
||||||
uInt tm_mday; /* day of the month - [1,31] */
|
int tm_mday; /* day of the month - [1,31] */
|
||||||
uInt tm_mon; /* months since January - [0,11] */
|
int tm_mon; /* months since January - [0,11] */
|
||||||
uInt tm_year; /* years - [1980..2044] */
|
int tm_year; /* years - [1980..2044] */
|
||||||
} tm_unz;
|
} tm_unz;
|
||||||
|
|
||||||
/* unz_global_info structure contain global data about the ZIPfile
|
/* unz_global_info structure contain global data about the ZIPfile
|
||||||
|
@ -150,21 +150,21 @@ typedef struct unz_file_info_s
|
||||||
tm_unz tmu_date;
|
tm_unz tmu_date;
|
||||||
} unz_file_info;
|
} unz_file_info;
|
||||||
|
|
||||||
extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
|
extern int ZEXPORT unzStringFileNameCompare(const char* fileName1,
|
||||||
const char* fileName2,
|
const char* fileName2,
|
||||||
int iCaseSensitivity));
|
int iCaseSensitivity);
|
||||||
/*
|
/*
|
||||||
Compare two filename (fileName1,fileName2).
|
Compare two filenames (fileName1,fileName2).
|
||||||
If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
|
If iCaseSensitivity = 1, comparison is case sensitive (like strcmp)
|
||||||
If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
|
If iCaseSensitivity = 2, comparison is not case sensitive (like strcmpi
|
||||||
or strcasecmp)
|
or strcasecmp)
|
||||||
If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
|
If iCaseSensitivity = 0, case sensitivity is default of your operating system
|
||||||
(like 1 on Unix, 2 on Windows)
|
(like 1 on Unix, 2 on Windows)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen OF((const char *path));
|
extern unzFile ZEXPORT unzOpen(const char *path);
|
||||||
extern unzFile ZEXPORT unzOpen64 OF((const void *path));
|
extern unzFile ZEXPORT unzOpen64(const void *path);
|
||||||
/*
|
/*
|
||||||
Open a Zip file. path contain the full pathname (by example,
|
Open a Zip file. path contain the full pathname (by example,
|
||||||
on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
|
on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
|
||||||
|
@ -181,41 +181,41 @@ extern unzFile ZEXPORT unzOpen64 OF((const void *path));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen2 OF((const char *path,
|
extern unzFile ZEXPORT unzOpen2(const char *path,
|
||||||
zlib_filefunc_def* pzlib_filefunc_def));
|
zlib_filefunc_def* pzlib_filefunc_def);
|
||||||
/*
|
/*
|
||||||
Open a Zip file, like unzOpen, but provide a set of file low level API
|
Open a Zip file, like unzOpen, but provide a set of file low level API
|
||||||
for read/write the zip file (see ioapi.h)
|
for read/write the zip file (see ioapi.h)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
|
extern unzFile ZEXPORT unzOpen2_64(const void *path,
|
||||||
zlib_filefunc64_def* pzlib_filefunc_def));
|
zlib_filefunc64_def* pzlib_filefunc_def);
|
||||||
/*
|
/*
|
||||||
Open a Zip file, like unz64Open, but provide a set of file low level API
|
Open a Zip file, like unz64Open, but provide a set of file low level API
|
||||||
for read/write the zip file (see ioapi.h)
|
for read/write the zip file (see ioapi.h)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzClose OF((unzFile file));
|
extern int ZEXPORT unzClose(unzFile file);
|
||||||
/*
|
/*
|
||||||
Close a ZipFile opened with unzOpen.
|
Close a ZipFile opened with unzOpen.
|
||||||
If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
|
If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
|
||||||
these files MUST be closed with unzCloseCurrentFile before call unzClose.
|
these files MUST be closed with unzCloseCurrentFile before call unzClose.
|
||||||
return UNZ_OK if there is no problem. */
|
return UNZ_OK if there is no problem. */
|
||||||
|
|
||||||
extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
|
extern int ZEXPORT unzGetGlobalInfo(unzFile file,
|
||||||
unz_global_info *pglobal_info));
|
unz_global_info *pglobal_info);
|
||||||
|
|
||||||
extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
|
extern int ZEXPORT unzGetGlobalInfo64(unzFile file,
|
||||||
unz_global_info64 *pglobal_info));
|
unz_global_info64 *pglobal_info);
|
||||||
/*
|
/*
|
||||||
Write info about the ZipFile in the *pglobal_info structure.
|
Write info about the ZipFile in the *pglobal_info structure.
|
||||||
No preparation of the structure is needed
|
No preparation of the structure is needed
|
||||||
return UNZ_OK if there is no problem. */
|
return UNZ_OK if there is no problem. */
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
|
extern int ZEXPORT unzGetGlobalComment(unzFile file,
|
||||||
char *szComment,
|
char *szComment,
|
||||||
uLong uSizeBuf));
|
uLong uSizeBuf);
|
||||||
/*
|
/*
|
||||||
Get the global comment string of the ZipFile, in the szComment buffer.
|
Get the global comment string of the ZipFile, in the szComment buffer.
|
||||||
uSizeBuf is the size of the szComment buffer.
|
uSizeBuf is the size of the szComment buffer.
|
||||||
|
@ -226,22 +226,22 @@ extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
/* Unzip package allow you browse the directory of the zipfile */
|
/* Unzip package allow you browse the directory of the zipfile */
|
||||||
|
|
||||||
extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
|
extern int ZEXPORT unzGoToFirstFile(unzFile file);
|
||||||
/*
|
/*
|
||||||
Set the current file of the zipfile to the first file.
|
Set the current file of the zipfile to the first file.
|
||||||
return UNZ_OK if there is no problem
|
return UNZ_OK if there is no problem
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzGoToNextFile OF((unzFile file));
|
extern int ZEXPORT unzGoToNextFile(unzFile file);
|
||||||
/*
|
/*
|
||||||
Set the current file of the zipfile to the next file.
|
Set the current file of the zipfile to the next file.
|
||||||
return UNZ_OK if there is no problem
|
return UNZ_OK if there is no problem
|
||||||
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
|
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzLocateFile OF((unzFile file,
|
extern int ZEXPORT unzLocateFile(unzFile file,
|
||||||
const char *szFileName,
|
const char *szFileName,
|
||||||
int iCaseSensitivity));
|
int iCaseSensitivity);
|
||||||
/*
|
/*
|
||||||
Try locate the file szFileName in the zipfile.
|
Try locate the file szFileName in the zipfile.
|
||||||
For the iCaseSensitivity signification, see unzStringFileNameCompare
|
For the iCaseSensitivity signification, see unzStringFileNameCompare
|
||||||
|
@ -285,28 +285,28 @@ extern int ZEXPORT unzGoToFilePos64(
|
||||||
|
|
||||||
/* ****************************************** */
|
/* ****************************************** */
|
||||||
|
|
||||||
extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
|
extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file,
|
||||||
unz_file_info64 *pfile_info,
|
unz_file_info64 *pfile_info,
|
||||||
char *szFileName,
|
char *szFileName,
|
||||||
uLong fileNameBufferSize,
|
uLong fileNameBufferSize,
|
||||||
void *extraField,
|
void *extraField,
|
||||||
uLong extraFieldBufferSize,
|
uLong extraFieldBufferSize,
|
||||||
char *szComment,
|
char *szComment,
|
||||||
uLong commentBufferSize));
|
uLong commentBufferSize);
|
||||||
|
|
||||||
extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
|
extern int ZEXPORT unzGetCurrentFileInfo(unzFile file,
|
||||||
unz_file_info *pfile_info,
|
unz_file_info *pfile_info,
|
||||||
char *szFileName,
|
char *szFileName,
|
||||||
uLong fileNameBufferSize,
|
uLong fileNameBufferSize,
|
||||||
void *extraField,
|
void *extraField,
|
||||||
uLong extraFieldBufferSize,
|
uLong extraFieldBufferSize,
|
||||||
char *szComment,
|
char *szComment,
|
||||||
uLong commentBufferSize));
|
uLong commentBufferSize);
|
||||||
/*
|
/*
|
||||||
Get Info about the current file
|
Get Info about the current file
|
||||||
if pfile_info!=NULL, the *pfile_info structure will contain somes info about
|
if pfile_info!=NULL, the *pfile_info structure will contain some info about
|
||||||
the current file
|
the current file
|
||||||
if szFileName!=NULL, the filemane string will be copied in szFileName
|
if szFileName!=NULL, the filename string will be copied in szFileName
|
||||||
(fileNameBufferSize is the size of the buffer)
|
(fileNameBufferSize is the size of the buffer)
|
||||||
if extraField!=NULL, the extra field information will be copied in extraField
|
if extraField!=NULL, the extra field information will be copied in extraField
|
||||||
(extraFieldBufferSize is the size of the buffer).
|
(extraFieldBufferSize is the size of the buffer).
|
||||||
|
@ -318,7 +318,7 @@ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
|
||||||
|
|
||||||
/** Addition for GDAL : START */
|
/** Addition for GDAL : START */
|
||||||
|
|
||||||
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
|
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file);
|
||||||
|
|
||||||
/** Addition for GDAL : END */
|
/** Addition for GDAL : END */
|
||||||
|
|
||||||
|
@ -328,24 +328,24 @@ extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
|
||||||
from it, and close it (you can close it before reading all the file)
|
from it, and close it (you can close it before reading all the file)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
|
extern int ZEXPORT unzOpenCurrentFile(unzFile file);
|
||||||
/*
|
/*
|
||||||
Open for reading data the current file in the zipfile.
|
Open for reading data the current file in the zipfile.
|
||||||
If there is no error, the return value is UNZ_OK.
|
If there is no error, the return value is UNZ_OK.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
|
extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file,
|
||||||
const char* password));
|
const char* password);
|
||||||
/*
|
/*
|
||||||
Open for reading data the current file in the zipfile.
|
Open for reading data the current file in the zipfile.
|
||||||
password is a crypting password
|
password is a crypting password
|
||||||
If there is no error, the return value is UNZ_OK.
|
If there is no error, the return value is UNZ_OK.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
|
extern int ZEXPORT unzOpenCurrentFile2(unzFile file,
|
||||||
int* method,
|
int* method,
|
||||||
int* level,
|
int* level,
|
||||||
int raw));
|
int raw);
|
||||||
/*
|
/*
|
||||||
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
|
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
|
||||||
if raw==1
|
if raw==1
|
||||||
|
@ -355,11 +355,11 @@ extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
|
||||||
but you CANNOT set method parameter as NULL
|
but you CANNOT set method parameter as NULL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
|
extern int ZEXPORT unzOpenCurrentFile3(unzFile file,
|
||||||
int* method,
|
int* method,
|
||||||
int* level,
|
int* level,
|
||||||
int raw,
|
int raw,
|
||||||
const char* password));
|
const char* password);
|
||||||
/*
|
/*
|
||||||
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
|
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
|
||||||
if raw==1
|
if raw==1
|
||||||
|
@ -370,41 +370,41 @@ extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
|
extern int ZEXPORT unzCloseCurrentFile(unzFile file);
|
||||||
/*
|
/*
|
||||||
Close the file in zip opened with unzOpenCurrentFile
|
Close the file in zip opened with unzOpenCurrentFile
|
||||||
Return UNZ_CRCERROR if all the file was read but the CRC is not good
|
Return UNZ_CRCERROR if all the file was read but the CRC is not good
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
|
extern int ZEXPORT unzReadCurrentFile(unzFile file,
|
||||||
voidp buf,
|
voidp buf,
|
||||||
unsigned len));
|
unsigned len);
|
||||||
/*
|
/*
|
||||||
Read bytes from the current file (opened by unzOpenCurrentFile)
|
Read bytes from the current file (opened by unzOpenCurrentFile)
|
||||||
buf contain buffer where data must be copied
|
buf contain buffer where data must be copied
|
||||||
len the size of buf.
|
len the size of buf.
|
||||||
|
|
||||||
return the number of byte copied if somes bytes are copied
|
return the number of byte copied if some bytes are copied
|
||||||
return 0 if the end of file was reached
|
return 0 if the end of file was reached
|
||||||
return <0 with error code if there is an error
|
return <0 with error code if there is an error
|
||||||
(UNZ_ERRNO for IO error, or zLib error for uncompress error)
|
(UNZ_ERRNO for IO error, or zLib error for uncompress error)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern z_off_t ZEXPORT unztell OF((unzFile file));
|
extern z_off_t ZEXPORT unztell(unzFile file);
|
||||||
|
|
||||||
extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
|
extern ZPOS64_T ZEXPORT unztell64(unzFile file);
|
||||||
/*
|
/*
|
||||||
Give the current position in uncompressed data
|
Give the current position in uncompressed data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzeof OF((unzFile file));
|
extern int ZEXPORT unzeof(unzFile file);
|
||||||
/*
|
/*
|
||||||
return 1 if the end of file was reached, 0 elsewhere
|
return 1 if the end of file was reached, 0 elsewhere
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
|
extern int ZEXPORT unzGetLocalExtrafield(unzFile file,
|
||||||
voidp buf,
|
voidp buf,
|
||||||
unsigned len));
|
unsigned len);
|
||||||
/*
|
/*
|
||||||
Read extra field from the current file (opened by unzOpenCurrentFile)
|
Read extra field from the current file (opened by unzOpenCurrentFile)
|
||||||
This is the local-header version of the extra field (sometimes, there is
|
This is the local-header version of the extra field (sometimes, there is
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives
|
Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives
|
||||||
Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.
|
Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.
|
||||||
Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data
|
Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data
|
||||||
It is used when recreting zip archive with RAW when deleting items from a zip.
|
It is used when recreating zip archive with RAW when deleting items from a zip.
|
||||||
ZIP64 data is automatically added to items that needs it, and existing ZIP64 data need to be removed.
|
ZIP64 data is automatically added to items that needs it, and existing ZIP64 data need to be removed.
|
||||||
Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
|
Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
|
||||||
Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
|
Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
|
||||||
|
@ -25,14 +25,13 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "../../zlib.h"
|
#include "../../zlib.h"
|
||||||
#include "zip.h"
|
#include "zip.h"
|
||||||
|
|
||||||
#ifdef STDC
|
#ifdef STDC
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
# include <string.h>
|
|
||||||
# include <stdlib.h>
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef NO_ERRNO_H
|
#ifdef NO_ERRNO_H
|
||||||
extern int errno;
|
extern int errno;
|
||||||
|
@ -47,7 +46,7 @@
|
||||||
/* compile with -Dlocal if your debugger can't find static symbols */
|
/* compile with -Dlocal if your debugger can't find static symbols */
|
||||||
|
|
||||||
#ifndef VERSIONMADEBY
|
#ifndef VERSIONMADEBY
|
||||||
# define VERSIONMADEBY (0x0) /* platform depedent */
|
# define VERSIONMADEBY (0x0) /* platform dependent */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef Z_BUFSIZE
|
#ifndef Z_BUFSIZE
|
||||||
|
@ -61,9 +60,6 @@
|
||||||
#ifndef ALLOC
|
#ifndef ALLOC
|
||||||
# define ALLOC(size) (malloc(size))
|
# define ALLOC(size) (malloc(size))
|
||||||
#endif
|
#endif
|
||||||
#ifndef TRYFREE
|
|
||||||
# define TRYFREE(p) {if (p) free(p);}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define SIZECENTRALDIRITEM (0x2e)
|
#define SIZECENTRALDIRITEM (0x2e)
|
||||||
|
@ -138,37 +134,37 @@ typedef struct
|
||||||
uInt pos_in_buffered_data; /* last written byte in buffered_data */
|
uInt pos_in_buffered_data; /* last written byte in buffered_data */
|
||||||
|
|
||||||
ZPOS64_T pos_local_header; /* offset of the local header of the file
|
ZPOS64_T pos_local_header; /* offset of the local header of the file
|
||||||
currenty writing */
|
currently writing */
|
||||||
char* central_header; /* central header data for the current file */
|
char* central_header; /* central header data for the current file */
|
||||||
uLong size_centralExtra;
|
uLong size_centralExtra;
|
||||||
uLong size_centralheader; /* size of the central header for cur file */
|
uLong size_centralheader; /* size of the central header for cur file */
|
||||||
uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */
|
uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */
|
||||||
uLong flag; /* flag of the file currently writing */
|
uLong flag; /* flag of the file currently writing */
|
||||||
|
|
||||||
int method; /* compression method of file currenty wr.*/
|
int method; /* compression method of file currently wr.*/
|
||||||
int raw; /* 1 for directly writing raw data */
|
int raw; /* 1 for directly writing raw data */
|
||||||
Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
|
Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
|
||||||
uLong dosDate;
|
uLong dosDate;
|
||||||
uLong crc32;
|
uLong crc32;
|
||||||
int encrypt;
|
int encrypt;
|
||||||
int zip64; /* Add ZIP64 extened information in the extra field */
|
int zip64; /* Add ZIP64 extended information in the extra field */
|
||||||
ZPOS64_T pos_zip64extrainfo;
|
ZPOS64_T pos_zip64extrainfo;
|
||||||
ZPOS64_T totalCompressedData;
|
ZPOS64_T totalCompressedData;
|
||||||
ZPOS64_T totalUncompressedData;
|
ZPOS64_T totalUncompressedData;
|
||||||
#ifndef NOCRYPT
|
#ifndef NOCRYPT
|
||||||
unsigned long keys[3]; /* keys defining the pseudo-random sequence */
|
unsigned long keys[3]; /* keys defining the pseudo-random sequence */
|
||||||
const z_crc_t* pcrc_32_tab;
|
const z_crc_t* pcrc_32_tab;
|
||||||
int crypt_header_size;
|
unsigned crypt_header_size;
|
||||||
#endif
|
#endif
|
||||||
} curfile64_info;
|
} curfile64_info;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
zlib_filefunc64_32_def z_filefunc;
|
zlib_filefunc64_32_def z_filefunc;
|
||||||
voidpf filestream; /* io structore of the zipfile */
|
voidpf filestream; /* io structure of the zipfile */
|
||||||
linkedlist_data central_dir;/* datablock with central dir in construction*/
|
linkedlist_data central_dir;/* datablock with central dir in construction*/
|
||||||
int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/
|
int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/
|
||||||
curfile64_info ci; /* info on the file curretly writing */
|
curfile64_info ci; /* info on the file currently writing */
|
||||||
|
|
||||||
ZPOS64_T begin_pos; /* position of the beginning of the zipfile */
|
ZPOS64_T begin_pos; /* position of the beginning of the zipfile */
|
||||||
ZPOS64_T add_position_when_writing_offset;
|
ZPOS64_T add_position_when_writing_offset;
|
||||||
|
@ -186,8 +182,7 @@ typedef struct
|
||||||
#include "crypt.h"
|
#include "crypt.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
local linkedlist_datablock_internal* allocate_new_datablock()
|
local linkedlist_datablock_internal* allocate_new_datablock(void) {
|
||||||
{
|
|
||||||
linkedlist_datablock_internal* ldi;
|
linkedlist_datablock_internal* ldi;
|
||||||
ldi = (linkedlist_datablock_internal*)
|
ldi = (linkedlist_datablock_internal*)
|
||||||
ALLOC(sizeof(linkedlist_datablock_internal));
|
ALLOC(sizeof(linkedlist_datablock_internal));
|
||||||
|
@ -200,30 +195,26 @@ local linkedlist_datablock_internal* allocate_new_datablock()
|
||||||
return ldi;
|
return ldi;
|
||||||
}
|
}
|
||||||
|
|
||||||
local void free_datablock(linkedlist_datablock_internal* ldi)
|
local void free_datablock(linkedlist_datablock_internal* ldi) {
|
||||||
{
|
|
||||||
while (ldi!=NULL)
|
while (ldi!=NULL)
|
||||||
{
|
{
|
||||||
linkedlist_datablock_internal* ldinext = ldi->next_datablock;
|
linkedlist_datablock_internal* ldinext = ldi->next_datablock;
|
||||||
TRYFREE(ldi);
|
free(ldi);
|
||||||
ldi = ldinext;
|
ldi = ldinext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
local void init_linkedlist(linkedlist_data* ll)
|
local void init_linkedlist(linkedlist_data* ll) {
|
||||||
{
|
|
||||||
ll->first_block = ll->last_block = NULL;
|
ll->first_block = ll->last_block = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
local void free_linkedlist(linkedlist_data* ll)
|
local void free_linkedlist(linkedlist_data* ll) {
|
||||||
{
|
|
||||||
free_datablock(ll->first_block);
|
free_datablock(ll->first_block);
|
||||||
ll->first_block = ll->last_block = NULL;
|
ll->first_block = ll->last_block = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
|
local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) {
|
||||||
{
|
|
||||||
linkedlist_datablock_internal* ldi;
|
linkedlist_datablock_internal* ldi;
|
||||||
const unsigned char* from_copy;
|
const unsigned char* from_copy;
|
||||||
|
|
||||||
|
@ -238,7 +229,7 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
|
||||||
}
|
}
|
||||||
|
|
||||||
ldi = ll->last_block;
|
ldi = ll->last_block;
|
||||||
from_copy = (unsigned char*)buf;
|
from_copy = (const unsigned char*)buf;
|
||||||
|
|
||||||
while (len>0)
|
while (len>0)
|
||||||
{
|
{
|
||||||
|
@ -283,9 +274,7 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
|
||||||
nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)
|
nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));
|
local int zip64local_putValue(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte) {
|
||||||
local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)
|
|
||||||
{
|
|
||||||
unsigned char buf[8];
|
unsigned char buf[8];
|
||||||
int n;
|
int n;
|
||||||
for (n = 0; n < nbByte; n++)
|
for (n = 0; n < nbByte; n++)
|
||||||
|
@ -301,15 +290,13 @@ local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
|
if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte)
|
||||||
return ZIP_ERRNO;
|
return ZIP_ERRNO;
|
||||||
else
|
else
|
||||||
return ZIP_OK;
|
return ZIP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));
|
local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) {
|
||||||
local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)
|
|
||||||
{
|
|
||||||
unsigned char* buf=(unsigned char*)dest;
|
unsigned char* buf=(unsigned char*)dest;
|
||||||
int n;
|
int n;
|
||||||
for (n = 0; n < nbByte; n++) {
|
for (n = 0; n < nbByte; n++) {
|
||||||
|
@ -329,25 +316,21 @@ local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
|
local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) {
|
||||||
{
|
|
||||||
uLong year = (uLong)ptm->tm_year;
|
uLong year = (uLong)ptm->tm_year;
|
||||||
if (year>=1980)
|
if (year>=1980)
|
||||||
year-=1980;
|
year-=1980;
|
||||||
else if (year>=80)
|
else if (year>=80)
|
||||||
year-=80;
|
year-=80;
|
||||||
return
|
return
|
||||||
(uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
|
(uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) |
|
||||||
((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
|
(((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));
|
local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int* pi) {
|
||||||
|
|
||||||
local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi)
|
|
||||||
{
|
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
|
int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
|
||||||
if (err==1)
|
if (err==1)
|
||||||
|
@ -368,10 +351,7 @@ local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,vo
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
Reads a long in LSB order from the given gz_stream. Sets
|
Reads a long in LSB order from the given gz_stream. Sets
|
||||||
*/
|
*/
|
||||||
local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
|
local int zip64local_getShort(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) {
|
||||||
|
|
||||||
local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
|
|
||||||
{
|
|
||||||
uLong x ;
|
uLong x ;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int err;
|
int err;
|
||||||
|
@ -390,10 +370,7 @@ local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
|
local int zip64local_getLong(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) {
|
||||||
|
|
||||||
local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
|
|
||||||
{
|
|
||||||
uLong x ;
|
uLong x ;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int err;
|
int err;
|
||||||
|
@ -420,11 +397,8 @@ local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));
|
|
||||||
|
|
||||||
|
local int zip64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX) {
|
||||||
local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)
|
|
||||||
{
|
|
||||||
ZPOS64_T x;
|
ZPOS64_T x;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int err;
|
int err;
|
||||||
|
@ -475,10 +449,7 @@ local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def
|
||||||
Locate the Central directory of a zipfile (at the end, just before
|
Locate the Central directory of a zipfile (at the end, just before
|
||||||
the global comment)
|
the global comment)
|
||||||
*/
|
*/
|
||||||
local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
|
local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) {
|
||||||
|
|
||||||
local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
|
|
||||||
{
|
|
||||||
unsigned char* buf;
|
unsigned char* buf;
|
||||||
ZPOS64_T uSizeFile;
|
ZPOS64_T uSizeFile;
|
||||||
ZPOS64_T uBackRead;
|
ZPOS64_T uBackRead;
|
||||||
|
@ -522,14 +493,14 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
|
||||||
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
|
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
|
||||||
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
|
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
|
||||||
{
|
{
|
||||||
uPosFound = uReadPos+i;
|
uPosFound = uReadPos+(unsigned)i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uPosFound!=0)
|
if (uPosFound!=0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
TRYFREE(buf);
|
free(buf);
|
||||||
return uPosFound;
|
return uPosFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,10 +508,7 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
|
||||||
Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
|
Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
|
||||||
the global comment)
|
the global comment)
|
||||||
*/
|
*/
|
||||||
local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
|
local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) {
|
||||||
|
|
||||||
local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
|
|
||||||
{
|
|
||||||
unsigned char* buf;
|
unsigned char* buf;
|
||||||
ZPOS64_T uSizeFile;
|
ZPOS64_T uSizeFile;
|
||||||
ZPOS64_T uBackRead;
|
ZPOS64_T uBackRead;
|
||||||
|
@ -586,7 +554,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
|
||||||
// Signature "0x07064b50" Zip64 end of central directory locater
|
// Signature "0x07064b50" Zip64 end of central directory locater
|
||||||
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
|
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
|
||||||
{
|
{
|
||||||
uPosFound = uReadPos+i;
|
uPosFound = uReadPos+(unsigned)i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -595,7 +563,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRYFREE(buf);
|
free(buf);
|
||||||
if (uPosFound == 0)
|
if (uPosFound == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -637,8 +605,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
|
||||||
return relativeOffset;
|
return relativeOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LoadCentralDirectoryRecord(zip64_internal* pziinit)
|
local int LoadCentralDirectoryRecord(zip64_internal* pziinit) {
|
||||||
{
|
|
||||||
int err=ZIP_OK;
|
int err=ZIP_OK;
|
||||||
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
|
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
|
||||||
|
|
||||||
|
@ -647,10 +614,10 @@ int LoadCentralDirectoryRecord(zip64_internal* pziinit)
|
||||||
ZPOS64_T central_pos;
|
ZPOS64_T central_pos;
|
||||||
uLong uL;
|
uLong uL;
|
||||||
|
|
||||||
uLong number_disk; /* number of the current dist, used for
|
uLong number_disk; /* number of the current disk, used for
|
||||||
spaning ZIP, unsupported, always 0*/
|
spanning ZIP, unsupported, always 0*/
|
||||||
uLong number_disk_with_CD; /* number the the disk with central dir, used
|
uLong number_disk_with_CD; /* number of the disk with central dir, used
|
||||||
for spaning ZIP, unsupported, always 0*/
|
for spanning ZIP, unsupported, always 0*/
|
||||||
ZPOS64_T number_entry;
|
ZPOS64_T number_entry;
|
||||||
ZPOS64_T number_entry_CD; /* total number of entries in
|
ZPOS64_T number_entry_CD; /* total number of entries in
|
||||||
the central dir
|
the central dir
|
||||||
|
@ -830,7 +797,7 @@ int LoadCentralDirectoryRecord(zip64_internal* pziinit)
|
||||||
|
|
||||||
size_central_dir_to_read-=read_this;
|
size_central_dir_to_read-=read_this;
|
||||||
}
|
}
|
||||||
TRYFREE(buf_read);
|
free(buf_read);
|
||||||
}
|
}
|
||||||
pziinit->begin_pos = byte_before_the_zipfile;
|
pziinit->begin_pos = byte_before_the_zipfile;
|
||||||
pziinit->number_entry = number_entry_CD;
|
pziinit->number_entry = number_entry_CD;
|
||||||
|
@ -846,8 +813,7 @@ int LoadCentralDirectoryRecord(zip64_internal* pziinit)
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
/************************************************************/
|
||||||
extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)
|
extern zipFile ZEXPORT zipOpen3(const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) {
|
||||||
{
|
|
||||||
zip64_internal ziinit;
|
zip64_internal ziinit;
|
||||||
zip64_internal* zi;
|
zip64_internal* zi;
|
||||||
int err=ZIP_OK;
|
int err=ZIP_OK;
|
||||||
|
@ -905,9 +871,9 @@ extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* gl
|
||||||
if (err != ZIP_OK)
|
if (err != ZIP_OK)
|
||||||
{
|
{
|
||||||
# ifndef NO_ADDFILEINEXISTINGZIP
|
# ifndef NO_ADDFILEINEXISTINGZIP
|
||||||
TRYFREE(ziinit.globalcomment);
|
free(ziinit.globalcomment);
|
||||||
# endif /* !NO_ADDFILEINEXISTINGZIP*/
|
# endif /* !NO_ADDFILEINEXISTINGZIP*/
|
||||||
TRYFREE(zi);
|
free(zi);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -917,8 +883,7 @@ extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* gl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)
|
extern zipFile ZEXPORT zipOpen2(const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def) {
|
||||||
{
|
|
||||||
if (pzlib_filefunc32_def != NULL)
|
if (pzlib_filefunc32_def != NULL)
|
||||||
{
|
{
|
||||||
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
||||||
|
@ -929,8 +894,7 @@ extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* gl
|
||||||
return zipOpen3(pathname, append, globalcomment, NULL);
|
return zipOpen3(pathname, append, globalcomment, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)
|
extern zipFile ZEXPORT zipOpen2_64(const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def) {
|
||||||
{
|
|
||||||
if (pzlib_filefunc_def != NULL)
|
if (pzlib_filefunc_def != NULL)
|
||||||
{
|
{
|
||||||
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
|
||||||
|
@ -945,18 +909,15 @@ extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen (const char* pathname, int append)
|
extern zipFile ZEXPORT zipOpen(const char* pathname, int append) {
|
||||||
{
|
|
||||||
return zipOpen3((const void*)pathname,append,NULL,NULL);
|
return zipOpen3((const void*)pathname,append,NULL,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
|
extern zipFile ZEXPORT zipOpen64(const void* pathname, int append) {
|
||||||
{
|
|
||||||
return zipOpen3(pathname,append,NULL,NULL);
|
return zipOpen3(pathname,append,NULL,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
|
local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) {
|
||||||
{
|
|
||||||
/* write the local header */
|
/* write the local header */
|
||||||
int err;
|
int err;
|
||||||
uInt size_filename = (uInt)strlen(filename);
|
uInt size_filename = (uInt)strlen(filename);
|
||||||
|
@ -1034,8 +995,8 @@ int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_ex
|
||||||
// Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
|
// Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
|
||||||
zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
|
zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
|
||||||
|
|
||||||
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
|
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2);
|
||||||
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
|
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2);
|
||||||
|
|
||||||
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
|
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
|
||||||
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
|
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
|
||||||
|
@ -1058,8 +1019,7 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
|
||||||
const char* comment, int method, int level, int raw,
|
const char* comment, int method, int level, int raw,
|
||||||
int windowBits,int memLevel, int strategy,
|
int windowBits,int memLevel, int strategy,
|
||||||
const char* password, uLong crcForCrypting,
|
const char* password, uLong crcForCrypting,
|
||||||
uLong versionMadeBy, uLong flagBase, int zip64)
|
uLong versionMadeBy, uLong flagBase, int zip64) {
|
||||||
{
|
|
||||||
zip64_internal* zi;
|
zip64_internal* zi;
|
||||||
uInt size_filename;
|
uInt size_filename;
|
||||||
uInt size_comment;
|
uInt size_comment;
|
||||||
|
@ -1083,6 +1043,17 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
|
||||||
return ZIP_PARAMERROR;
|
return ZIP_PARAMERROR;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// The filename and comment length must fit in 16 bits.
|
||||||
|
if ((filename!=NULL) && (strlen(filename)>0xffff))
|
||||||
|
return ZIP_PARAMERROR;
|
||||||
|
if ((comment!=NULL) && (strlen(comment)>0xffff))
|
||||||
|
return ZIP_PARAMERROR;
|
||||||
|
// The extra field length must fit in 16 bits. If the member also requires
|
||||||
|
// a Zip64 extra block, that will also need to fit within that 16-bit
|
||||||
|
// length, but that will be checked for later.
|
||||||
|
if ((size_extrafield_local>0xffff) || (size_extrafield_global>0xffff))
|
||||||
|
return ZIP_PARAMERROR;
|
||||||
|
|
||||||
zi = (zip64_internal*)file;
|
zi = (zip64_internal*)file;
|
||||||
|
|
||||||
if (zi->in_opened_file_inzip == 1)
|
if (zi->in_opened_file_inzip == 1)
|
||||||
|
@ -1268,8 +1239,7 @@ extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, con
|
||||||
const char* comment, int method, int level, int raw,
|
const char* comment, int method, int level, int raw,
|
||||||
int windowBits,int memLevel, int strategy,
|
int windowBits,int memLevel, int strategy,
|
||||||
const char* password, uLong crcForCrypting,
|
const char* password, uLong crcForCrypting,
|
||||||
uLong versionMadeBy, uLong flagBase)
|
uLong versionMadeBy, uLong flagBase) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1283,8 +1253,7 @@ extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, con
|
||||||
const void* extrafield_global, uInt size_extrafield_global,
|
const void* extrafield_global, uInt size_extrafield_global,
|
||||||
const char* comment, int method, int level, int raw,
|
const char* comment, int method, int level, int raw,
|
||||||
int windowBits,int memLevel, int strategy,
|
int windowBits,int memLevel, int strategy,
|
||||||
const char* password, uLong crcForCrypting)
|
const char* password, uLong crcForCrypting) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1298,8 +1267,7 @@ extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, c
|
||||||
const void* extrafield_global, uInt size_extrafield_global,
|
const void* extrafield_global, uInt size_extrafield_global,
|
||||||
const char* comment, int method, int level, int raw,
|
const char* comment, int method, int level, int raw,
|
||||||
int windowBits,int memLevel, int strategy,
|
int windowBits,int memLevel, int strategy,
|
||||||
const char* password, uLong crcForCrypting, int zip64)
|
const char* password, uLong crcForCrypting, int zip64) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1311,8 +1279,7 @@ extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, c
|
||||||
extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local, uInt size_extrafield_local,
|
const void* extrafield_local, uInt size_extrafield_local,
|
||||||
const void* extrafield_global, uInt size_extrafield_global,
|
const void* extrafield_global, uInt size_extrafield_global,
|
||||||
const char* comment, int method, int level, int raw)
|
const char* comment, int method, int level, int raw) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1324,8 +1291,7 @@ extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, cons
|
||||||
extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local, uInt size_extrafield_local,
|
const void* extrafield_local, uInt size_extrafield_local,
|
||||||
const void* extrafield_global, uInt size_extrafield_global,
|
const void* extrafield_global, uInt size_extrafield_global,
|
||||||
const char* comment, int method, int level, int raw, int zip64)
|
const char* comment, int method, int level, int raw, int zip64) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1337,8 +1303,7 @@ extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, c
|
||||||
extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local, uInt size_extrafield_local,
|
const void* extrafield_local, uInt size_extrafield_local,
|
||||||
const void*extrafield_global, uInt size_extrafield_global,
|
const void*extrafield_global, uInt size_extrafield_global,
|
||||||
const char* comment, int method, int level, int zip64)
|
const char* comment, int method, int level, int zip64) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1350,8 +1315,7 @@ extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, co
|
||||||
extern int ZEXPORT zipOpenNewFileInZip(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
extern int ZEXPORT zipOpenNewFileInZip(zipFile file, const char* filename, const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local, uInt size_extrafield_local,
|
const void* extrafield_local, uInt size_extrafield_local,
|
||||||
const void*extrafield_global, uInt size_extrafield_global,
|
const void*extrafield_global, uInt size_extrafield_global,
|
||||||
const char* comment, int method, int level)
|
const char* comment, int method, int level) {
|
||||||
{
|
|
||||||
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
return zipOpenNewFileInZip4_64(file, filename, zipfi,
|
||||||
extrafield_local, size_extrafield_local,
|
extrafield_local, size_extrafield_local,
|
||||||
extrafield_global, size_extrafield_global,
|
extrafield_global, size_extrafield_global,
|
||||||
|
@ -1360,8 +1324,7 @@ extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, cons
|
||||||
NULL, 0, VERSIONMADEBY, 0, 0);
|
NULL, 0, VERSIONMADEBY, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
local int zip64FlushWriteBuffer(zip64_internal* zi)
|
local int zip64FlushWriteBuffer(zip64_internal* zi) {
|
||||||
{
|
|
||||||
int err=ZIP_OK;
|
int err=ZIP_OK;
|
||||||
|
|
||||||
if (zi->ci.encrypt != 0)
|
if (zi->ci.encrypt != 0)
|
||||||
|
@ -1399,8 +1362,7 @@ local int zip64FlushWriteBuffer(zip64_internal* zi)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)
|
extern int ZEXPORT zipWriteInFileInZip(zipFile file, const void* buf, unsigned int len) {
|
||||||
{
|
|
||||||
zip64_internal* zi;
|
zip64_internal* zi;
|
||||||
int err=ZIP_OK;
|
int err=ZIP_OK;
|
||||||
|
|
||||||
|
@ -1450,7 +1412,7 @@ extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned in
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
zi->ci.stream.next_in = (Bytef*)buf;
|
zi->ci.stream.next_in = (Bytef*)(uintptr_t)buf;
|
||||||
zi->ci.stream.avail_in = len;
|
zi->ci.stream.avail_in = len;
|
||||||
|
|
||||||
while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
|
while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
|
||||||
|
@ -1471,11 +1433,6 @@ extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned in
|
||||||
{
|
{
|
||||||
uLong uTotalOutBefore = zi->ci.stream.total_out;
|
uLong uTotalOutBefore = zi->ci.stream.total_out;
|
||||||
err=deflate(&zi->ci.stream, Z_NO_FLUSH);
|
err=deflate(&zi->ci.stream, Z_NO_FLUSH);
|
||||||
if(uTotalOutBefore > zi->ci.stream.total_out)
|
|
||||||
{
|
|
||||||
int bBreak = 0;
|
|
||||||
bBreak++;
|
|
||||||
}
|
|
||||||
|
|
||||||
zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
|
zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
|
||||||
}
|
}
|
||||||
|
@ -1506,17 +1463,15 @@ extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned in
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32)
|
extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, uLong uncompressed_size, uLong crc32) {
|
||||||
{
|
|
||||||
return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);
|
return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
|
extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, ZPOS64_T uncompressed_size, uLong crc32) {
|
||||||
{
|
|
||||||
zip64_internal* zi;
|
zip64_internal* zi;
|
||||||
ZPOS64_T compressed_size;
|
ZPOS64_T compressed_size;
|
||||||
uLong invalidValue = 0xffffffff;
|
uLong invalidValue = 0xffffffff;
|
||||||
short datasize = 0;
|
unsigned datasize = 0;
|
||||||
int err=ZIP_OK;
|
int err=ZIP_OK;
|
||||||
|
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
|
@ -1747,13 +1702,11 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT zipCloseFileInZip (zipFile file)
|
extern int ZEXPORT zipCloseFileInZip(zipFile file) {
|
||||||
{
|
|
||||||
return zipCloseFileInZipRaw (file,0,0);
|
return zipCloseFileInZipRaw (file,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
|
local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) {
|
||||||
{
|
|
||||||
int err = ZIP_OK;
|
int err = ZIP_OK;
|
||||||
ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
|
ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
|
||||||
|
|
||||||
|
@ -1774,8 +1727,7 @@ int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eo
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
|
local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) {
|
||||||
{
|
|
||||||
int err = ZIP_OK;
|
int err = ZIP_OK;
|
||||||
|
|
||||||
uLong Zip64DataSize = 44;
|
uLong Zip64DataSize = 44;
|
||||||
|
@ -1813,8 +1765,8 @@ int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centra
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
|
|
||||||
{
|
local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) {
|
||||||
int err = ZIP_OK;
|
int err = ZIP_OK;
|
||||||
|
|
||||||
/*signature*/
|
/*signature*/
|
||||||
|
@ -1861,8 +1813,7 @@ int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
|
local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) {
|
||||||
{
|
|
||||||
int err = ZIP_OK;
|
int err = ZIP_OK;
|
||||||
uInt size_global_comment = 0;
|
uInt size_global_comment = 0;
|
||||||
|
|
||||||
|
@ -1879,8 +1830,7 @@ int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
|
extern int ZEXPORT zipClose(zipFile file, const char* global_comment) {
|
||||||
{
|
|
||||||
zip64_internal* zi;
|
zip64_internal* zi;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
uLong size_centraldir = 0;
|
uLong size_centraldir = 0;
|
||||||
|
@ -1922,7 +1872,7 @@ extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
|
||||||
free_linkedlist(&(zi->central_dir));
|
free_linkedlist(&(zi->central_dir));
|
||||||
|
|
||||||
pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
|
pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
|
||||||
if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
|
if(pos >= 0xffffffff || zi->number_entry >= 0xFFFF)
|
||||||
{
|
{
|
||||||
ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
|
ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
|
||||||
Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
|
Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
|
||||||
|
@ -1941,15 +1891,14 @@ extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
|
||||||
err = ZIP_ERRNO;
|
err = ZIP_ERRNO;
|
||||||
|
|
||||||
#ifndef NO_ADDFILEINEXISTINGZIP
|
#ifndef NO_ADDFILEINEXISTINGZIP
|
||||||
TRYFREE(zi->globalcomment);
|
free(zi->globalcomment);
|
||||||
#endif
|
#endif
|
||||||
TRYFREE(zi);
|
free(zi);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)
|
extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader) {
|
||||||
{
|
|
||||||
char* p = pData;
|
char* p = pData;
|
||||||
int size = 0;
|
int size = 0;
|
||||||
char* pNewHeader;
|
char* pNewHeader;
|
||||||
|
@ -1959,10 +1908,10 @@ extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHe
|
||||||
|
|
||||||
int retVal = ZIP_OK;
|
int retVal = ZIP_OK;
|
||||||
|
|
||||||
if(pData == NULL || *dataLen < 4)
|
if(pData == NULL || dataLen == NULL || *dataLen < 4)
|
||||||
return ZIP_PARAMERROR;
|
return ZIP_PARAMERROR;
|
||||||
|
|
||||||
pNewHeader = (char*)ALLOC(*dataLen);
|
pNewHeader = (char*)ALLOC((unsigned)*dataLen);
|
||||||
pTmp = pNewHeader;
|
pTmp = pNewHeader;
|
||||||
|
|
||||||
while(p < (pData + *dataLen))
|
while(p < (pData + *dataLen))
|
||||||
|
@ -2001,7 +1950,7 @@ extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHe
|
||||||
else
|
else
|
||||||
retVal = ZIP_ERRNO;
|
retVal = ZIP_ERRNO;
|
||||||
|
|
||||||
TRYFREE(pNewHeader);
|
free(pNewHeader);
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,12 +88,12 @@ typedef voidp zipFile;
|
||||||
/* tm_zip contain date/time info */
|
/* tm_zip contain date/time info */
|
||||||
typedef struct tm_zip_s
|
typedef struct tm_zip_s
|
||||||
{
|
{
|
||||||
uInt tm_sec; /* seconds after the minute - [0,59] */
|
int tm_sec; /* seconds after the minute - [0,59] */
|
||||||
uInt tm_min; /* minutes after the hour - [0,59] */
|
int tm_min; /* minutes after the hour - [0,59] */
|
||||||
uInt tm_hour; /* hours since midnight - [0,23] */
|
int tm_hour; /* hours since midnight - [0,23] */
|
||||||
uInt tm_mday; /* day of the month - [1,31] */
|
int tm_mday; /* day of the month - [1,31] */
|
||||||
uInt tm_mon; /* months since January - [0,11] */
|
int tm_mon; /* months since January - [0,11] */
|
||||||
uInt tm_year; /* years - [1980..2044] */
|
int tm_year; /* years - [1980..2044] */
|
||||||
} tm_zip;
|
} tm_zip;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -113,8 +113,8 @@ typedef const char* zipcharpc;
|
||||||
#define APPEND_STATUS_CREATEAFTER (1)
|
#define APPEND_STATUS_CREATEAFTER (1)
|
||||||
#define APPEND_STATUS_ADDINZIP (2)
|
#define APPEND_STATUS_ADDINZIP (2)
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
|
extern zipFile ZEXPORT zipOpen(const char *pathname, int append);
|
||||||
extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
|
extern zipFile ZEXPORT zipOpen64(const void *pathname, int append);
|
||||||
/*
|
/*
|
||||||
Create a zipfile.
|
Create a zipfile.
|
||||||
pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
|
pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
|
||||||
|
@ -131,20 +131,25 @@ extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
|
||||||
|
|
||||||
/* Note : there is no delete function into a zipfile.
|
/* Note : there is no delete function into a zipfile.
|
||||||
If you want delete file into a zipfile, you must open a zipfile, and create another
|
If you want delete file into a zipfile, you must open a zipfile, and create another
|
||||||
Of couse, you can use RAW reading and writing to copy the file you did not want delte
|
Of course, you can use RAW reading and writing to copy the file you did not want delete
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
|
extern zipFile ZEXPORT zipOpen2(const char *pathname,
|
||||||
int append,
|
int append,
|
||||||
zipcharpc* globalcomment,
|
zipcharpc* globalcomment,
|
||||||
zlib_filefunc_def* pzlib_filefunc_def));
|
zlib_filefunc_def* pzlib_filefunc_def);
|
||||||
|
|
||||||
extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
|
extern zipFile ZEXPORT zipOpen2_64(const void *pathname,
|
||||||
int append,
|
int append,
|
||||||
zipcharpc* globalcomment,
|
zipcharpc* globalcomment,
|
||||||
zlib_filefunc64_def* pzlib_filefunc_def));
|
zlib_filefunc64_def* pzlib_filefunc_def);
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
|
extern zipFile ZEXPORT zipOpen3(const void *pathname,
|
||||||
|
int append,
|
||||||
|
zipcharpc* globalcomment,
|
||||||
|
zlib_filefunc64_32_def* pzlib_filefunc64_32_def);
|
||||||
|
|
||||||
|
extern int ZEXPORT zipOpenNewFileInZip(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -153,9 +158,9 @@ extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
|
||||||
uInt size_extrafield_global,
|
uInt size_extrafield_global,
|
||||||
const char* comment,
|
const char* comment,
|
||||||
int method,
|
int method,
|
||||||
int level));
|
int level);
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip64(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -165,16 +170,16 @@ extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
|
||||||
const char* comment,
|
const char* comment,
|
||||||
int method,
|
int method,
|
||||||
int level,
|
int level,
|
||||||
int zip64));
|
int zip64);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Open a file in the ZIP for writing.
|
Open a file in the ZIP for writing.
|
||||||
filename : the filename in zip (if NULL, '-' without quote will be used
|
filename : the filename in zip (if NULL, '-' without quote will be used
|
||||||
*zipfi contain supplemental information
|
*zipfi contain supplemental information
|
||||||
if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
|
if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
|
||||||
contains the extrafield data the the local header
|
contains the extrafield data for the local header
|
||||||
if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
|
if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
|
||||||
contains the extrafield data the the local header
|
contains the extrafield data for the global header
|
||||||
if comment != NULL, comment contain the comment string
|
if comment != NULL, comment contain the comment string
|
||||||
method contain the compression method (0 for store, Z_DEFLATED for deflate)
|
method contain the compression method (0 for store, Z_DEFLATED for deflate)
|
||||||
level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
|
level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
|
||||||
|
@ -184,7 +189,7 @@ extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip2(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -194,10 +199,10 @@ extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
|
||||||
const char* comment,
|
const char* comment,
|
||||||
int method,
|
int method,
|
||||||
int level,
|
int level,
|
||||||
int raw));
|
int raw);
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -208,12 +213,12 @@ extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
|
||||||
int method,
|
int method,
|
||||||
int level,
|
int level,
|
||||||
int raw,
|
int raw,
|
||||||
int zip64));
|
int zip64);
|
||||||
/*
|
/*
|
||||||
Same than zipOpenNewFileInZip, except if raw=1, we write raw file
|
Same than zipOpenNewFileInZip, except if raw=1, we write raw file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip3(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -228,9 +233,9 @@ extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
|
||||||
int memLevel,
|
int memLevel,
|
||||||
int strategy,
|
int strategy,
|
||||||
const char* password,
|
const char* password,
|
||||||
uLong crcForCrypting));
|
uLong crcForCrypting);
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -246,8 +251,7 @@ extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
|
||||||
int strategy,
|
int strategy,
|
||||||
const char* password,
|
const char* password,
|
||||||
uLong crcForCrypting,
|
uLong crcForCrypting,
|
||||||
int zip64
|
int zip64);
|
||||||
));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Same than zipOpenNewFileInZip2, except
|
Same than zipOpenNewFileInZip2, except
|
||||||
|
@ -256,7 +260,7 @@ extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
|
||||||
crcForCrypting : crc of file to compress (needed for crypting)
|
crcForCrypting : crc of file to compress (needed for crypting)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip4(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -273,11 +277,10 @@ extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
|
||||||
const char* password,
|
const char* password,
|
||||||
uLong crcForCrypting,
|
uLong crcForCrypting,
|
||||||
uLong versionMadeBy,
|
uLong versionMadeBy,
|
||||||
uLong flagBase
|
uLong flagBase);
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
|
extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file,
|
||||||
const char* filename,
|
const char* filename,
|
||||||
const zip_fileinfo* zipfi,
|
const zip_fileinfo* zipfi,
|
||||||
const void* extrafield_local,
|
const void* extrafield_local,
|
||||||
|
@ -295,8 +298,7 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
|
||||||
uLong crcForCrypting,
|
uLong crcForCrypting,
|
||||||
uLong versionMadeBy,
|
uLong versionMadeBy,
|
||||||
uLong flagBase,
|
uLong flagBase,
|
||||||
int zip64
|
int zip64);
|
||||||
));
|
|
||||||
/*
|
/*
|
||||||
Same than zipOpenNewFileInZip4, except
|
Same than zipOpenNewFileInZip4, except
|
||||||
versionMadeBy : value for Version made by field
|
versionMadeBy : value for Version made by field
|
||||||
|
@ -304,25 +306,25 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
|
extern int ZEXPORT zipWriteInFileInZip(zipFile file,
|
||||||
const void* buf,
|
const void* buf,
|
||||||
unsigned len));
|
unsigned len);
|
||||||
/*
|
/*
|
||||||
Write data in the zipfile
|
Write data in the zipfile
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
|
extern int ZEXPORT zipCloseFileInZip(zipFile file);
|
||||||
/*
|
/*
|
||||||
Close the current file in the zipfile
|
Close the current file in the zipfile
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
|
extern int ZEXPORT zipCloseFileInZipRaw(zipFile file,
|
||||||
uLong uncompressed_size,
|
uLong uncompressed_size,
|
||||||
uLong crc32));
|
uLong crc32);
|
||||||
|
|
||||||
extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
|
extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file,
|
||||||
ZPOS64_T uncompressed_size,
|
ZPOS64_T uncompressed_size,
|
||||||
uLong crc32));
|
uLong crc32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Close the current file in the zipfile, for file opened with
|
Close the current file in the zipfile, for file opened with
|
||||||
|
@ -330,14 +332,14 @@ extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
|
||||||
uncompressed_size and crc32 are value for the uncompressed size
|
uncompressed_size and crc32 are value for the uncompressed size
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int ZEXPORT zipClose OF((zipFile file,
|
extern int ZEXPORT zipClose(zipFile file,
|
||||||
const char* global_comment));
|
const char* global_comment);
|
||||||
/*
|
/*
|
||||||
Close the zipfile
|
Close the zipfile
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
|
extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader);
|
||||||
/*
|
/*
|
||||||
zipRemoveExtraInfoBlock - Added by Mathias Svensson
|
zipRemoveExtraInfoBlock - Added by Mathias Svensson
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
||||||
/* deflate.h -- internal compression state
|
/* deflate.h -- internal compression state
|
||||||
* Copyright (C) 1995-2016 Jean-loup Gailly
|
* Copyright (C) 1995-2024 Jean-loup Gailly
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -23,6 +23,10 @@
|
||||||
# define GZIP
|
# define GZIP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at
|
||||||
|
the cost of a larger memory footprint */
|
||||||
|
/* #define LIT_MEM */
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Internal compression state.
|
* Internal compression state.
|
||||||
*/
|
*/
|
||||||
|
@ -217,7 +221,14 @@ typedef struct internal_state {
|
||||||
/* Depth of each subtree used as tie breaker for trees of equal frequency
|
/* Depth of each subtree used as tie breaker for trees of equal frequency
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uchf *l_buf; /* buffer for literals or lengths */
|
#ifdef LIT_MEM
|
||||||
|
# define LIT_BUFS 5
|
||||||
|
ushf *d_buf; /* buffer for distances */
|
||||||
|
uchf *l_buf; /* buffer for literals/lengths */
|
||||||
|
#else
|
||||||
|
# define LIT_BUFS 4
|
||||||
|
uchf *sym_buf; /* buffer for distances and literals/lengths */
|
||||||
|
#endif
|
||||||
|
|
||||||
uInt lit_bufsize;
|
uInt lit_bufsize;
|
||||||
/* Size of match buffer for literals/lengths. There are 4 reasons for
|
/* Size of match buffer for literals/lengths. There are 4 reasons for
|
||||||
|
@ -239,13 +250,8 @@ typedef struct internal_state {
|
||||||
* - I can't count above 4
|
* - I can't count above 4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uInt last_lit; /* running index in l_buf */
|
uInt sym_next; /* running index in symbol buffer */
|
||||||
|
uInt sym_end; /* symbol table full when sym_next reaches this */
|
||||||
ushf *d_buf;
|
|
||||||
/* Buffer for distances. To simplify the code, d_buf and l_buf have
|
|
||||||
* the same number of elements. To use different lengths, an extra flag
|
|
||||||
* array would be necessary.
|
|
||||||
*/
|
|
||||||
|
|
||||||
ulg opt_len; /* bit length of current block with optimal trees */
|
ulg opt_len; /* bit length of current block with optimal trees */
|
||||||
ulg static_len; /* bit length of current block with static trees */
|
ulg static_len; /* bit length of current block with static trees */
|
||||||
|
@ -296,14 +302,14 @@ typedef struct internal_state {
|
||||||
memory checker errors from longest match routines */
|
memory checker errors from longest match routines */
|
||||||
|
|
||||||
/* in trees.c */
|
/* in trees.c */
|
||||||
void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
|
void ZLIB_INTERNAL _tr_init(deflate_state *s);
|
||||||
int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
|
int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc);
|
||||||
void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
|
void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf,
|
||||||
ulg stored_len, int last));
|
ulg stored_len, int last);
|
||||||
void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
|
void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s);
|
||||||
void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
|
void ZLIB_INTERNAL _tr_align(deflate_state *s);
|
||||||
void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
|
void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf,
|
||||||
ulg stored_len, int last));
|
ulg stored_len, int last);
|
||||||
|
|
||||||
#define d_code(dist) \
|
#define d_code(dist) \
|
||||||
((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
|
((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
|
||||||
|
@ -323,24 +329,46 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
|
||||||
extern const uch ZLIB_INTERNAL _dist_code[];
|
extern const uch ZLIB_INTERNAL _dist_code[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef LIT_MEM
|
||||||
# define _tr_tally_lit(s, c, flush) \
|
# define _tr_tally_lit(s, c, flush) \
|
||||||
{ uch cc = (c); \
|
{ uch cc = (c); \
|
||||||
s->d_buf[s->last_lit] = 0; \
|
s->d_buf[s->sym_next] = 0; \
|
||||||
s->l_buf[s->last_lit++] = cc; \
|
s->l_buf[s->sym_next++] = cc; \
|
||||||
s->dyn_ltree[cc].Freq++; \
|
s->dyn_ltree[cc].Freq++; \
|
||||||
flush = (s->last_lit == s->lit_bufsize-1); \
|
flush = (s->sym_next == s->sym_end); \
|
||||||
}
|
}
|
||||||
# define _tr_tally_dist(s, distance, length, flush) \
|
# define _tr_tally_dist(s, distance, length, flush) \
|
||||||
{ uch len = (uch)(length); \
|
{ uch len = (uch)(length); \
|
||||||
ush dist = (ush)(distance); \
|
ush dist = (ush)(distance); \
|
||||||
s->d_buf[s->last_lit] = dist; \
|
s->d_buf[s->sym_next] = dist; \
|
||||||
s->l_buf[s->last_lit++] = len; \
|
s->l_buf[s->sym_next++] = len; \
|
||||||
dist--; \
|
dist--; \
|
||||||
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
|
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
|
||||||
s->dyn_dtree[d_code(dist)].Freq++; \
|
s->dyn_dtree[d_code(dist)].Freq++; \
|
||||||
flush = (s->last_lit == s->lit_bufsize-1); \
|
flush = (s->sym_next == s->sym_end); \
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
# define _tr_tally_lit(s, c, flush) \
|
||||||
|
{ uch cc = (c); \
|
||||||
|
s->sym_buf[s->sym_next++] = 0; \
|
||||||
|
s->sym_buf[s->sym_next++] = 0; \
|
||||||
|
s->sym_buf[s->sym_next++] = cc; \
|
||||||
|
s->dyn_ltree[cc].Freq++; \
|
||||||
|
flush = (s->sym_next == s->sym_end); \
|
||||||
|
}
|
||||||
|
# define _tr_tally_dist(s, distance, length, flush) \
|
||||||
|
{ uch len = (uch)(length); \
|
||||||
|
ush dist = (ush)(distance); \
|
||||||
|
s->sym_buf[s->sym_next++] = (uch)dist; \
|
||||||
|
s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \
|
||||||
|
s->sym_buf[s->sym_next++] = len; \
|
||||||
|
dist--; \
|
||||||
|
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
|
||||||
|
s->dyn_dtree[d_code(dist)].Freq++; \
|
||||||
|
flush = (s->sym_next == s->sym_end); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
|
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
|
||||||
# define _tr_tally_dist(s, distance, length, flush) \
|
# define _tr_tally_dist(s, distance, length, flush) \
|
||||||
flush = _tr_tally(s, distance, length)
|
flush = _tr_tally(s, distance, length)
|
||||||
|
|
|
@ -8,9 +8,7 @@
|
||||||
/* gzclose() is in a separate file so that it is linked in only if it is used.
|
/* gzclose() is in a separate file so that it is linked in only if it is used.
|
||||||
That way the other gzclose functions can be used instead to avoid linking in
|
That way the other gzclose functions can be used instead to avoid linking in
|
||||||
unneeded compression or decompression routines. */
|
unneeded compression or decompression routines. */
|
||||||
int ZEXPORT gzclose(file)
|
int ZEXPORT gzclose(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
#ifndef NO_GZCOMPRESS
|
#ifndef NO_GZCOMPRESS
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* gzguts.h -- zlib internal header definitions for gz* operations
|
/* gzguts.h -- zlib internal header definitions for gz* operations
|
||||||
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
|
* Copyright (C) 2004-2024 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -7,9 +7,8 @@
|
||||||
# ifndef _LARGEFILE_SOURCE
|
# ifndef _LARGEFILE_SOURCE
|
||||||
# define _LARGEFILE_SOURCE 1
|
# define _LARGEFILE_SOURCE 1
|
||||||
# endif
|
# endif
|
||||||
# ifdef _FILE_OFFSET_BITS
|
|
||||||
# undef _FILE_OFFSET_BITS
|
# undef _FILE_OFFSET_BITS
|
||||||
# endif
|
# undef _TIME_BITS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_HIDDEN
|
#ifdef HAVE_HIDDEN
|
||||||
|
@ -39,7 +38,7 @@
|
||||||
# include <io.h>
|
# include <io.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
#if defined(_WIN32)
|
||||||
# define WIDECHAR
|
# define WIDECHAR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -119,8 +118,8 @@
|
||||||
|
|
||||||
/* gz* functions always use library allocation functions */
|
/* gz* functions always use library allocation functions */
|
||||||
#ifndef STDC
|
#ifndef STDC
|
||||||
extern voidp malloc OF((uInt size));
|
extern voidp malloc(uInt size);
|
||||||
extern void free OF((voidpf ptr));
|
extern void free(voidpf ptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* get errno and strerror definition */
|
/* get errno and strerror definition */
|
||||||
|
@ -138,10 +137,10 @@
|
||||||
|
|
||||||
/* provide prototypes for these when building zlib without LFS */
|
/* provide prototypes for these when building zlib without LFS */
|
||||||
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
|
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
|
||||||
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
|
ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *);
|
||||||
ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
|
ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int);
|
||||||
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
|
ZEXTERN z_off64_t ZEXPORT gztell64(gzFile);
|
||||||
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
|
ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* default memLevel */
|
/* default memLevel */
|
||||||
|
@ -190,6 +189,7 @@ typedef struct {
|
||||||
/* just for writing */
|
/* just for writing */
|
||||||
int level; /* compression level */
|
int level; /* compression level */
|
||||||
int strategy; /* compression strategy */
|
int strategy; /* compression strategy */
|
||||||
|
int reset; /* true if a reset is pending after a Z_FINISH */
|
||||||
/* seek request */
|
/* seek request */
|
||||||
z_off64_t skip; /* amount to skip (already rewound if backwards) */
|
z_off64_t skip; /* amount to skip (already rewound if backwards) */
|
||||||
int seek; /* true if seek request pending */
|
int seek; /* true if seek request pending */
|
||||||
|
@ -202,17 +202,13 @@ typedef struct {
|
||||||
typedef gz_state FAR *gz_statep;
|
typedef gz_state FAR *gz_statep;
|
||||||
|
|
||||||
/* shared functions */
|
/* shared functions */
|
||||||
void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
|
void ZLIB_INTERNAL gz_error(gz_statep, int, const char *);
|
||||||
#if defined UNDER_CE
|
#if defined UNDER_CE
|
||||||
char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
|
char ZLIB_INTERNAL *gz_strwinerror(DWORD error);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
|
/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
|
||||||
value -- needed when comparing unsigned to z_off64_t, which is signed
|
value -- needed when comparing unsigned to z_off64_t, which is signed
|
||||||
(possible z_off64_t types off_t, off64_t, and long are all signed) */
|
(possible z_off64_t types off_t, off64_t, and long are all signed) */
|
||||||
#ifdef INT_MAX
|
unsigned ZLIB_INTERNAL gz_intmax(void);
|
||||||
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
|
|
||||||
#else
|
|
||||||
unsigned ZLIB_INTERNAL gz_intmax OF((void));
|
|
||||||
#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
|
#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
/* gzlib.c -- zlib functions common to reading and writing gzip files
|
/* gzlib.c -- zlib functions common to reading and writing gzip files
|
||||||
* Copyright (C) 2004-2017 Mark Adler
|
* Copyright (C) 2004-2024 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gzguts.h"
|
#include "gzguts.h"
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
|
#if defined(_WIN32) && !defined(__BORLANDC__)
|
||||||
# define LSEEK _lseeki64
|
# define LSEEK _lseeki64
|
||||||
#else
|
#else
|
||||||
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
||||||
|
@ -15,10 +15,6 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Local functions */
|
|
||||||
local void gz_reset OF((gz_statep));
|
|
||||||
local gzFile gz_open OF((const void *, int, const char *));
|
|
||||||
|
|
||||||
#if defined UNDER_CE
|
#if defined UNDER_CE
|
||||||
|
|
||||||
/* Map the Windows error number in ERROR to a locale-dependent error message
|
/* Map the Windows error number in ERROR to a locale-dependent error message
|
||||||
|
@ -30,9 +26,7 @@ local gzFile gz_open OF((const void *, int, const char *));
|
||||||
|
|
||||||
The gz_strwinerror function does not change the current setting of
|
The gz_strwinerror function does not change the current setting of
|
||||||
GetLastError. */
|
GetLastError. */
|
||||||
char ZLIB_INTERNAL *gz_strwinerror (error)
|
char ZLIB_INTERNAL *gz_strwinerror(DWORD error) {
|
||||||
DWORD error;
|
|
||||||
{
|
|
||||||
static char buf[1024];
|
static char buf[1024];
|
||||||
|
|
||||||
wchar_t *msgbuf;
|
wchar_t *msgbuf;
|
||||||
|
@ -72,15 +66,15 @@ char ZLIB_INTERNAL *gz_strwinerror (error)
|
||||||
#endif /* UNDER_CE */
|
#endif /* UNDER_CE */
|
||||||
|
|
||||||
/* Reset gzip file state */
|
/* Reset gzip file state */
|
||||||
local void gz_reset(state)
|
local void gz_reset(gz_statep state) {
|
||||||
gz_statep state;
|
|
||||||
{
|
|
||||||
state->x.have = 0; /* no output data available */
|
state->x.have = 0; /* no output data available */
|
||||||
if (state->mode == GZ_READ) { /* for reading ... */
|
if (state->mode == GZ_READ) { /* for reading ... */
|
||||||
state->eof = 0; /* not at end of file */
|
state->eof = 0; /* not at end of file */
|
||||||
state->past = 0; /* have not read past end yet */
|
state->past = 0; /* have not read past end yet */
|
||||||
state->how = LOOK; /* look for gzip header */
|
state->how = LOOK; /* look for gzip header */
|
||||||
}
|
}
|
||||||
|
else /* for writing ... */
|
||||||
|
state->reset = 0; /* no deflateReset pending */
|
||||||
state->seek = 0; /* no seek request pending */
|
state->seek = 0; /* no seek request pending */
|
||||||
gz_error(state, Z_OK, NULL); /* clear error */
|
gz_error(state, Z_OK, NULL); /* clear error */
|
||||||
state->x.pos = 0; /* no uncompressed data yet */
|
state->x.pos = 0; /* no uncompressed data yet */
|
||||||
|
@ -88,11 +82,7 @@ local void gz_reset(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open a gzip file either by name or file descriptor. */
|
/* Open a gzip file either by name or file descriptor. */
|
||||||
local gzFile gz_open(path, fd, mode)
|
local gzFile gz_open(const void *path, int fd, const char *mode) {
|
||||||
const void *path;
|
|
||||||
int fd;
|
|
||||||
const char *mode;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
z_size_t len;
|
z_size_t len;
|
||||||
int oflag;
|
int oflag;
|
||||||
|
@ -267,26 +257,17 @@ local gzFile gz_open(path, fd, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
gzFile ZEXPORT gzopen(path, mode)
|
gzFile ZEXPORT gzopen(const char *path, const char *mode) {
|
||||||
const char *path;
|
|
||||||
const char *mode;
|
|
||||||
{
|
|
||||||
return gz_open(path, -1, mode);
|
return gz_open(path, -1, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
gzFile ZEXPORT gzopen64(path, mode)
|
gzFile ZEXPORT gzopen64(const char *path, const char *mode) {
|
||||||
const char *path;
|
|
||||||
const char *mode;
|
|
||||||
{
|
|
||||||
return gz_open(path, -1, mode);
|
return gz_open(path, -1, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
gzFile ZEXPORT gzdopen(fd, mode)
|
gzFile ZEXPORT gzdopen(int fd, const char *mode) {
|
||||||
int fd;
|
|
||||||
const char *mode;
|
|
||||||
{
|
|
||||||
char *path; /* identifier for error messages */
|
char *path; /* identifier for error messages */
|
||||||
gzFile gz;
|
gzFile gz;
|
||||||
|
|
||||||
|
@ -304,19 +285,13 @@ gzFile ZEXPORT gzdopen(fd, mode)
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
#ifdef WIDECHAR
|
#ifdef WIDECHAR
|
||||||
gzFile ZEXPORT gzopen_w(path, mode)
|
gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode) {
|
||||||
const wchar_t *path;
|
|
||||||
const char *mode;
|
|
||||||
{
|
|
||||||
return gz_open(path, -2, mode);
|
return gz_open(path, -2, mode);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzbuffer(file, size)
|
int ZEXPORT gzbuffer(gzFile file, unsigned size) {
|
||||||
gzFile file;
|
|
||||||
unsigned size;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure and check integrity */
|
/* get internal structure and check integrity */
|
||||||
|
@ -333,16 +308,14 @@ int ZEXPORT gzbuffer(file, size)
|
||||||
/* check and set requested size */
|
/* check and set requested size */
|
||||||
if ((size << 1) < size)
|
if ((size << 1) < size)
|
||||||
return -1; /* need to be able to double it */
|
return -1; /* need to be able to double it */
|
||||||
if (size < 2)
|
if (size < 8)
|
||||||
size = 2; /* need two bytes to check magic header */
|
size = 8; /* needed to behave well with flushing */
|
||||||
state->want = size;
|
state->want = size;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzrewind(file)
|
int ZEXPORT gzrewind(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -363,11 +336,7 @@ int ZEXPORT gzrewind(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
z_off64_t ZEXPORT gzseek64(gzFile file, z_off64_t offset, int whence) {
|
||||||
gzFile file;
|
|
||||||
z_off64_t offset;
|
|
||||||
int whence;
|
|
||||||
{
|
|
||||||
unsigned n;
|
unsigned n;
|
||||||
z_off64_t ret;
|
z_off64_t ret;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
@ -397,7 +366,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
||||||
/* if within raw area while reading, just go there */
|
/* if within raw area while reading, just go there */
|
||||||
if (state->mode == GZ_READ && state->how == COPY &&
|
if (state->mode == GZ_READ && state->how == COPY &&
|
||||||
state->x.pos + offset >= 0) {
|
state->x.pos + offset >= 0) {
|
||||||
ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
|
ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR);
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
return -1;
|
return -1;
|
||||||
state->x.have = 0;
|
state->x.have = 0;
|
||||||
|
@ -440,11 +409,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_off_t ZEXPORT gzseek(file, offset, whence)
|
z_off_t ZEXPORT gzseek(gzFile file, z_off_t offset, int whence) {
|
||||||
gzFile file;
|
|
||||||
z_off_t offset;
|
|
||||||
int whence;
|
|
||||||
{
|
|
||||||
z_off64_t ret;
|
z_off64_t ret;
|
||||||
|
|
||||||
ret = gzseek64(file, (z_off64_t)offset, whence);
|
ret = gzseek64(file, (z_off64_t)offset, whence);
|
||||||
|
@ -452,9 +417,7 @@ z_off_t ZEXPORT gzseek(file, offset, whence)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_off64_t ZEXPORT gztell64(file)
|
z_off64_t ZEXPORT gztell64(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure and check integrity */
|
/* get internal structure and check integrity */
|
||||||
|
@ -469,9 +432,7 @@ z_off64_t ZEXPORT gztell64(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_off_t ZEXPORT gztell(file)
|
z_off_t ZEXPORT gztell(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
z_off64_t ret;
|
z_off64_t ret;
|
||||||
|
|
||||||
ret = gztell64(file);
|
ret = gztell64(file);
|
||||||
|
@ -479,9 +440,7 @@ z_off_t ZEXPORT gztell(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_off64_t ZEXPORT gzoffset64(file)
|
z_off64_t ZEXPORT gzoffset64(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
z_off64_t offset;
|
z_off64_t offset;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
@ -502,9 +461,7 @@ z_off64_t ZEXPORT gzoffset64(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_off_t ZEXPORT gzoffset(file)
|
z_off_t ZEXPORT gzoffset(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
z_off64_t ret;
|
z_off64_t ret;
|
||||||
|
|
||||||
ret = gzoffset64(file);
|
ret = gzoffset64(file);
|
||||||
|
@ -512,9 +469,7 @@ z_off_t ZEXPORT gzoffset(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzeof(file)
|
int ZEXPORT gzeof(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure and check integrity */
|
/* get internal structure and check integrity */
|
||||||
|
@ -529,10 +484,7 @@ int ZEXPORT gzeof(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
const char * ZEXPORT gzerror(file, errnum)
|
const char * ZEXPORT gzerror(gzFile file, int *errnum) {
|
||||||
gzFile file;
|
|
||||||
int *errnum;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure and check integrity */
|
/* get internal structure and check integrity */
|
||||||
|
@ -550,9 +502,7 @@ const char * ZEXPORT gzerror(file, errnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
void ZEXPORT gzclearerr(file)
|
void ZEXPORT gzclearerr(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure and check integrity */
|
/* get internal structure and check integrity */
|
||||||
|
@ -576,11 +526,7 @@ void ZEXPORT gzclearerr(file)
|
||||||
memory). Simply save the error message as a static string. If there is an
|
memory). Simply save the error message as a static string. If there is an
|
||||||
allocation failure constructing the error message, then convert the error to
|
allocation failure constructing the error message, then convert the error to
|
||||||
out of memory. */
|
out of memory. */
|
||||||
void ZLIB_INTERNAL gz_error(state, err, msg)
|
void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) {
|
||||||
gz_statep state;
|
|
||||||
int err;
|
|
||||||
const char *msg;
|
|
||||||
{
|
|
||||||
/* free previously allocated message and clear */
|
/* free previously allocated message and clear */
|
||||||
if (state->msg != NULL) {
|
if (state->msg != NULL) {
|
||||||
if (state->err != Z_MEM_ERROR)
|
if (state->err != Z_MEM_ERROR)
|
||||||
|
@ -617,21 +563,20 @@ void ZLIB_INTERNAL gz_error(state, err, msg)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef INT_MAX
|
|
||||||
/* portably return maximum value for an int (when limits.h presumed not
|
/* portably return maximum value for an int (when limits.h presumed not
|
||||||
available) -- we need to do this to cover cases where 2's complement not
|
available) -- we need to do this to cover cases where 2's complement not
|
||||||
used, since C standard permits 1's complement and sign-bit representations,
|
used, since C standard permits 1's complement and sign-bit representations,
|
||||||
otherwise we could just use ((unsigned)-1) >> 1 */
|
otherwise we could just use ((unsigned)-1) >> 1 */
|
||||||
unsigned ZLIB_INTERNAL gz_intmax()
|
unsigned ZLIB_INTERNAL gz_intmax(void) {
|
||||||
{
|
#ifdef INT_MAX
|
||||||
unsigned p, q;
|
return INT_MAX;
|
||||||
|
#else
|
||||||
p = 1;
|
unsigned p = 1, q;
|
||||||
do {
|
do {
|
||||||
q = p;
|
q = p;
|
||||||
p <<= 1;
|
p <<= 1;
|
||||||
p++;
|
p++;
|
||||||
} while (p > q);
|
} while (p > q);
|
||||||
return q >> 1;
|
return q >> 1;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -1,29 +1,16 @@
|
||||||
/* gzread.c -- zlib functions for reading gzip files
|
/* gzread.c -- zlib functions for reading gzip files
|
||||||
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
|
* Copyright (C) 2004-2017 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gzguts.h"
|
#include "gzguts.h"
|
||||||
|
|
||||||
/* Local functions */
|
|
||||||
local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
|
|
||||||
local int gz_avail OF((gz_statep));
|
|
||||||
local int gz_look OF((gz_statep));
|
|
||||||
local int gz_decomp OF((gz_statep));
|
|
||||||
local int gz_fetch OF((gz_statep));
|
|
||||||
local int gz_skip OF((gz_statep, z_off64_t));
|
|
||||||
local z_size_t gz_read OF((gz_statep, voidp, z_size_t));
|
|
||||||
|
|
||||||
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
|
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
|
||||||
state->fd, and update state->eof, state->err, and state->msg as appropriate.
|
state->fd, and update state->eof, state->err, and state->msg as appropriate.
|
||||||
This function needs to loop on read(), since read() is not guaranteed to
|
This function needs to loop on read(), since read() is not guaranteed to
|
||||||
read the number of bytes requested, depending on the type of descriptor. */
|
read the number of bytes requested, depending on the type of descriptor. */
|
||||||
local int gz_load(state, buf, len, have)
|
local int gz_load(gz_statep state, unsigned char *buf, unsigned len,
|
||||||
gz_statep state;
|
unsigned *have) {
|
||||||
unsigned char *buf;
|
|
||||||
unsigned len;
|
|
||||||
unsigned *have;
|
|
||||||
{
|
|
||||||
int ret;
|
int ret;
|
||||||
unsigned get, max = ((unsigned)-1 >> 2) + 1;
|
unsigned get, max = ((unsigned)-1 >> 2) + 1;
|
||||||
|
|
||||||
|
@ -53,9 +40,7 @@ local int gz_load(state, buf, len, have)
|
||||||
If strm->avail_in != 0, then the current data is moved to the beginning of
|
If strm->avail_in != 0, then the current data is moved to the beginning of
|
||||||
the input buffer, and then the remainder of the buffer is loaded with the
|
the input buffer, and then the remainder of the buffer is loaded with the
|
||||||
available data from the input file. */
|
available data from the input file. */
|
||||||
local int gz_avail(state)
|
local int gz_avail(gz_statep state) {
|
||||||
gz_statep state;
|
|
||||||
{
|
|
||||||
unsigned got;
|
unsigned got;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
|
@ -88,9 +73,7 @@ local int gz_avail(state)
|
||||||
case, all further file reads will be directly to either the output buffer or
|
case, all further file reads will be directly to either the output buffer or
|
||||||
a user buffer. If decompressing, the inflate state will be initialized.
|
a user buffer. If decompressing, the inflate state will be initialized.
|
||||||
gz_look() will return 0 on success or -1 on failure. */
|
gz_look() will return 0 on success or -1 on failure. */
|
||||||
local int gz_look(state)
|
local int gz_look(gz_statep state) {
|
||||||
gz_statep state;
|
|
||||||
{
|
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
/* allocate read buffers and inflate memory */
|
/* allocate read buffers and inflate memory */
|
||||||
|
@ -157,11 +140,9 @@ local int gz_look(state)
|
||||||
the output buffer is larger than the input buffer, which also assures
|
the output buffer is larger than the input buffer, which also assures
|
||||||
space for gzungetc() */
|
space for gzungetc() */
|
||||||
state->x.next = state->out;
|
state->x.next = state->out;
|
||||||
if (strm->avail_in) {
|
|
||||||
memcpy(state->x.next, strm->next_in, strm->avail_in);
|
memcpy(state->x.next, strm->next_in, strm->avail_in);
|
||||||
state->x.have = strm->avail_in;
|
state->x.have = strm->avail_in;
|
||||||
strm->avail_in = 0;
|
strm->avail_in = 0;
|
||||||
}
|
|
||||||
state->how = COPY;
|
state->how = COPY;
|
||||||
state->direct = 1;
|
state->direct = 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -172,9 +153,7 @@ local int gz_look(state)
|
||||||
data. If the gzip stream completes, state->how is reset to LOOK to look for
|
data. If the gzip stream completes, state->how is reset to LOOK to look for
|
||||||
the next gzip stream or raw data, once state->x.have is depleted. Returns 0
|
the next gzip stream or raw data, once state->x.have is depleted. Returns 0
|
||||||
on success, -1 on failure. */
|
on success, -1 on failure. */
|
||||||
local int gz_decomp(state)
|
local int gz_decomp(gz_statep state) {
|
||||||
gz_statep state;
|
|
||||||
{
|
|
||||||
int ret = Z_OK;
|
int ret = Z_OK;
|
||||||
unsigned had;
|
unsigned had;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
@ -226,9 +205,7 @@ local int gz_decomp(state)
|
||||||
looked for to determine whether to copy or decompress. Returns -1 on error,
|
looked for to determine whether to copy or decompress. Returns -1 on error,
|
||||||
otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
|
otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
|
||||||
end of the input file has been reached and all data has been processed. */
|
end of the input file has been reached and all data has been processed. */
|
||||||
local int gz_fetch(state)
|
local int gz_fetch(gz_statep state) {
|
||||||
gz_statep state;
|
|
||||||
{
|
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -256,10 +233,7 @@ local int gz_fetch(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
|
/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
|
||||||
local int gz_skip(state, len)
|
local int gz_skip(gz_statep state, z_off64_t len) {
|
||||||
gz_statep state;
|
|
||||||
z_off64_t len;
|
|
||||||
{
|
|
||||||
unsigned n;
|
unsigned n;
|
||||||
|
|
||||||
/* skip over len bytes or reach end-of-file, whichever comes first */
|
/* skip over len bytes or reach end-of-file, whichever comes first */
|
||||||
|
@ -291,11 +265,7 @@ local int gz_skip(state, len)
|
||||||
input. Return the number of bytes read. If zero is returned, either the
|
input. Return the number of bytes read. If zero is returned, either the
|
||||||
end of file was reached, or there was an error. state->err must be
|
end of file was reached, or there was an error. state->err must be
|
||||||
consulted in that case to determine which. */
|
consulted in that case to determine which. */
|
||||||
local z_size_t gz_read(state, buf, len)
|
local z_size_t gz_read(gz_statep state, voidp buf, z_size_t len) {
|
||||||
gz_statep state;
|
|
||||||
voidp buf;
|
|
||||||
z_size_t len;
|
|
||||||
{
|
|
||||||
z_size_t got;
|
z_size_t got;
|
||||||
unsigned n;
|
unsigned n;
|
||||||
|
|
||||||
|
@ -314,9 +284,9 @@ local z_size_t gz_read(state, buf, len)
|
||||||
got = 0;
|
got = 0;
|
||||||
do {
|
do {
|
||||||
/* set n to the maximum amount of len that fits in an unsigned int */
|
/* set n to the maximum amount of len that fits in an unsigned int */
|
||||||
n = -1;
|
n = (unsigned)-1;
|
||||||
if (n > len)
|
if (n > len)
|
||||||
n = len;
|
n = (unsigned)len;
|
||||||
|
|
||||||
/* first just try copying data from the output buffer */
|
/* first just try copying data from the output buffer */
|
||||||
if (state->x.have) {
|
if (state->x.have) {
|
||||||
|
@ -372,11 +342,7 @@ local z_size_t gz_read(state, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzread(file, buf, len)
|
int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) {
|
||||||
gzFile file;
|
|
||||||
voidp buf;
|
|
||||||
unsigned len;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -397,7 +363,7 @@ int ZEXPORT gzread(file, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* read len or fewer bytes to buf */
|
/* read len or fewer bytes to buf */
|
||||||
len = gz_read(state, buf, len);
|
len = (unsigned)gz_read(state, buf, len);
|
||||||
|
|
||||||
/* check for an error */
|
/* check for an error */
|
||||||
if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
|
if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
|
||||||
|
@ -408,12 +374,7 @@ int ZEXPORT gzread(file, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_size_t ZEXPORT gzfread(buf, size, nitems, file)
|
z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file) {
|
||||||
voidp buf;
|
|
||||||
z_size_t size;
|
|
||||||
z_size_t nitems;
|
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
z_size_t len;
|
z_size_t len;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
@ -444,10 +405,7 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file)
|
||||||
#else
|
#else
|
||||||
# undef gzgetc
|
# undef gzgetc
|
||||||
#endif
|
#endif
|
||||||
int ZEXPORT gzgetc(file)
|
int ZEXPORT gzgetc(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
unsigned char buf[1];
|
unsigned char buf[1];
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
@ -469,21 +427,15 @@ int ZEXPORT gzgetc(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nothing there -- try gz_read() */
|
/* nothing there -- try gz_read() */
|
||||||
ret = gz_read(state, buf, 1);
|
return gz_read(state, buf, 1) < 1 ? -1 : buf[0];
|
||||||
return ret < 1 ? -1 : buf[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT gzgetc_(file)
|
int ZEXPORT gzgetc_(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
return gzgetc(file);
|
return gzgetc(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzungetc(c, file)
|
int ZEXPORT gzungetc(int c, gzFile file) {
|
||||||
int c;
|
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -491,6 +443,10 @@ int ZEXPORT gzungetc(c, file)
|
||||||
return -1;
|
return -1;
|
||||||
state = (gz_statep)file;
|
state = (gz_statep)file;
|
||||||
|
|
||||||
|
/* in case this was just opened, set up the input buffer */
|
||||||
|
if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
|
||||||
|
(void)gz_look(state);
|
||||||
|
|
||||||
/* check that we're reading and that there's no (serious) error */
|
/* check that we're reading and that there's no (serious) error */
|
||||||
if (state->mode != GZ_READ ||
|
if (state->mode != GZ_READ ||
|
||||||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
(state->err != Z_OK && state->err != Z_BUF_ERROR))
|
||||||
|
@ -540,11 +496,7 @@ int ZEXPORT gzungetc(c, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
char * ZEXPORT gzgets(file, buf, len)
|
char * ZEXPORT gzgets(gzFile file, char *buf, int len) {
|
||||||
gzFile file;
|
|
||||||
char *buf;
|
|
||||||
int len;
|
|
||||||
{
|
|
||||||
unsigned left, n;
|
unsigned left, n;
|
||||||
char *str;
|
char *str;
|
||||||
unsigned char *eol;
|
unsigned char *eol;
|
||||||
|
@ -604,9 +556,7 @@ char * ZEXPORT gzgets(file, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzdirect(file)
|
int ZEXPORT gzdirect(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -624,9 +574,7 @@ int ZEXPORT gzdirect(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzclose_r(file)
|
int ZEXPORT gzclose_r(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
int ret, err;
|
int ret, err;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,14 @@
|
||||||
/* gzwrite.c -- zlib functions for writing gzip files
|
/* gzwrite.c -- zlib functions for writing gzip files
|
||||||
* Copyright (C) 2004-2017 Mark Adler
|
* Copyright (C) 2004-2019 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gzguts.h"
|
#include "gzguts.h"
|
||||||
|
|
||||||
/* Local functions */
|
|
||||||
local int gz_init OF((gz_statep));
|
|
||||||
local int gz_comp OF((gz_statep, int));
|
|
||||||
local int gz_zero OF((gz_statep, z_off64_t));
|
|
||||||
local z_size_t gz_write OF((gz_statep, voidpc, z_size_t));
|
|
||||||
|
|
||||||
/* Initialize state for writing a gzip file. Mark initialization by setting
|
/* Initialize state for writing a gzip file. Mark initialization by setting
|
||||||
state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
|
state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
|
||||||
success. */
|
success. */
|
||||||
local int gz_init(state)
|
local int gz_init(gz_statep state) {
|
||||||
gz_statep state;
|
|
||||||
{
|
|
||||||
int ret;
|
int ret;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
|
||||||
|
@ -70,10 +62,7 @@ local int gz_init(state)
|
||||||
deflate() flush value. If flush is Z_FINISH, then the deflate() state is
|
deflate() flush value. If flush is Z_FINISH, then the deflate() state is
|
||||||
reset to start a new gzip stream. If gz->direct is true, then simply write
|
reset to start a new gzip stream. If gz->direct is true, then simply write
|
||||||
to the output file without compressing, and ignore flush. */
|
to the output file without compressing, and ignore flush. */
|
||||||
local int gz_comp(state, flush)
|
local int gz_comp(gz_statep state, int flush) {
|
||||||
gz_statep state;
|
|
||||||
int flush;
|
|
||||||
{
|
|
||||||
int ret, writ;
|
int ret, writ;
|
||||||
unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
|
unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
@ -97,6 +86,15 @@ local int gz_comp(state, flush)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check for a pending reset */
|
||||||
|
if (state->reset) {
|
||||||
|
/* don't start a new gzip member unless there is data to write */
|
||||||
|
if (strm->avail_in == 0)
|
||||||
|
return 0;
|
||||||
|
deflateReset(strm);
|
||||||
|
state->reset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* run deflate() on provided input until it produces no more output */
|
/* run deflate() on provided input until it produces no more output */
|
||||||
ret = Z_OK;
|
ret = Z_OK;
|
||||||
do {
|
do {
|
||||||
|
@ -134,7 +132,7 @@ local int gz_comp(state, flush)
|
||||||
|
|
||||||
/* if that completed a deflate stream, allow another to start */
|
/* if that completed a deflate stream, allow another to start */
|
||||||
if (flush == Z_FINISH)
|
if (flush == Z_FINISH)
|
||||||
deflateReset(strm);
|
state->reset = 1;
|
||||||
|
|
||||||
/* all done, no errors */
|
/* all done, no errors */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -142,10 +140,7 @@ local int gz_comp(state, flush)
|
||||||
|
|
||||||
/* Compress len zeros to output. Return -1 on a write error or memory
|
/* Compress len zeros to output. Return -1 on a write error or memory
|
||||||
allocation failure by gz_comp(), or 0 on success. */
|
allocation failure by gz_comp(), or 0 on success. */
|
||||||
local int gz_zero(state, len)
|
local int gz_zero(gz_statep state, z_off64_t len) {
|
||||||
gz_statep state;
|
|
||||||
z_off64_t len;
|
|
||||||
{
|
|
||||||
int first;
|
int first;
|
||||||
unsigned n;
|
unsigned n;
|
||||||
z_streamp strm = &(state->strm);
|
z_streamp strm = &(state->strm);
|
||||||
|
@ -175,11 +170,7 @@ local int gz_zero(state, len)
|
||||||
|
|
||||||
/* Write len bytes from buf to file. Return the number of bytes written. If
|
/* Write len bytes from buf to file. Return the number of bytes written. If
|
||||||
the returned value is less than len, then there was an error. */
|
the returned value is less than len, then there was an error. */
|
||||||
local z_size_t gz_write(state, buf, len)
|
local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) {
|
||||||
gz_statep state;
|
|
||||||
voidpc buf;
|
|
||||||
z_size_t len;
|
|
||||||
{
|
|
||||||
z_size_t put = len;
|
z_size_t put = len;
|
||||||
|
|
||||||
/* if len is zero, avoid unnecessary operations */
|
/* if len is zero, avoid unnecessary operations */
|
||||||
|
@ -209,7 +200,7 @@ local z_size_t gz_write(state, buf, len)
|
||||||
state->in);
|
state->in);
|
||||||
copy = state->size - have;
|
copy = state->size - have;
|
||||||
if (copy > len)
|
if (copy > len)
|
||||||
copy = len;
|
copy = (unsigned)len;
|
||||||
memcpy(state->in + have, buf, copy);
|
memcpy(state->in + have, buf, copy);
|
||||||
state->strm.avail_in += copy;
|
state->strm.avail_in += copy;
|
||||||
state->x.pos += copy;
|
state->x.pos += copy;
|
||||||
|
@ -229,7 +220,7 @@ local z_size_t gz_write(state, buf, len)
|
||||||
do {
|
do {
|
||||||
unsigned n = (unsigned)-1;
|
unsigned n = (unsigned)-1;
|
||||||
if (n > len)
|
if (n > len)
|
||||||
n = len;
|
n = (unsigned)len;
|
||||||
state->strm.avail_in = n;
|
state->strm.avail_in = n;
|
||||||
state->x.pos += n;
|
state->x.pos += n;
|
||||||
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
||||||
|
@ -243,11 +234,7 @@ local z_size_t gz_write(state, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzwrite(file, buf, len)
|
int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len) {
|
||||||
gzFile file;
|
|
||||||
voidpc buf;
|
|
||||||
unsigned len;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -271,12 +258,8 @@ int ZEXPORT gzwrite(file, buf, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
|
z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems,
|
||||||
voidpc buf;
|
gzFile file) {
|
||||||
z_size_t size;
|
|
||||||
z_size_t nitems;
|
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
z_size_t len;
|
z_size_t len;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
@ -301,10 +284,7 @@ z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzputc(file, c)
|
int ZEXPORT gzputc(gzFile file, int c) {
|
||||||
gzFile file;
|
|
||||||
int c;
|
|
||||||
{
|
|
||||||
unsigned have;
|
unsigned have;
|
||||||
unsigned char buf[1];
|
unsigned char buf[1];
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
@ -349,12 +329,8 @@ int ZEXPORT gzputc(file, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzputs(file, str)
|
int ZEXPORT gzputs(gzFile file, const char *s) {
|
||||||
gzFile file;
|
z_size_t len, put;
|
||||||
const char *str;
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
z_size_t len;
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -367,17 +343,20 @@ int ZEXPORT gzputs(file, str)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* write string */
|
/* write string */
|
||||||
len = strlen(str);
|
len = strlen(s);
|
||||||
ret = gz_write(state, str, len);
|
if ((int)len < 0 || (unsigned)len != len) {
|
||||||
return ret == 0 && len != 0 ? -1 : ret;
|
gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
put = gz_write(state, s, len);
|
||||||
|
return put < len ? -1 : (int)len;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
|
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
|
int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) {
|
||||||
{
|
|
||||||
int len;
|
int len;
|
||||||
unsigned left;
|
unsigned left;
|
||||||
char *next;
|
char *next;
|
||||||
|
@ -441,15 +420,14 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
|
||||||
strm->avail_in = state->size;
|
strm->avail_in = state->size;
|
||||||
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
||||||
return state->err;
|
return state->err;
|
||||||
memcpy(state->in, state->in + state->size, left);
|
memmove(state->in, state->in + state->size, left);
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
strm->avail_in = left;
|
strm->avail_in = left;
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
|
int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) {
|
||||||
{
|
|
||||||
va_list va;
|
va_list va;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -462,13 +440,10 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
|
||||||
#else /* !STDC && !Z_HAVE_STDARG_H */
|
#else /* !STDC && !Z_HAVE_STDARG_H */
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3,
|
||||||
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
|
int a4, int a5, int a6, int a7, int a8, int a9, int a10,
|
||||||
gzFile file;
|
int a11, int a12, int a13, int a14, int a15, int a16,
|
||||||
const char *format;
|
int a17, int a18, int a19, int a20) {
|
||||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
|
||||||
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
|
|
||||||
{
|
|
||||||
unsigned len, left;
|
unsigned len, left;
|
||||||
char *next;
|
char *next;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
@ -540,7 +515,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
||||||
strm->avail_in = state->size;
|
strm->avail_in = state->size;
|
||||||
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
if (gz_comp(state, Z_NO_FLUSH) == -1)
|
||||||
return state->err;
|
return state->err;
|
||||||
memcpy(state->in, state->in + state->size, left);
|
memmove(state->in, state->in + state->size, left);
|
||||||
strm->next_in = state->in;
|
strm->next_in = state->in;
|
||||||
strm->avail_in = left;
|
strm->avail_in = left;
|
||||||
}
|
}
|
||||||
|
@ -550,10 +525,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzflush(file, flush)
|
int ZEXPORT gzflush(gzFile file, int flush) {
|
||||||
gzFile file;
|
|
||||||
int flush;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
/* get internal structure */
|
/* get internal structure */
|
||||||
|
@ -582,11 +554,7 @@ int ZEXPORT gzflush(file, flush)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzsetparams(file, level, strategy)
|
int ZEXPORT gzsetparams(gzFile file, int level, int strategy) {
|
||||||
gzFile file;
|
|
||||||
int level;
|
|
||||||
int strategy;
|
|
||||||
{
|
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
z_streamp strm;
|
z_streamp strm;
|
||||||
|
|
||||||
|
@ -597,7 +565,7 @@ int ZEXPORT gzsetparams(file, level, strategy)
|
||||||
strm = &(state->strm);
|
strm = &(state->strm);
|
||||||
|
|
||||||
/* check that we're writing and that there's no error */
|
/* check that we're writing and that there's no error */
|
||||||
if (state->mode != GZ_WRITE || state->err != Z_OK)
|
if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct)
|
||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
|
|
||||||
/* if no change is requested, then do nothing */
|
/* if no change is requested, then do nothing */
|
||||||
|
@ -624,9 +592,7 @@ int ZEXPORT gzsetparams(file, level, strategy)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- see zlib.h -- */
|
/* -- see zlib.h -- */
|
||||||
int ZEXPORT gzclose_w(file)
|
int ZEXPORT gzclose_w(gzFile file) {
|
||||||
gzFile file;
|
|
||||||
{
|
|
||||||
int ret = Z_OK;
|
int ret = Z_OK;
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* infback.c -- inflate using a call-back interface
|
/* infback.c -- inflate using a call-back interface
|
||||||
* Copyright (C) 1995-2016 Mark Adler
|
* Copyright (C) 1995-2022 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -15,9 +15,6 @@
|
||||||
#include "inflate.h"
|
#include "inflate.h"
|
||||||
#include "inffast.h"
|
#include "inffast.h"
|
||||||
|
|
||||||
/* function prototypes */
|
|
||||||
local void fixedtables OF((struct inflate_state FAR *state));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
strm provides memory allocation functions in zalloc and zfree, or
|
strm provides memory allocation functions in zalloc and zfree, or
|
||||||
Z_NULL to use the library memory allocation functions.
|
Z_NULL to use the library memory allocation functions.
|
||||||
|
@ -25,13 +22,9 @@ local void fixedtables OF((struct inflate_state FAR *state));
|
||||||
windowBits is in the range 8..15, and window is a user-supplied
|
windowBits is in the range 8..15, and window is a user-supplied
|
||||||
window and output buffer that is 2**windowBits bytes.
|
window and output buffer that is 2**windowBits bytes.
|
||||||
*/
|
*/
|
||||||
int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
|
int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits,
|
||||||
z_streamp strm;
|
unsigned char FAR *window, const char *version,
|
||||||
int windowBits;
|
int stream_size) {
|
||||||
unsigned char FAR *window;
|
|
||||||
const char *version;
|
|
||||||
int stream_size;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
|
if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
|
||||||
|
@ -66,6 +59,7 @@ int stream_size;
|
||||||
state->window = window;
|
state->window = window;
|
||||||
state->wnext = 0;
|
state->wnext = 0;
|
||||||
state->whave = 0;
|
state->whave = 0;
|
||||||
|
state->sane = 1;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,9 +73,7 @@ int stream_size;
|
||||||
used for threaded applications, since the rewriting of the tables and virgin
|
used for threaded applications, since the rewriting of the tables and virgin
|
||||||
may not be thread-safe.
|
may not be thread-safe.
|
||||||
*/
|
*/
|
||||||
local void fixedtables(state)
|
local void fixedtables(struct inflate_state FAR *state) {
|
||||||
struct inflate_state FAR *state;
|
|
||||||
{
|
|
||||||
#ifdef BUILDFIXED
|
#ifdef BUILDFIXED
|
||||||
static int virgin = 1;
|
static int virgin = 1;
|
||||||
static code *lenfix, *distfix;
|
static code *lenfix, *distfix;
|
||||||
|
@ -247,13 +239,8 @@ struct inflate_state FAR *state;
|
||||||
inflateBack() can also return Z_STREAM_ERROR if the input parameters
|
inflateBack() can also return Z_STREAM_ERROR if the input parameters
|
||||||
are not correct, i.e. strm is Z_NULL or the state was not initialized.
|
are not correct, i.e. strm is Z_NULL or the state was not initialized.
|
||||||
*/
|
*/
|
||||||
int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
|
int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc,
|
||||||
z_streamp strm;
|
out_func out, void FAR *out_desc) {
|
||||||
in_func in;
|
|
||||||
void FAR *in_desc;
|
|
||||||
out_func out;
|
|
||||||
void FAR *out_desc;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
z_const unsigned char FAR *next; /* next input */
|
z_const unsigned char FAR *next; /* next input */
|
||||||
unsigned char FAR *put; /* next output */
|
unsigned char FAR *put; /* next output */
|
||||||
|
@ -477,6 +464,7 @@ void FAR *out_desc;
|
||||||
}
|
}
|
||||||
Tracev((stderr, "inflate: codes ok\n"));
|
Tracev((stderr, "inflate: codes ok\n"));
|
||||||
state->mode = LEN;
|
state->mode = LEN;
|
||||||
|
/* fallthrough */
|
||||||
|
|
||||||
case LEN:
|
case LEN:
|
||||||
/* use inflate_fast() if we have enough input and output */
|
/* use inflate_fast() if we have enough input and output */
|
||||||
|
@ -604,33 +592,33 @@ void FAR *out_desc;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DONE:
|
case DONE:
|
||||||
/* inflate stream terminated properly -- write leftover output */
|
/* inflate stream terminated properly */
|
||||||
ret = Z_STREAM_END;
|
ret = Z_STREAM_END;
|
||||||
if (left < state->wsize) {
|
|
||||||
if (out(out_desc, state->window, state->wsize - left))
|
|
||||||
ret = Z_BUF_ERROR;
|
|
||||||
}
|
|
||||||
goto inf_leave;
|
goto inf_leave;
|
||||||
|
|
||||||
case BAD:
|
case BAD:
|
||||||
ret = Z_DATA_ERROR;
|
ret = Z_DATA_ERROR;
|
||||||
goto inf_leave;
|
goto inf_leave;
|
||||||
|
|
||||||
default: /* can't happen, but makes compilers happy */
|
default:
|
||||||
|
/* can't happen, but makes compilers happy */
|
||||||
ret = Z_STREAM_ERROR;
|
ret = Z_STREAM_ERROR;
|
||||||
goto inf_leave;
|
goto inf_leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return unused input */
|
/* Write leftover output and return unused input */
|
||||||
inf_leave:
|
inf_leave:
|
||||||
|
if (left < state->wsize) {
|
||||||
|
if (out(out_desc, state->window, state->wsize - left) &&
|
||||||
|
ret == Z_STREAM_END)
|
||||||
|
ret = Z_BUF_ERROR;
|
||||||
|
}
|
||||||
strm->next_in = next;
|
strm->next_in = next;
|
||||||
strm->avail_in = have;
|
strm->avail_in = have;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateBackEnd(strm)
|
int ZEXPORT inflateBackEnd(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
|
if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
|
||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
ZFREE(strm, strm->state);
|
ZFREE(strm, strm->state);
|
||||||
|
|
|
@ -47,10 +47,7 @@
|
||||||
requires strm->avail_out >= 258 for each loop to avoid checking for
|
requires strm->avail_out >= 258 for each loop to avoid checking for
|
||||||
output space.
|
output space.
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL inflate_fast(strm, start)
|
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
|
||||||
z_streamp strm;
|
|
||||||
unsigned start; /* inflate()'s starting value for strm->avail_out */
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
z_const unsigned char FAR *in; /* local strm->next_in */
|
z_const unsigned char FAR *in; /* local strm->next_in */
|
||||||
z_const unsigned char FAR *last; /* have enough input while in < last */
|
z_const unsigned char FAR *last; /* have enough input while in < last */
|
||||||
|
@ -70,7 +67,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
|
||||||
code const FAR *dcode; /* local strm->distcode */
|
code const FAR *dcode; /* local strm->distcode */
|
||||||
unsigned lmask; /* mask for first level of length codes */
|
unsigned lmask; /* mask for first level of length codes */
|
||||||
unsigned dmask; /* mask for first level of distance codes */
|
unsigned dmask; /* mask for first level of distance codes */
|
||||||
code here; /* retrieved table entry */
|
code const *here; /* retrieved table entry */
|
||||||
unsigned op; /* code bits, operation, extra bits, or */
|
unsigned op; /* code bits, operation, extra bits, or */
|
||||||
/* window position, window bytes to copy */
|
/* window position, window bytes to copy */
|
||||||
unsigned len; /* match length, unused bytes */
|
unsigned len; /* match length, unused bytes */
|
||||||
|
@ -107,20 +104,20 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
}
|
}
|
||||||
here = lcode[hold & lmask];
|
here = lcode + (hold & lmask);
|
||||||
dolen:
|
dolen:
|
||||||
op = (unsigned)(here.bits);
|
op = (unsigned)(here->bits);
|
||||||
hold >>= op;
|
hold >>= op;
|
||||||
bits -= op;
|
bits -= op;
|
||||||
op = (unsigned)(here.op);
|
op = (unsigned)(here->op);
|
||||||
if (op == 0) { /* literal */
|
if (op == 0) { /* literal */
|
||||||
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
|
Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
|
||||||
"inflate: literal '%c'\n" :
|
"inflate: literal '%c'\n" :
|
||||||
"inflate: literal 0x%02x\n", here.val));
|
"inflate: literal 0x%02x\n", here->val));
|
||||||
*out++ = (unsigned char)(here.val);
|
*out++ = (unsigned char)(here->val);
|
||||||
}
|
}
|
||||||
else if (op & 16) { /* length base */
|
else if (op & 16) { /* length base */
|
||||||
len = (unsigned)(here.val);
|
len = (unsigned)(here->val);
|
||||||
op &= 15; /* number of extra bits */
|
op &= 15; /* number of extra bits */
|
||||||
if (op) {
|
if (op) {
|
||||||
if (bits < op) {
|
if (bits < op) {
|
||||||
|
@ -138,14 +135,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
bits += 8;
|
bits += 8;
|
||||||
}
|
}
|
||||||
here = dcode[hold & dmask];
|
here = dcode + (hold & dmask);
|
||||||
dodist:
|
dodist:
|
||||||
op = (unsigned)(here.bits);
|
op = (unsigned)(here->bits);
|
||||||
hold >>= op;
|
hold >>= op;
|
||||||
bits -= op;
|
bits -= op;
|
||||||
op = (unsigned)(here.op);
|
op = (unsigned)(here->op);
|
||||||
if (op & 16) { /* distance base */
|
if (op & 16) { /* distance base */
|
||||||
dist = (unsigned)(here.val);
|
dist = (unsigned)(here->val);
|
||||||
op &= 15; /* number of extra bits */
|
op &= 15; /* number of extra bits */
|
||||||
if (bits < op) {
|
if (bits < op) {
|
||||||
hold += (unsigned long)(*in++) << bits;
|
hold += (unsigned long)(*in++) << bits;
|
||||||
|
@ -264,7 +261,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((op & 64) == 0) { /* 2nd level distance code */
|
else if ((op & 64) == 0) { /* 2nd level distance code */
|
||||||
here = dcode[here.val + (hold & ((1U << op) - 1))];
|
here = dcode + here->val + (hold & ((1U << op) - 1));
|
||||||
goto dodist;
|
goto dodist;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -274,7 +271,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((op & 64) == 0) { /* 2nd level length code */
|
else if ((op & 64) == 0) { /* 2nd level length code */
|
||||||
here = lcode[here.val + (hold & ((1U << op) - 1))];
|
here = lcode + here->val + (hold & ((1U << op) - 1));
|
||||||
goto dolen;
|
goto dolen;
|
||||||
}
|
}
|
||||||
else if (op & 32) { /* end-of-block */
|
else if (op & 32) { /* end-of-block */
|
||||||
|
|
|
@ -8,4 +8,4 @@
|
||||||
subject to change. Applications should only use zlib.h.
|
subject to change. Applications should only use zlib.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
|
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* inflate.c -- zlib decompression
|
/* inflate.c -- zlib decompression
|
||||||
* Copyright (C) 1995-2016 Mark Adler
|
* Copyright (C) 1995-2022 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -91,20 +91,7 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* function prototypes */
|
local int inflateStateCheck(z_streamp strm) {
|
||||||
local int inflateStateCheck OF((z_streamp strm));
|
|
||||||
local void fixedtables OF((struct inflate_state FAR *state));
|
|
||||||
local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
|
|
||||||
unsigned copy));
|
|
||||||
#ifdef BUILDFIXED
|
|
||||||
void makefixed OF((void));
|
|
||||||
#endif
|
|
||||||
local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
|
|
||||||
unsigned len));
|
|
||||||
|
|
||||||
local int inflateStateCheck(strm)
|
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
if (strm == Z_NULL ||
|
if (strm == Z_NULL ||
|
||||||
strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
|
strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
|
||||||
|
@ -116,9 +103,7 @@ z_streamp strm;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateResetKeep(strm)
|
int ZEXPORT inflateResetKeep(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
|
@ -130,6 +115,7 @@ z_streamp strm;
|
||||||
state->mode = HEAD;
|
state->mode = HEAD;
|
||||||
state->last = 0;
|
state->last = 0;
|
||||||
state->havedict = 0;
|
state->havedict = 0;
|
||||||
|
state->flags = -1;
|
||||||
state->dmax = 32768U;
|
state->dmax = 32768U;
|
||||||
state->head = Z_NULL;
|
state->head = Z_NULL;
|
||||||
state->hold = 0;
|
state->hold = 0;
|
||||||
|
@ -141,9 +127,7 @@ z_streamp strm;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateReset(strm)
|
int ZEXPORT inflateReset(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
|
@ -154,10 +138,7 @@ z_streamp strm;
|
||||||
return inflateResetKeep(strm);
|
return inflateResetKeep(strm);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateReset2(strm, windowBits)
|
int ZEXPORT inflateReset2(z_streamp strm, int windowBits) {
|
||||||
z_streamp strm;
|
|
||||||
int windowBits;
|
|
||||||
{
|
|
||||||
int wrap;
|
int wrap;
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
|
@ -167,6 +148,8 @@ int windowBits;
|
||||||
|
|
||||||
/* extract wrap request from windowBits parameter */
|
/* extract wrap request from windowBits parameter */
|
||||||
if (windowBits < 0) {
|
if (windowBits < 0) {
|
||||||
|
if (windowBits < -15)
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
wrap = 0;
|
wrap = 0;
|
||||||
windowBits = -windowBits;
|
windowBits = -windowBits;
|
||||||
}
|
}
|
||||||
|
@ -192,12 +175,8 @@ int windowBits;
|
||||||
return inflateReset(strm);
|
return inflateReset(strm);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
|
int ZEXPORT inflateInit2_(z_streamp strm, int windowBits,
|
||||||
z_streamp strm;
|
const char *version, int stream_size) {
|
||||||
int windowBits;
|
|
||||||
const char *version;
|
|
||||||
int stream_size;
|
|
||||||
{
|
|
||||||
int ret;
|
int ret;
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
|
@ -236,22 +215,17 @@ int stream_size;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateInit_(strm, version, stream_size)
|
int ZEXPORT inflateInit_(z_streamp strm, const char *version,
|
||||||
z_streamp strm;
|
int stream_size) {
|
||||||
const char *version;
|
|
||||||
int stream_size;
|
|
||||||
{
|
|
||||||
return inflateInit2_(strm, DEF_WBITS, version, stream_size);
|
return inflateInit2_(strm, DEF_WBITS, version, stream_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflatePrime(strm, bits, value)
|
int ZEXPORT inflatePrime(z_streamp strm, int bits, int value) {
|
||||||
z_streamp strm;
|
|
||||||
int bits;
|
|
||||||
int value;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
|
if (bits == 0)
|
||||||
|
return Z_OK;
|
||||||
state = (struct inflate_state FAR *)strm->state;
|
state = (struct inflate_state FAR *)strm->state;
|
||||||
if (bits < 0) {
|
if (bits < 0) {
|
||||||
state->hold = 0;
|
state->hold = 0;
|
||||||
|
@ -275,9 +249,7 @@ int value;
|
||||||
used for threaded applications, since the rewriting of the tables and virgin
|
used for threaded applications, since the rewriting of the tables and virgin
|
||||||
may not be thread-safe.
|
may not be thread-safe.
|
||||||
*/
|
*/
|
||||||
local void fixedtables(state)
|
local void fixedtables(struct inflate_state FAR *state) {
|
||||||
struct inflate_state FAR *state;
|
|
||||||
{
|
|
||||||
#ifdef BUILDFIXED
|
#ifdef BUILDFIXED
|
||||||
static int virgin = 1;
|
static int virgin = 1;
|
||||||
static code *lenfix, *distfix;
|
static code *lenfix, *distfix;
|
||||||
|
@ -339,7 +311,7 @@ struct inflate_state FAR *state;
|
||||||
|
|
||||||
a.out > inffixed.h
|
a.out > inffixed.h
|
||||||
*/
|
*/
|
||||||
void makefixed()
|
void makefixed(void)
|
||||||
{
|
{
|
||||||
unsigned low, size;
|
unsigned low, size;
|
||||||
struct inflate_state state;
|
struct inflate_state state;
|
||||||
|
@ -393,11 +365,7 @@ void makefixed()
|
||||||
output will fall in the output data, making match copies simpler and faster.
|
output will fall in the output data, making match copies simpler and faster.
|
||||||
The advantage may be dependent on the size of the processor's data caches.
|
The advantage may be dependent on the size of the processor's data caches.
|
||||||
*/
|
*/
|
||||||
local int updatewindow(strm, end, copy)
|
local int updatewindow(z_streamp strm, const Bytef *end, unsigned copy) {
|
||||||
z_streamp strm;
|
|
||||||
const Bytef *end;
|
|
||||||
unsigned copy;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
unsigned dist;
|
unsigned dist;
|
||||||
|
|
||||||
|
@ -447,10 +415,10 @@ unsigned copy;
|
||||||
|
|
||||||
/* check function to use adler32() for zlib or crc32() for gzip */
|
/* check function to use adler32() for zlib or crc32() for gzip */
|
||||||
#ifdef GUNZIP
|
#ifdef GUNZIP
|
||||||
# define UPDATE(check, buf, len) \
|
# define UPDATE_CHECK(check, buf, len) \
|
||||||
(state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
|
(state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
|
||||||
#else
|
#else
|
||||||
# define UPDATE(check, buf, len) adler32(check, buf, len)
|
# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* check macros for header crc */
|
/* check macros for header crc */
|
||||||
|
@ -619,10 +587,7 @@ unsigned copy;
|
||||||
will return Z_BUF_ERROR if it has not reached the end of the stream.
|
will return Z_BUF_ERROR if it has not reached the end of the stream.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int ZEXPORT inflate(strm, flush)
|
int ZEXPORT inflate(z_streamp strm, int flush) {
|
||||||
z_streamp strm;
|
|
||||||
int flush;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
z_const unsigned char FAR *next; /* next input */
|
z_const unsigned char FAR *next; /* next input */
|
||||||
unsigned char FAR *put; /* next output */
|
unsigned char FAR *put; /* next output */
|
||||||
|
@ -670,7 +635,6 @@ int flush;
|
||||||
state->mode = FLAGS;
|
state->mode = FLAGS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
state->flags = 0; /* expect zlib header */
|
|
||||||
if (state->head != Z_NULL)
|
if (state->head != Z_NULL)
|
||||||
state->head->done = -1;
|
state->head->done = -1;
|
||||||
if (!(state->wrap & 1) || /* check if zlib header allowed */
|
if (!(state->wrap & 1) || /* check if zlib header allowed */
|
||||||
|
@ -697,6 +661,7 @@ int flush;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
state->dmax = 1U << len;
|
state->dmax = 1U << len;
|
||||||
|
state->flags = 0; /* indicate zlib header */
|
||||||
Tracev((stderr, "inflate: zlib header ok\n"));
|
Tracev((stderr, "inflate: zlib header ok\n"));
|
||||||
strm->adler = state->check = adler32(0L, Z_NULL, 0);
|
strm->adler = state->check = adler32(0L, Z_NULL, 0);
|
||||||
state->mode = hold & 0x200 ? DICTID : TYPE;
|
state->mode = hold & 0x200 ? DICTID : TYPE;
|
||||||
|
@ -722,6 +687,7 @@ int flush;
|
||||||
CRC2(state->check, hold);
|
CRC2(state->check, hold);
|
||||||
INITBITS();
|
INITBITS();
|
||||||
state->mode = TIME;
|
state->mode = TIME;
|
||||||
|
/* fallthrough */
|
||||||
case TIME:
|
case TIME:
|
||||||
NEEDBITS(32);
|
NEEDBITS(32);
|
||||||
if (state->head != Z_NULL)
|
if (state->head != Z_NULL)
|
||||||
|
@ -730,6 +696,7 @@ int flush;
|
||||||
CRC4(state->check, hold);
|
CRC4(state->check, hold);
|
||||||
INITBITS();
|
INITBITS();
|
||||||
state->mode = OS;
|
state->mode = OS;
|
||||||
|
/* fallthrough */
|
||||||
case OS:
|
case OS:
|
||||||
NEEDBITS(16);
|
NEEDBITS(16);
|
||||||
if (state->head != Z_NULL) {
|
if (state->head != Z_NULL) {
|
||||||
|
@ -740,6 +707,7 @@ int flush;
|
||||||
CRC2(state->check, hold);
|
CRC2(state->check, hold);
|
||||||
INITBITS();
|
INITBITS();
|
||||||
state->mode = EXLEN;
|
state->mode = EXLEN;
|
||||||
|
/* fallthrough */
|
||||||
case EXLEN:
|
case EXLEN:
|
||||||
if (state->flags & 0x0400) {
|
if (state->flags & 0x0400) {
|
||||||
NEEDBITS(16);
|
NEEDBITS(16);
|
||||||
|
@ -753,14 +721,16 @@ int flush;
|
||||||
else if (state->head != Z_NULL)
|
else if (state->head != Z_NULL)
|
||||||
state->head->extra = Z_NULL;
|
state->head->extra = Z_NULL;
|
||||||
state->mode = EXTRA;
|
state->mode = EXTRA;
|
||||||
|
/* fallthrough */
|
||||||
case EXTRA:
|
case EXTRA:
|
||||||
if (state->flags & 0x0400) {
|
if (state->flags & 0x0400) {
|
||||||
copy = state->length;
|
copy = state->length;
|
||||||
if (copy > have) copy = have;
|
if (copy > have) copy = have;
|
||||||
if (copy) {
|
if (copy) {
|
||||||
if (state->head != Z_NULL &&
|
if (state->head != Z_NULL &&
|
||||||
state->head->extra != Z_NULL) {
|
state->head->extra != Z_NULL &&
|
||||||
len = state->head->extra_len - state->length;
|
(len = state->head->extra_len - state->length) <
|
||||||
|
state->head->extra_max) {
|
||||||
zmemcpy(state->head->extra + len, next,
|
zmemcpy(state->head->extra + len, next,
|
||||||
len + copy > state->head->extra_max ?
|
len + copy > state->head->extra_max ?
|
||||||
state->head->extra_max - len : copy);
|
state->head->extra_max - len : copy);
|
||||||
|
@ -775,6 +745,7 @@ int flush;
|
||||||
}
|
}
|
||||||
state->length = 0;
|
state->length = 0;
|
||||||
state->mode = NAME;
|
state->mode = NAME;
|
||||||
|
/* fallthrough */
|
||||||
case NAME:
|
case NAME:
|
||||||
if (state->flags & 0x0800) {
|
if (state->flags & 0x0800) {
|
||||||
if (have == 0) goto inf_leave;
|
if (have == 0) goto inf_leave;
|
||||||
|
@ -796,6 +767,7 @@ int flush;
|
||||||
state->head->name = Z_NULL;
|
state->head->name = Z_NULL;
|
||||||
state->length = 0;
|
state->length = 0;
|
||||||
state->mode = COMMENT;
|
state->mode = COMMENT;
|
||||||
|
/* fallthrough */
|
||||||
case COMMENT:
|
case COMMENT:
|
||||||
if (state->flags & 0x1000) {
|
if (state->flags & 0x1000) {
|
||||||
if (have == 0) goto inf_leave;
|
if (have == 0) goto inf_leave;
|
||||||
|
@ -816,6 +788,7 @@ int flush;
|
||||||
else if (state->head != Z_NULL)
|
else if (state->head != Z_NULL)
|
||||||
state->head->comment = Z_NULL;
|
state->head->comment = Z_NULL;
|
||||||
state->mode = HCRC;
|
state->mode = HCRC;
|
||||||
|
/* fallthrough */
|
||||||
case HCRC:
|
case HCRC:
|
||||||
if (state->flags & 0x0200) {
|
if (state->flags & 0x0200) {
|
||||||
NEEDBITS(16);
|
NEEDBITS(16);
|
||||||
|
@ -839,6 +812,7 @@ int flush;
|
||||||
strm->adler = state->check = ZSWAP32(hold);
|
strm->adler = state->check = ZSWAP32(hold);
|
||||||
INITBITS();
|
INITBITS();
|
||||||
state->mode = DICT;
|
state->mode = DICT;
|
||||||
|
/* fallthrough */
|
||||||
case DICT:
|
case DICT:
|
||||||
if (state->havedict == 0) {
|
if (state->havedict == 0) {
|
||||||
RESTORE();
|
RESTORE();
|
||||||
|
@ -846,8 +820,10 @@ int flush;
|
||||||
}
|
}
|
||||||
strm->adler = state->check = adler32(0L, Z_NULL, 0);
|
strm->adler = state->check = adler32(0L, Z_NULL, 0);
|
||||||
state->mode = TYPE;
|
state->mode = TYPE;
|
||||||
|
/* fallthrough */
|
||||||
case TYPE:
|
case TYPE:
|
||||||
if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
|
if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
|
||||||
|
/* fallthrough */
|
||||||
case TYPEDO:
|
case TYPEDO:
|
||||||
if (state->last) {
|
if (state->last) {
|
||||||
BYTEBITS();
|
BYTEBITS();
|
||||||
|
@ -898,8 +874,10 @@ int flush;
|
||||||
INITBITS();
|
INITBITS();
|
||||||
state->mode = COPY_;
|
state->mode = COPY_;
|
||||||
if (flush == Z_TREES) goto inf_leave;
|
if (flush == Z_TREES) goto inf_leave;
|
||||||
|
/* fallthrough */
|
||||||
case COPY_:
|
case COPY_:
|
||||||
state->mode = COPY;
|
state->mode = COPY;
|
||||||
|
/* fallthrough */
|
||||||
case COPY:
|
case COPY:
|
||||||
copy = state->length;
|
copy = state->length;
|
||||||
if (copy) {
|
if (copy) {
|
||||||
|
@ -935,6 +913,7 @@ int flush;
|
||||||
Tracev((stderr, "inflate: table sizes ok\n"));
|
Tracev((stderr, "inflate: table sizes ok\n"));
|
||||||
state->have = 0;
|
state->have = 0;
|
||||||
state->mode = LENLENS;
|
state->mode = LENLENS;
|
||||||
|
/* fallthrough */
|
||||||
case LENLENS:
|
case LENLENS:
|
||||||
while (state->have < state->ncode) {
|
while (state->have < state->ncode) {
|
||||||
NEEDBITS(3);
|
NEEDBITS(3);
|
||||||
|
@ -956,6 +935,7 @@ int flush;
|
||||||
Tracev((stderr, "inflate: code lengths ok\n"));
|
Tracev((stderr, "inflate: code lengths ok\n"));
|
||||||
state->have = 0;
|
state->have = 0;
|
||||||
state->mode = CODELENS;
|
state->mode = CODELENS;
|
||||||
|
/* fallthrough */
|
||||||
case CODELENS:
|
case CODELENS:
|
||||||
while (state->have < state->nlen + state->ndist) {
|
while (state->have < state->nlen + state->ndist) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -1039,8 +1019,10 @@ int flush;
|
||||||
Tracev((stderr, "inflate: codes ok\n"));
|
Tracev((stderr, "inflate: codes ok\n"));
|
||||||
state->mode = LEN_;
|
state->mode = LEN_;
|
||||||
if (flush == Z_TREES) goto inf_leave;
|
if (flush == Z_TREES) goto inf_leave;
|
||||||
|
/* fallthrough */
|
||||||
case LEN_:
|
case LEN_:
|
||||||
state->mode = LEN;
|
state->mode = LEN;
|
||||||
|
/* fallthrough */
|
||||||
case LEN:
|
case LEN:
|
||||||
if (have >= 6 && left >= 258) {
|
if (have >= 6 && left >= 258) {
|
||||||
RESTORE();
|
RESTORE();
|
||||||
|
@ -1090,6 +1072,7 @@ int flush;
|
||||||
}
|
}
|
||||||
state->extra = (unsigned)(here.op) & 15;
|
state->extra = (unsigned)(here.op) & 15;
|
||||||
state->mode = LENEXT;
|
state->mode = LENEXT;
|
||||||
|
/* fallthrough */
|
||||||
case LENEXT:
|
case LENEXT:
|
||||||
if (state->extra) {
|
if (state->extra) {
|
||||||
NEEDBITS(state->extra);
|
NEEDBITS(state->extra);
|
||||||
|
@ -1100,6 +1083,7 @@ int flush;
|
||||||
Tracevv((stderr, "inflate: length %u\n", state->length));
|
Tracevv((stderr, "inflate: length %u\n", state->length));
|
||||||
state->was = state->length;
|
state->was = state->length;
|
||||||
state->mode = DIST;
|
state->mode = DIST;
|
||||||
|
/* fallthrough */
|
||||||
case DIST:
|
case DIST:
|
||||||
for (;;) {
|
for (;;) {
|
||||||
here = state->distcode[BITS(state->distbits)];
|
here = state->distcode[BITS(state->distbits)];
|
||||||
|
@ -1127,6 +1111,7 @@ int flush;
|
||||||
state->offset = (unsigned)here.val;
|
state->offset = (unsigned)here.val;
|
||||||
state->extra = (unsigned)(here.op) & 15;
|
state->extra = (unsigned)(here.op) & 15;
|
||||||
state->mode = DISTEXT;
|
state->mode = DISTEXT;
|
||||||
|
/* fallthrough */
|
||||||
case DISTEXT:
|
case DISTEXT:
|
||||||
if (state->extra) {
|
if (state->extra) {
|
||||||
NEEDBITS(state->extra);
|
NEEDBITS(state->extra);
|
||||||
|
@ -1143,6 +1128,7 @@ int flush;
|
||||||
#endif
|
#endif
|
||||||
Tracevv((stderr, "inflate: distance %u\n", state->offset));
|
Tracevv((stderr, "inflate: distance %u\n", state->offset));
|
||||||
state->mode = MATCH;
|
state->mode = MATCH;
|
||||||
|
/* fallthrough */
|
||||||
case MATCH:
|
case MATCH:
|
||||||
if (left == 0) goto inf_leave;
|
if (left == 0) goto inf_leave;
|
||||||
copy = out - left;
|
copy = out - left;
|
||||||
|
@ -1202,7 +1188,7 @@ int flush;
|
||||||
state->total += out;
|
state->total += out;
|
||||||
if ((state->wrap & 4) && out)
|
if ((state->wrap & 4) && out)
|
||||||
strm->adler = state->check =
|
strm->adler = state->check =
|
||||||
UPDATE(state->check, put - out, out);
|
UPDATE_CHECK(state->check, put - out, out);
|
||||||
out = left;
|
out = left;
|
||||||
if ((state->wrap & 4) && (
|
if ((state->wrap & 4) && (
|
||||||
#ifdef GUNZIP
|
#ifdef GUNZIP
|
||||||
|
@ -1218,10 +1204,11 @@ int flush;
|
||||||
}
|
}
|
||||||
#ifdef GUNZIP
|
#ifdef GUNZIP
|
||||||
state->mode = LENGTH;
|
state->mode = LENGTH;
|
||||||
|
/* fallthrough */
|
||||||
case LENGTH:
|
case LENGTH:
|
||||||
if (state->wrap && state->flags) {
|
if (state->wrap && state->flags) {
|
||||||
NEEDBITS(32);
|
NEEDBITS(32);
|
||||||
if (hold != (state->total & 0xffffffffUL)) {
|
if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
|
||||||
strm->msg = (char *)"incorrect length check";
|
strm->msg = (char *)"incorrect length check";
|
||||||
state->mode = BAD;
|
state->mode = BAD;
|
||||||
break;
|
break;
|
||||||
|
@ -1231,6 +1218,7 @@ int flush;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
state->mode = DONE;
|
state->mode = DONE;
|
||||||
|
/* fallthrough */
|
||||||
case DONE:
|
case DONE:
|
||||||
ret = Z_STREAM_END;
|
ret = Z_STREAM_END;
|
||||||
goto inf_leave;
|
goto inf_leave;
|
||||||
|
@ -1240,6 +1228,7 @@ int flush;
|
||||||
case MEM:
|
case MEM:
|
||||||
return Z_MEM_ERROR;
|
return Z_MEM_ERROR;
|
||||||
case SYNC:
|
case SYNC:
|
||||||
|
/* fallthrough */
|
||||||
default:
|
default:
|
||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1265,7 +1254,7 @@ int flush;
|
||||||
state->total += out;
|
state->total += out;
|
||||||
if ((state->wrap & 4) && out)
|
if ((state->wrap & 4) && out)
|
||||||
strm->adler = state->check =
|
strm->adler = state->check =
|
||||||
UPDATE(state->check, strm->next_out - out, out);
|
UPDATE_CHECK(state->check, strm->next_out - out, out);
|
||||||
strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
|
strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
|
||||||
(state->mode == TYPE ? 128 : 0) +
|
(state->mode == TYPE ? 128 : 0) +
|
||||||
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
|
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
|
||||||
|
@ -1274,9 +1263,7 @@ int flush;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateEnd(strm)
|
int ZEXPORT inflateEnd(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
if (inflateStateCheck(strm))
|
if (inflateStateCheck(strm))
|
||||||
return Z_STREAM_ERROR;
|
return Z_STREAM_ERROR;
|
||||||
|
@ -1288,11 +1275,8 @@ z_streamp strm;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
|
int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary,
|
||||||
z_streamp strm;
|
uInt *dictLength) {
|
||||||
Bytef *dictionary;
|
|
||||||
uInt *dictLength;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
/* check state */
|
/* check state */
|
||||||
|
@ -1311,11 +1295,8 @@ uInt *dictLength;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
|
int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary,
|
||||||
z_streamp strm;
|
uInt dictLength) {
|
||||||
const Bytef *dictionary;
|
|
||||||
uInt dictLength;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
unsigned long dictid;
|
unsigned long dictid;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1346,10 +1327,7 @@ uInt dictLength;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateGetHeader(strm, head)
|
int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head) {
|
||||||
z_streamp strm;
|
|
||||||
gz_headerp head;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
/* check state */
|
/* check state */
|
||||||
|
@ -1374,11 +1352,8 @@ gz_headerp head;
|
||||||
called again with more data and the *have state. *have is initialized to
|
called again with more data and the *have state. *have is initialized to
|
||||||
zero for the first call.
|
zero for the first call.
|
||||||
*/
|
*/
|
||||||
local unsigned syncsearch(have, buf, len)
|
local unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf,
|
||||||
unsigned FAR *have;
|
unsigned len) {
|
||||||
const unsigned char FAR *buf;
|
|
||||||
unsigned len;
|
|
||||||
{
|
|
||||||
unsigned got;
|
unsigned got;
|
||||||
unsigned next;
|
unsigned next;
|
||||||
|
|
||||||
|
@ -1397,10 +1372,9 @@ unsigned len;
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateSync(strm)
|
int ZEXPORT inflateSync(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
unsigned len; /* number of bytes to look at or looked at */
|
unsigned len; /* number of bytes to look at or looked at */
|
||||||
|
int flags; /* temporary to save header status */
|
||||||
unsigned long in, out; /* temporary to save total_in and total_out */
|
unsigned long in, out; /* temporary to save total_in and total_out */
|
||||||
unsigned char buf[4]; /* to restore bit buffer to byte string */
|
unsigned char buf[4]; /* to restore bit buffer to byte string */
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
@ -1413,7 +1387,7 @@ z_streamp strm;
|
||||||
/* if first time, start search in bit buffer */
|
/* if first time, start search in bit buffer */
|
||||||
if (state->mode != SYNC) {
|
if (state->mode != SYNC) {
|
||||||
state->mode = SYNC;
|
state->mode = SYNC;
|
||||||
state->hold <<= state->bits & 7;
|
state->hold >>= state->bits & 7;
|
||||||
state->bits -= state->bits & 7;
|
state->bits -= state->bits & 7;
|
||||||
len = 0;
|
len = 0;
|
||||||
while (state->bits >= 8) {
|
while (state->bits >= 8) {
|
||||||
|
@ -1433,9 +1407,15 @@ z_streamp strm;
|
||||||
|
|
||||||
/* return no joy or set up to restart inflate() on a new block */
|
/* return no joy or set up to restart inflate() on a new block */
|
||||||
if (state->have != 4) return Z_DATA_ERROR;
|
if (state->have != 4) return Z_DATA_ERROR;
|
||||||
|
if (state->flags == -1)
|
||||||
|
state->wrap = 0; /* if no header yet, treat as raw */
|
||||||
|
else
|
||||||
|
state->wrap &= ~4; /* no point in computing a check value now */
|
||||||
|
flags = state->flags;
|
||||||
in = strm->total_in; out = strm->total_out;
|
in = strm->total_in; out = strm->total_out;
|
||||||
inflateReset(strm);
|
inflateReset(strm);
|
||||||
strm->total_in = in; strm->total_out = out;
|
strm->total_in = in; strm->total_out = out;
|
||||||
|
state->flags = flags;
|
||||||
state->mode = TYPE;
|
state->mode = TYPE;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
@ -1448,9 +1428,7 @@ z_streamp strm;
|
||||||
block. When decompressing, PPP checks that at the end of input packet,
|
block. When decompressing, PPP checks that at the end of input packet,
|
||||||
inflate is waiting for these length bytes.
|
inflate is waiting for these length bytes.
|
||||||
*/
|
*/
|
||||||
int ZEXPORT inflateSyncPoint(strm)
|
int ZEXPORT inflateSyncPoint(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
|
@ -1458,10 +1436,7 @@ z_streamp strm;
|
||||||
return state->mode == STORED && state->bits == 0;
|
return state->mode == STORED && state->bits == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateCopy(dest, source)
|
int ZEXPORT inflateCopy(z_streamp dest, z_streamp source) {
|
||||||
z_streamp dest;
|
|
||||||
z_streamp source;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
struct inflate_state FAR *copy;
|
struct inflate_state FAR *copy;
|
||||||
unsigned char FAR *window;
|
unsigned char FAR *window;
|
||||||
|
@ -1505,10 +1480,7 @@ z_streamp source;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateUndermine(strm, subvert)
|
int ZEXPORT inflateUndermine(z_streamp strm, int subvert) {
|
||||||
z_streamp strm;
|
|
||||||
int subvert;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
|
@ -1523,24 +1495,19 @@ int subvert;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT inflateValidate(strm, check)
|
int ZEXPORT inflateValidate(z_streamp strm, int check) {
|
||||||
z_streamp strm;
|
|
||||||
int check;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
state = (struct inflate_state FAR *)strm->state;
|
state = (struct inflate_state FAR *)strm->state;
|
||||||
if (check)
|
if (check && state->wrap)
|
||||||
state->wrap |= 4;
|
state->wrap |= 4;
|
||||||
else
|
else
|
||||||
state->wrap &= ~4;
|
state->wrap &= ~4;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
long ZEXPORT inflateMark(strm)
|
long ZEXPORT inflateMark(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
if (inflateStateCheck(strm))
|
if (inflateStateCheck(strm))
|
||||||
|
@ -1551,9 +1518,7 @@ z_streamp strm;
|
||||||
(state->mode == MATCH ? state->was - state->length : 0));
|
(state->mode == MATCH ? state->was - state->length : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long ZEXPORT inflateCodesUsed(strm)
|
unsigned long ZEXPORT inflateCodesUsed(z_streamp strm) {
|
||||||
z_streamp strm;
|
|
||||||
{
|
|
||||||
struct inflate_state FAR *state;
|
struct inflate_state FAR *state;
|
||||||
if (inflateStateCheck(strm)) return (unsigned long)-1;
|
if (inflateStateCheck(strm)) return (unsigned long)-1;
|
||||||
state = (struct inflate_state FAR *)strm->state;
|
state = (struct inflate_state FAR *)strm->state;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* inflate.h -- internal inflate state definition
|
/* inflate.h -- internal inflate state definition
|
||||||
* Copyright (C) 1995-2016 Mark Adler
|
* Copyright (C) 1995-2019 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -86,7 +86,8 @@ struct inflate_state {
|
||||||
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
|
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
|
||||||
bit 2 true to validate check value */
|
bit 2 true to validate check value */
|
||||||
int havedict; /* true if dictionary provided */
|
int havedict; /* true if dictionary provided */
|
||||||
int flags; /* gzip header method and flags (0 if zlib) */
|
int flags; /* gzip header method and flags, 0 if zlib, or
|
||||||
|
-1 if raw or no header yet */
|
||||||
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
|
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
|
||||||
unsigned long check; /* protected copy of check value */
|
unsigned long check; /* protected copy of check value */
|
||||||
unsigned long total; /* protected copy of output count */
|
unsigned long total; /* protected copy of output count */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* inftrees.c -- generate Huffman trees for efficient decoding
|
/* inftrees.c -- generate Huffman trees for efficient decoding
|
||||||
* Copyright (C) 1995-2017 Mark Adler
|
* Copyright (C) 1995-2024 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
#define MAXBITS 15
|
#define MAXBITS 15
|
||||||
|
|
||||||
const char inflate_copyright[] =
|
const char inflate_copyright[] =
|
||||||
" inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
|
" inflate 1.3.1 Copyright 1995-2024 Mark Adler ";
|
||||||
/*
|
/*
|
||||||
If you use the zlib library in a product, an acknowledgment is welcome
|
If you use the zlib library in a product, an acknowledgment is welcome
|
||||||
in the documentation of your product. If for some reason you cannot
|
in the documentation of your product. If for some reason you cannot
|
||||||
|
@ -29,14 +29,9 @@ const char inflate_copyright[] =
|
||||||
table index bits. It will differ if the request is greater than the
|
table index bits. It will differ if the request is greater than the
|
||||||
longest code or if it is less than the shortest code.
|
longest code or if it is less than the shortest code.
|
||||||
*/
|
*/
|
||||||
int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
|
int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens,
|
||||||
codetype type;
|
unsigned codes, code FAR * FAR *table,
|
||||||
unsigned short FAR *lens;
|
unsigned FAR *bits, unsigned short FAR *work) {
|
||||||
unsigned codes;
|
|
||||||
code FAR * FAR *table;
|
|
||||||
unsigned FAR *bits;
|
|
||||||
unsigned short FAR *work;
|
|
||||||
{
|
|
||||||
unsigned len; /* a code's length in bits */
|
unsigned len; /* a code's length in bits */
|
||||||
unsigned sym; /* index of code symbols */
|
unsigned sym; /* index of code symbols */
|
||||||
unsigned min, max; /* minimum and maximum code lengths */
|
unsigned min, max; /* minimum and maximum code lengths */
|
||||||
|
@ -62,7 +57,7 @@ unsigned short FAR *work;
|
||||||
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
||||||
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
||||||
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
||||||
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
|
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77};
|
||||||
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
||||||
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
||||||
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
||||||
|
|
|
@ -38,11 +38,11 @@ typedef struct {
|
||||||
/* Maximum size of the dynamic table. The maximum number of code structures is
|
/* Maximum size of the dynamic table. The maximum number of code structures is
|
||||||
1444, which is the sum of 852 for literal/length codes and 592 for distance
|
1444, which is the sum of 852 for literal/length codes and 592 for distance
|
||||||
codes. These values were found by exhaustive searches using the program
|
codes. These values were found by exhaustive searches using the program
|
||||||
examples/enough.c found in the zlib distribtution. The arguments to that
|
examples/enough.c found in the zlib distribution. The arguments to that
|
||||||
program are the number of symbols, the initial root table size, and the
|
program are the number of symbols, the initial root table size, and the
|
||||||
maximum bit length of a code. "enough 286 9 15" for literal/length codes
|
maximum bit length of a code. "enough 286 9 15" for literal/length codes
|
||||||
returns returns 852, and "enough 30 6 15" for distance codes returns 592.
|
returns 852, and "enough 30 6 15" for distance codes returns 592. The
|
||||||
The initial root table size (9 or 6) is found in the fifth argument of the
|
initial root table size (9 or 6) is found in the fifth argument of the
|
||||||
inflate_table() calls in inflate.c and infback.c. If the root table size is
|
inflate_table() calls in inflate.c and infback.c. If the root table size is
|
||||||
changed, then these maximum sizes would be need to be recalculated and
|
changed, then these maximum sizes would be need to be recalculated and
|
||||||
updated. */
|
updated. */
|
||||||
|
@ -57,6 +57,6 @@ typedef enum {
|
||||||
DISTS
|
DISTS
|
||||||
} codetype;
|
} codetype;
|
||||||
|
|
||||||
int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
|
int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens,
|
||||||
unsigned codes, code FAR * FAR *table,
|
unsigned codes, code FAR * FAR *table,
|
||||||
unsigned FAR *bits, unsigned short FAR *work));
|
unsigned FAR *bits, unsigned short FAR *work);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* trees.c -- output deflated data using Huffman coding
|
/* trees.c -- output deflated data using Huffman coding
|
||||||
* Copyright (C) 1995-2017 Jean-loup Gailly
|
* Copyright (C) 1995-2024 Jean-loup Gailly
|
||||||
* detect_data_type() function provided freely by Cosmin Truta, 2006
|
* detect_data_type() function provided freely by Cosmin Truta, 2006
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
@ -122,39 +122,116 @@ struct static_tree_desc_s {
|
||||||
int max_length; /* max bit length for the codes */
|
int max_length; /* max bit length for the codes */
|
||||||
};
|
};
|
||||||
|
|
||||||
local const static_tree_desc static_l_desc =
|
#ifdef NO_INIT_GLOBAL_POINTERS
|
||||||
|
# define TCONST
|
||||||
|
#else
|
||||||
|
# define TCONST const
|
||||||
|
#endif
|
||||||
|
|
||||||
|
local TCONST static_tree_desc static_l_desc =
|
||||||
{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
|
{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
|
||||||
|
|
||||||
local const static_tree_desc static_d_desc =
|
local TCONST static_tree_desc static_d_desc =
|
||||||
{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
|
{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
|
||||||
|
|
||||||
local const static_tree_desc static_bl_desc =
|
local TCONST static_tree_desc static_bl_desc =
|
||||||
{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
|
{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Local (static) routines in this file.
|
* Output a short LSB first on the stream.
|
||||||
|
* IN assertion: there is enough room in pendingBuf.
|
||||||
*/
|
*/
|
||||||
|
#define put_short(s, w) { \
|
||||||
|
put_byte(s, (uch)((w) & 0xff)); \
|
||||||
|
put_byte(s, (uch)((ush)(w) >> 8)); \
|
||||||
|
}
|
||||||
|
|
||||||
local void tr_static_init OF((void));
|
/* ===========================================================================
|
||||||
local void init_block OF((deflate_state *s));
|
* Reverse the first len bits of a code, using straightforward code (a faster
|
||||||
local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
|
* method would use a table)
|
||||||
local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
|
* IN assertion: 1 <= len <= 15
|
||||||
local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
|
*/
|
||||||
local void build_tree OF((deflate_state *s, tree_desc *desc));
|
local unsigned bi_reverse(unsigned code, int len) {
|
||||||
local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
|
register unsigned res = 0;
|
||||||
local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
|
do {
|
||||||
local int build_bl_tree OF((deflate_state *s));
|
res |= code & 1;
|
||||||
local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
|
code >>= 1, res <<= 1;
|
||||||
int blcodes));
|
} while (--len > 0);
|
||||||
local void compress_block OF((deflate_state *s, const ct_data *ltree,
|
return res >> 1;
|
||||||
const ct_data *dtree));
|
}
|
||||||
local int detect_data_type OF((deflate_state *s));
|
|
||||||
local unsigned bi_reverse OF((unsigned value, int length));
|
/* ===========================================================================
|
||||||
local void bi_windup OF((deflate_state *s));
|
* Flush the bit buffer, keeping at most 7 bits in it.
|
||||||
local void bi_flush OF((deflate_state *s));
|
*/
|
||||||
|
local void bi_flush(deflate_state *s) {
|
||||||
|
if (s->bi_valid == 16) {
|
||||||
|
put_short(s, s->bi_buf);
|
||||||
|
s->bi_buf = 0;
|
||||||
|
s->bi_valid = 0;
|
||||||
|
} else if (s->bi_valid >= 8) {
|
||||||
|
put_byte(s, (Byte)s->bi_buf);
|
||||||
|
s->bi_buf >>= 8;
|
||||||
|
s->bi_valid -= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
* Flush the bit buffer and align the output on a byte boundary
|
||||||
|
*/
|
||||||
|
local void bi_windup(deflate_state *s) {
|
||||||
|
if (s->bi_valid > 8) {
|
||||||
|
put_short(s, s->bi_buf);
|
||||||
|
} else if (s->bi_valid > 0) {
|
||||||
|
put_byte(s, (Byte)s->bi_buf);
|
||||||
|
}
|
||||||
|
s->bi_buf = 0;
|
||||||
|
s->bi_valid = 0;
|
||||||
|
#ifdef ZLIB_DEBUG
|
||||||
|
s->bits_sent = (s->bits_sent + 7) & ~7;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
* Generate the codes for a given tree and bit counts (which need not be
|
||||||
|
* optimal).
|
||||||
|
* IN assertion: the array bl_count contains the bit length statistics for
|
||||||
|
* the given tree and the field len is set for all tree elements.
|
||||||
|
* OUT assertion: the field code is set for all tree elements of non
|
||||||
|
* zero code length.
|
||||||
|
*/
|
||||||
|
local void gen_codes(ct_data *tree, int max_code, ushf *bl_count) {
|
||||||
|
ush next_code[MAX_BITS+1]; /* next code value for each bit length */
|
||||||
|
unsigned code = 0; /* running code value */
|
||||||
|
int bits; /* bit index */
|
||||||
|
int n; /* code index */
|
||||||
|
|
||||||
|
/* The distribution counts are first used to generate the code values
|
||||||
|
* without bit reversal.
|
||||||
|
*/
|
||||||
|
for (bits = 1; bits <= MAX_BITS; bits++) {
|
||||||
|
code = (code + bl_count[bits - 1]) << 1;
|
||||||
|
next_code[bits] = (ush)code;
|
||||||
|
}
|
||||||
|
/* Check that the bit counts in bl_count are consistent. The last code
|
||||||
|
* must be all ones.
|
||||||
|
*/
|
||||||
|
Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1,
|
||||||
|
"inconsistent bit counts");
|
||||||
|
Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
|
||||||
|
|
||||||
|
for (n = 0; n <= max_code; n++) {
|
||||||
|
int len = tree[n].Len;
|
||||||
|
if (len == 0) continue;
|
||||||
|
/* Now reverse the bits */
|
||||||
|
tree[n].Code = (ush)bi_reverse(next_code[len]++, len);
|
||||||
|
|
||||||
|
Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
|
||||||
|
n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef GEN_TREES_H
|
#ifdef GEN_TREES_H
|
||||||
local void gen_trees_header OF((void));
|
local void gen_trees_header(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ZLIB_DEBUG
|
#ifndef ZLIB_DEBUG
|
||||||
|
@ -167,27 +244,12 @@ local void gen_trees_header OF((void));
|
||||||
send_bits(s, tree[c].Code, tree[c].Len); }
|
send_bits(s, tree[c].Code, tree[c].Len); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Output a short LSB first on the stream.
|
|
||||||
* IN assertion: there is enough room in pendingBuf.
|
|
||||||
*/
|
|
||||||
#define put_short(s, w) { \
|
|
||||||
put_byte(s, (uch)((w) & 0xff)); \
|
|
||||||
put_byte(s, (uch)((ush)(w) >> 8)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Send a value on a given number of bits.
|
* Send a value on a given number of bits.
|
||||||
* IN assertion: length <= 16 and value fits in length bits.
|
* IN assertion: length <= 16 and value fits in length bits.
|
||||||
*/
|
*/
|
||||||
#ifdef ZLIB_DEBUG
|
#ifdef ZLIB_DEBUG
|
||||||
local void send_bits OF((deflate_state *s, int value, int length));
|
local void send_bits(deflate_state *s, int value, int length) {
|
||||||
|
|
||||||
local void send_bits(s, value, length)
|
|
||||||
deflate_state *s;
|
|
||||||
int value; /* value to send */
|
|
||||||
int length; /* number of bits */
|
|
||||||
{
|
|
||||||
Tracevv((stderr," l %2d v %4x ", length, value));
|
Tracevv((stderr," l %2d v %4x ", length, value));
|
||||||
Assert(length > 0 && length <= 15, "invalid length");
|
Assert(length > 0 && length <= 15, "invalid length");
|
||||||
s->bits_sent += (ulg)length;
|
s->bits_sent += (ulg)length;
|
||||||
|
@ -229,8 +291,7 @@ local void send_bits(s, value, length)
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Initialize the various 'constant' tables.
|
* Initialize the various 'constant' tables.
|
||||||
*/
|
*/
|
||||||
local void tr_static_init()
|
local void tr_static_init(void) {
|
||||||
{
|
|
||||||
#if defined(GEN_TREES_H) || !defined(STDC)
|
#if defined(GEN_TREES_H) || !defined(STDC)
|
||||||
static int static_init_done = 0;
|
static int static_init_done = 0;
|
||||||
int n; /* iterates over tree elements */
|
int n; /* iterates over tree elements */
|
||||||
|
@ -312,7 +373,7 @@ local void tr_static_init()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Genererate the file trees.h describing the static trees.
|
* Generate the file trees.h describing the static trees.
|
||||||
*/
|
*/
|
||||||
#ifdef GEN_TREES_H
|
#ifdef GEN_TREES_H
|
||||||
# ifndef ZLIB_DEBUG
|
# ifndef ZLIB_DEBUG
|
||||||
|
@ -323,8 +384,7 @@ local void tr_static_init()
|
||||||
((i) == (last)? "\n};\n\n" : \
|
((i) == (last)? "\n};\n\n" : \
|
||||||
((i) % (width) == (width) - 1 ? ",\n" : ", "))
|
((i) % (width) == (width) - 1 ? ",\n" : ", "))
|
||||||
|
|
||||||
void gen_trees_header()
|
void gen_trees_header(void) {
|
||||||
{
|
|
||||||
FILE *header = fopen("trees.h", "w");
|
FILE *header = fopen("trees.h", "w");
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -373,12 +433,26 @@ void gen_trees_header()
|
||||||
}
|
}
|
||||||
#endif /* GEN_TREES_H */
|
#endif /* GEN_TREES_H */
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
* Initialize a new block.
|
||||||
|
*/
|
||||||
|
local void init_block(deflate_state *s) {
|
||||||
|
int n; /* iterates over tree elements */
|
||||||
|
|
||||||
|
/* Initialize the trees. */
|
||||||
|
for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
|
||||||
|
for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
|
||||||
|
for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
|
||||||
|
|
||||||
|
s->dyn_ltree[END_BLOCK].Freq = 1;
|
||||||
|
s->opt_len = s->static_len = 0L;
|
||||||
|
s->sym_next = s->matches = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Initialize the tree data structures for a new zlib stream.
|
* Initialize the tree data structures for a new zlib stream.
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL _tr_init(s)
|
void ZLIB_INTERNAL _tr_init(deflate_state *s) {
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
tr_static_init();
|
tr_static_init();
|
||||||
|
|
||||||
s->l_desc.dyn_tree = s->dyn_ltree;
|
s->l_desc.dyn_tree = s->dyn_ltree;
|
||||||
|
@ -401,24 +475,6 @@ void ZLIB_INTERNAL _tr_init(s)
|
||||||
init_block(s);
|
init_block(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Initialize a new block.
|
|
||||||
*/
|
|
||||||
local void init_block(s)
|
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
int n; /* iterates over tree elements */
|
|
||||||
|
|
||||||
/* Initialize the trees. */
|
|
||||||
for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
|
|
||||||
for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
|
|
||||||
for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
|
|
||||||
|
|
||||||
s->dyn_ltree[END_BLOCK].Freq = 1;
|
|
||||||
s->opt_len = s->static_len = 0L;
|
|
||||||
s->last_lit = s->matches = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SMALLEST 1
|
#define SMALLEST 1
|
||||||
/* Index within the heap array of least frequent node in the Huffman tree */
|
/* Index within the heap array of least frequent node in the Huffman tree */
|
||||||
|
|
||||||
|
@ -448,11 +504,7 @@ local void init_block(s)
|
||||||
* when the heap property is re-established (each father smaller than its
|
* when the heap property is re-established (each father smaller than its
|
||||||
* two sons).
|
* two sons).
|
||||||
*/
|
*/
|
||||||
local void pqdownheap(s, tree, k)
|
local void pqdownheap(deflate_state *s, ct_data *tree, int k) {
|
||||||
deflate_state *s;
|
|
||||||
ct_data *tree; /* the tree to restore */
|
|
||||||
int k; /* node to move down */
|
|
||||||
{
|
|
||||||
int v = s->heap[k];
|
int v = s->heap[k];
|
||||||
int j = k << 1; /* left son of k */
|
int j = k << 1; /* left son of k */
|
||||||
while (j <= s->heap_len) {
|
while (j <= s->heap_len) {
|
||||||
|
@ -483,10 +535,7 @@ local void pqdownheap(s, tree, k)
|
||||||
* The length opt_len is updated; static_len is also updated if stree is
|
* The length opt_len is updated; static_len is also updated if stree is
|
||||||
* not null.
|
* not null.
|
||||||
*/
|
*/
|
||||||
local void gen_bitlen(s, desc)
|
local void gen_bitlen(deflate_state *s, tree_desc *desc) {
|
||||||
deflate_state *s;
|
|
||||||
tree_desc *desc; /* the tree descriptor */
|
|
||||||
{
|
|
||||||
ct_data *tree = desc->dyn_tree;
|
ct_data *tree = desc->dyn_tree;
|
||||||
int max_code = desc->max_code;
|
int max_code = desc->max_code;
|
||||||
const ct_data *stree = desc->stat_desc->static_tree;
|
const ct_data *stree = desc->stat_desc->static_tree;
|
||||||
|
@ -561,48 +610,9 @@ local void gen_bitlen(s, desc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
#ifdef DUMP_BL_TREE
|
||||||
* Generate the codes for a given tree and bit counts (which need not be
|
# include <stdio.h>
|
||||||
* optimal).
|
#endif
|
||||||
* IN assertion: the array bl_count contains the bit length statistics for
|
|
||||||
* the given tree and the field len is set for all tree elements.
|
|
||||||
* OUT assertion: the field code is set for all tree elements of non
|
|
||||||
* zero code length.
|
|
||||||
*/
|
|
||||||
local void gen_codes (tree, max_code, bl_count)
|
|
||||||
ct_data *tree; /* the tree to decorate */
|
|
||||||
int max_code; /* largest code with non zero frequency */
|
|
||||||
ushf *bl_count; /* number of codes at each bit length */
|
|
||||||
{
|
|
||||||
ush next_code[MAX_BITS+1]; /* next code value for each bit length */
|
|
||||||
unsigned code = 0; /* running code value */
|
|
||||||
int bits; /* bit index */
|
|
||||||
int n; /* code index */
|
|
||||||
|
|
||||||
/* The distribution counts are first used to generate the code values
|
|
||||||
* without bit reversal.
|
|
||||||
*/
|
|
||||||
for (bits = 1; bits <= MAX_BITS; bits++) {
|
|
||||||
code = (code + bl_count[bits-1]) << 1;
|
|
||||||
next_code[bits] = (ush)code;
|
|
||||||
}
|
|
||||||
/* Check that the bit counts in bl_count are consistent. The last code
|
|
||||||
* must be all ones.
|
|
||||||
*/
|
|
||||||
Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
|
|
||||||
"inconsistent bit counts");
|
|
||||||
Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
|
|
||||||
|
|
||||||
for (n = 0; n <= max_code; n++) {
|
|
||||||
int len = tree[n].Len;
|
|
||||||
if (len == 0) continue;
|
|
||||||
/* Now reverse the bits */
|
|
||||||
tree[n].Code = (ush)bi_reverse(next_code[len]++, len);
|
|
||||||
|
|
||||||
Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
|
|
||||||
n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Construct one Huffman tree and assigns the code bit strings and lengths.
|
* Construct one Huffman tree and assigns the code bit strings and lengths.
|
||||||
|
@ -612,10 +622,7 @@ local void gen_codes (tree, max_code, bl_count)
|
||||||
* and corresponding code. The length opt_len is updated; static_len is
|
* and corresponding code. The length opt_len is updated; static_len is
|
||||||
* also updated if stree is not null. The field max_code is set.
|
* also updated if stree is not null. The field max_code is set.
|
||||||
*/
|
*/
|
||||||
local void build_tree(s, desc)
|
local void build_tree(deflate_state *s, tree_desc *desc) {
|
||||||
deflate_state *s;
|
|
||||||
tree_desc *desc; /* the tree descriptor */
|
|
||||||
{
|
|
||||||
ct_data *tree = desc->dyn_tree;
|
ct_data *tree = desc->dyn_tree;
|
||||||
const ct_data *stree = desc->stat_desc->static_tree;
|
const ct_data *stree = desc->stat_desc->static_tree;
|
||||||
int elems = desc->stat_desc->elems;
|
int elems = desc->stat_desc->elems;
|
||||||
|
@ -700,11 +707,7 @@ local void build_tree(s, desc)
|
||||||
* Scan a literal or distance tree to determine the frequencies of the codes
|
* Scan a literal or distance tree to determine the frequencies of the codes
|
||||||
* in the bit length tree.
|
* in the bit length tree.
|
||||||
*/
|
*/
|
||||||
local void scan_tree (s, tree, max_code)
|
local void scan_tree(deflate_state *s, ct_data *tree, int max_code) {
|
||||||
deflate_state *s;
|
|
||||||
ct_data *tree; /* the tree to be scanned */
|
|
||||||
int max_code; /* and its largest code of non zero frequency */
|
|
||||||
{
|
|
||||||
int n; /* iterates over all tree elements */
|
int n; /* iterates over all tree elements */
|
||||||
int prevlen = -1; /* last emitted length */
|
int prevlen = -1; /* last emitted length */
|
||||||
int curlen; /* length of current code */
|
int curlen; /* length of current code */
|
||||||
|
@ -745,11 +748,7 @@ local void scan_tree (s, tree, max_code)
|
||||||
* Send a literal or distance tree in compressed form, using the codes in
|
* Send a literal or distance tree in compressed form, using the codes in
|
||||||
* bl_tree.
|
* bl_tree.
|
||||||
*/
|
*/
|
||||||
local void send_tree (s, tree, max_code)
|
local void send_tree(deflate_state *s, ct_data *tree, int max_code) {
|
||||||
deflate_state *s;
|
|
||||||
ct_data *tree; /* the tree to be scanned */
|
|
||||||
int max_code; /* and its largest code of non zero frequency */
|
|
||||||
{
|
|
||||||
int n; /* iterates over all tree elements */
|
int n; /* iterates over all tree elements */
|
||||||
int prevlen = -1; /* last emitted length */
|
int prevlen = -1; /* last emitted length */
|
||||||
int curlen; /* length of current code */
|
int curlen; /* length of current code */
|
||||||
|
@ -796,9 +795,7 @@ local void send_tree (s, tree, max_code)
|
||||||
* Construct the Huffman tree for the bit lengths and return the index in
|
* Construct the Huffman tree for the bit lengths and return the index in
|
||||||
* bl_order of the last bit length code to send.
|
* bl_order of the last bit length code to send.
|
||||||
*/
|
*/
|
||||||
local int build_bl_tree(s)
|
local int build_bl_tree(deflate_state *s) {
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
int max_blindex; /* index of last bit length code of non zero freq */
|
int max_blindex; /* index of last bit length code of non zero freq */
|
||||||
|
|
||||||
/* Determine the bit length frequencies for literal and distance trees */
|
/* Determine the bit length frequencies for literal and distance trees */
|
||||||
|
@ -807,8 +804,8 @@ local int build_bl_tree(s)
|
||||||
|
|
||||||
/* Build the bit length tree: */
|
/* Build the bit length tree: */
|
||||||
build_tree(s, (tree_desc *)(&(s->bl_desc)));
|
build_tree(s, (tree_desc *)(&(s->bl_desc)));
|
||||||
/* opt_len now includes the length of the tree representations, except
|
/* opt_len now includes the length of the tree representations, except the
|
||||||
* the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
|
* lengths of the bit lengths codes and the 5 + 5 + 4 bits for the counts.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Determine the number of bit length codes to send. The pkzip format
|
/* Determine the number of bit length codes to send. The pkzip format
|
||||||
|
@ -831,10 +828,8 @@ local int build_bl_tree(s)
|
||||||
* lengths of the bit length codes, the literal tree and the distance tree.
|
* lengths of the bit length codes, the literal tree and the distance tree.
|
||||||
* IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
|
* IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
|
||||||
*/
|
*/
|
||||||
local void send_all_trees(s, lcodes, dcodes, blcodes)
|
local void send_all_trees(deflate_state *s, int lcodes, int dcodes,
|
||||||
deflate_state *s;
|
int blcodes) {
|
||||||
int lcodes, dcodes, blcodes; /* number of codes for each tree */
|
|
||||||
{
|
|
||||||
int rank; /* index in bl_order */
|
int rank; /* index in bl_order */
|
||||||
|
|
||||||
Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
|
Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
|
||||||
|
@ -860,16 +855,13 @@ local void send_all_trees(s, lcodes, dcodes, blcodes)
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Send a stored block
|
* Send a stored block
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
|
void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf,
|
||||||
deflate_state *s;
|
ulg stored_len, int last) {
|
||||||
charf *buf; /* input block */
|
|
||||||
ulg stored_len; /* length of input block */
|
|
||||||
int last; /* one if this is the last block for a file */
|
|
||||||
{
|
|
||||||
send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */
|
send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */
|
||||||
bi_windup(s); /* align on byte boundary */
|
bi_windup(s); /* align on byte boundary */
|
||||||
put_short(s, (ush)stored_len);
|
put_short(s, (ush)stored_len);
|
||||||
put_short(s, (ush)~stored_len);
|
put_short(s, (ush)~stored_len);
|
||||||
|
if (stored_len)
|
||||||
zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
|
zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
|
||||||
s->pending += stored_len;
|
s->pending += stored_len;
|
||||||
#ifdef ZLIB_DEBUG
|
#ifdef ZLIB_DEBUG
|
||||||
|
@ -883,9 +875,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
|
* Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL _tr_flush_bits(s)
|
void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s) {
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
bi_flush(s);
|
bi_flush(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -893,9 +883,7 @@ void ZLIB_INTERNAL _tr_flush_bits(s)
|
||||||
* Send one empty static block to give enough lookahead for inflate.
|
* Send one empty static block to give enough lookahead for inflate.
|
||||||
* This takes 10 bits, of which 7 may remain in the bit buffer.
|
* This takes 10 bits, of which 7 may remain in the bit buffer.
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL _tr_align(s)
|
void ZLIB_INTERNAL _tr_align(deflate_state *s) {
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
send_bits(s, STATIC_TREES<<1, 3);
|
send_bits(s, STATIC_TREES<<1, 3);
|
||||||
send_code(s, END_BLOCK, static_ltree);
|
send_code(s, END_BLOCK, static_ltree);
|
||||||
#ifdef ZLIB_DEBUG
|
#ifdef ZLIB_DEBUG
|
||||||
|
@ -904,16 +892,108 @@ void ZLIB_INTERNAL _tr_align(s)
|
||||||
bi_flush(s);
|
bi_flush(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
* Send the block data compressed using the given Huffman trees
|
||||||
|
*/
|
||||||
|
local void compress_block(deflate_state *s, const ct_data *ltree,
|
||||||
|
const ct_data *dtree) {
|
||||||
|
unsigned dist; /* distance of matched string */
|
||||||
|
int lc; /* match length or unmatched char (if dist == 0) */
|
||||||
|
unsigned sx = 0; /* running index in symbol buffers */
|
||||||
|
unsigned code; /* the code to send */
|
||||||
|
int extra; /* number of extra bits to send */
|
||||||
|
|
||||||
|
if (s->sym_next != 0) do {
|
||||||
|
#ifdef LIT_MEM
|
||||||
|
dist = s->d_buf[sx];
|
||||||
|
lc = s->l_buf[sx++];
|
||||||
|
#else
|
||||||
|
dist = s->sym_buf[sx++] & 0xff;
|
||||||
|
dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
|
||||||
|
lc = s->sym_buf[sx++];
|
||||||
|
#endif
|
||||||
|
if (dist == 0) {
|
||||||
|
send_code(s, lc, ltree); /* send a literal byte */
|
||||||
|
Tracecv(isgraph(lc), (stderr," '%c' ", lc));
|
||||||
|
} else {
|
||||||
|
/* Here, lc is the match length - MIN_MATCH */
|
||||||
|
code = _length_code[lc];
|
||||||
|
send_code(s, code + LITERALS + 1, ltree); /* send length code */
|
||||||
|
extra = extra_lbits[code];
|
||||||
|
if (extra != 0) {
|
||||||
|
lc -= base_length[code];
|
||||||
|
send_bits(s, lc, extra); /* send the extra length bits */
|
||||||
|
}
|
||||||
|
dist--; /* dist is now the match distance - 1 */
|
||||||
|
code = d_code(dist);
|
||||||
|
Assert (code < D_CODES, "bad d_code");
|
||||||
|
|
||||||
|
send_code(s, code, dtree); /* send the distance code */
|
||||||
|
extra = extra_dbits[code];
|
||||||
|
if (extra != 0) {
|
||||||
|
dist -= (unsigned)base_dist[code];
|
||||||
|
send_bits(s, dist, extra); /* send the extra distance bits */
|
||||||
|
}
|
||||||
|
} /* literal or match pair ? */
|
||||||
|
|
||||||
|
/* Check for no overlay of pending_buf on needed symbols */
|
||||||
|
#ifdef LIT_MEM
|
||||||
|
Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow");
|
||||||
|
#else
|
||||||
|
Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} while (sx < s->sym_next);
|
||||||
|
|
||||||
|
send_code(s, END_BLOCK, ltree);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
* Check if the data type is TEXT or BINARY, using the following algorithm:
|
||||||
|
* - TEXT if the two conditions below are satisfied:
|
||||||
|
* a) There are no non-portable control characters belonging to the
|
||||||
|
* "block list" (0..6, 14..25, 28..31).
|
||||||
|
* b) There is at least one printable character belonging to the
|
||||||
|
* "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
|
||||||
|
* - BINARY otherwise.
|
||||||
|
* - The following partially-portable control characters form a
|
||||||
|
* "gray list" that is ignored in this detection algorithm:
|
||||||
|
* (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
|
||||||
|
* IN assertion: the fields Freq of dyn_ltree are set.
|
||||||
|
*/
|
||||||
|
local int detect_data_type(deflate_state *s) {
|
||||||
|
/* block_mask is the bit mask of block-listed bytes
|
||||||
|
* set bits 0..6, 14..25, and 28..31
|
||||||
|
* 0xf3ffc07f = binary 11110011111111111100000001111111
|
||||||
|
*/
|
||||||
|
unsigned long block_mask = 0xf3ffc07fUL;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
/* Check for non-textual ("block-listed") bytes. */
|
||||||
|
for (n = 0; n <= 31; n++, block_mask >>= 1)
|
||||||
|
if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0))
|
||||||
|
return Z_BINARY;
|
||||||
|
|
||||||
|
/* Check for textual ("allow-listed") bytes. */
|
||||||
|
if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
|
||||||
|
|| s->dyn_ltree[13].Freq != 0)
|
||||||
|
return Z_TEXT;
|
||||||
|
for (n = 32; n < LITERALS; n++)
|
||||||
|
if (s->dyn_ltree[n].Freq != 0)
|
||||||
|
return Z_TEXT;
|
||||||
|
|
||||||
|
/* There are no "block-listed" or "allow-listed" bytes:
|
||||||
|
* this stream either is empty or has tolerated ("gray-listed") bytes only.
|
||||||
|
*/
|
||||||
|
return Z_BINARY;
|
||||||
|
}
|
||||||
|
|
||||||
/* ===========================================================================
|
/* ===========================================================================
|
||||||
* Determine the best encoding for the current block: dynamic trees, static
|
* Determine the best encoding for the current block: dynamic trees, static
|
||||||
* trees or store, and write out the encoded block.
|
* trees or store, and write out the encoded block.
|
||||||
*/
|
*/
|
||||||
void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
|
void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf,
|
||||||
deflate_state *s;
|
ulg stored_len, int last) {
|
||||||
charf *buf; /* input block, or NULL if too old */
|
|
||||||
ulg stored_len; /* length of input block */
|
|
||||||
int last; /* one if this is the last block for a file */
|
|
||||||
{
|
|
||||||
ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
|
ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
|
||||||
int max_blindex = 0; /* index of last bit length code of non zero freq */
|
int max_blindex = 0; /* index of last bit length code of non zero freq */
|
||||||
|
|
||||||
|
@ -947,9 +1027,12 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
|
||||||
|
|
||||||
Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
|
Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
|
||||||
opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
|
opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
|
||||||
s->last_lit));
|
s->sym_next / 3));
|
||||||
|
|
||||||
if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
|
#ifndef FORCE_STATIC
|
||||||
|
if (static_lenb <= opt_lenb || s->strategy == Z_FIXED)
|
||||||
|
#endif
|
||||||
|
opt_lenb = static_lenb;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Assert(buf != (char*)0, "lost buf");
|
Assert(buf != (char*)0, "lost buf");
|
||||||
|
@ -970,11 +1053,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
|
||||||
*/
|
*/
|
||||||
_tr_stored_block(s, buf, stored_len, last);
|
_tr_stored_block(s, buf, stored_len, last);
|
||||||
|
|
||||||
#ifdef FORCE_STATIC
|
} else if (static_lenb == opt_lenb) {
|
||||||
} else if (static_lenb >= 0) { /* force static trees */
|
|
||||||
#else
|
|
||||||
} else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
|
|
||||||
#endif
|
|
||||||
send_bits(s, (STATIC_TREES<<1) + last, 3);
|
send_bits(s, (STATIC_TREES<<1) + last, 3);
|
||||||
compress_block(s, (const ct_data *)static_ltree,
|
compress_block(s, (const ct_data *)static_ltree,
|
||||||
(const ct_data *)static_dtree);
|
(const ct_data *)static_dtree);
|
||||||
|
@ -1011,13 +1090,15 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
|
||||||
* Save the match info and tally the frequency counts. Return true if
|
* Save the match info and tally the frequency counts. Return true if
|
||||||
* the current block must be flushed.
|
* the current block must be flushed.
|
||||||
*/
|
*/
|
||||||
int ZLIB_INTERNAL _tr_tally (s, dist, lc)
|
int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) {
|
||||||
deflate_state *s;
|
#ifdef LIT_MEM
|
||||||
unsigned dist; /* distance of matched string */
|
s->d_buf[s->sym_next] = (ush)dist;
|
||||||
unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
|
s->l_buf[s->sym_next++] = (uch)lc;
|
||||||
{
|
#else
|
||||||
s->d_buf[s->last_lit] = (ush)dist;
|
s->sym_buf[s->sym_next++] = (uch)dist;
|
||||||
s->l_buf[s->last_lit++] = (uch)lc;
|
s->sym_buf[s->sym_next++] = (uch)(dist >> 8);
|
||||||
|
s->sym_buf[s->sym_next++] = (uch)lc;
|
||||||
|
#endif
|
||||||
if (dist == 0) {
|
if (dist == 0) {
|
||||||
/* lc is the unmatched char */
|
/* lc is the unmatched char */
|
||||||
s->dyn_ltree[lc].Freq++;
|
s->dyn_ltree[lc].Freq++;
|
||||||
|
@ -1032,172 +1113,5 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
|
||||||
s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++;
|
s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++;
|
||||||
s->dyn_dtree[d_code(dist)].Freq++;
|
s->dyn_dtree[d_code(dist)].Freq++;
|
||||||
}
|
}
|
||||||
|
return (s->sym_next == s->sym_end);
|
||||||
#ifdef TRUNCATE_BLOCK
|
|
||||||
/* Try to guess if it is profitable to stop the current block here */
|
|
||||||
if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
|
|
||||||
/* Compute an upper bound for the compressed length */
|
|
||||||
ulg out_length = (ulg)s->last_lit*8L;
|
|
||||||
ulg in_length = (ulg)((long)s->strstart - s->block_start);
|
|
||||||
int dcode;
|
|
||||||
for (dcode = 0; dcode < D_CODES; dcode++) {
|
|
||||||
out_length += (ulg)s->dyn_dtree[dcode].Freq *
|
|
||||||
(5L+extra_dbits[dcode]);
|
|
||||||
}
|
|
||||||
out_length >>= 3;
|
|
||||||
Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
|
|
||||||
s->last_lit, in_length, out_length,
|
|
||||||
100L - out_length*100L/in_length));
|
|
||||||
if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return (s->last_lit == s->lit_bufsize-1);
|
|
||||||
/* We avoid equality with lit_bufsize because of wraparound at 64K
|
|
||||||
* on 16 bit machines and because stored blocks are restricted to
|
|
||||||
* 64K-1 bytes.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Send the block data compressed using the given Huffman trees
|
|
||||||
*/
|
|
||||||
local void compress_block(s, ltree, dtree)
|
|
||||||
deflate_state *s;
|
|
||||||
const ct_data *ltree; /* literal tree */
|
|
||||||
const ct_data *dtree; /* distance tree */
|
|
||||||
{
|
|
||||||
unsigned dist; /* distance of matched string */
|
|
||||||
int lc; /* match length or unmatched char (if dist == 0) */
|
|
||||||
unsigned lx = 0; /* running index in l_buf */
|
|
||||||
unsigned code; /* the code to send */
|
|
||||||
int extra; /* number of extra bits to send */
|
|
||||||
|
|
||||||
if (s->last_lit != 0) do {
|
|
||||||
dist = s->d_buf[lx];
|
|
||||||
lc = s->l_buf[lx++];
|
|
||||||
if (dist == 0) {
|
|
||||||
send_code(s, lc, ltree); /* send a literal byte */
|
|
||||||
Tracecv(isgraph(lc), (stderr," '%c' ", lc));
|
|
||||||
} else {
|
|
||||||
/* Here, lc is the match length - MIN_MATCH */
|
|
||||||
code = _length_code[lc];
|
|
||||||
send_code(s, code+LITERALS+1, ltree); /* send the length code */
|
|
||||||
extra = extra_lbits[code];
|
|
||||||
if (extra != 0) {
|
|
||||||
lc -= base_length[code];
|
|
||||||
send_bits(s, lc, extra); /* send the extra length bits */
|
|
||||||
}
|
|
||||||
dist--; /* dist is now the match distance - 1 */
|
|
||||||
code = d_code(dist);
|
|
||||||
Assert (code < D_CODES, "bad d_code");
|
|
||||||
|
|
||||||
send_code(s, code, dtree); /* send the distance code */
|
|
||||||
extra = extra_dbits[code];
|
|
||||||
if (extra != 0) {
|
|
||||||
dist -= (unsigned)base_dist[code];
|
|
||||||
send_bits(s, dist, extra); /* send the extra distance bits */
|
|
||||||
}
|
|
||||||
} /* literal or match pair ? */
|
|
||||||
|
|
||||||
/* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
|
|
||||||
Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
|
|
||||||
"pendingBuf overflow");
|
|
||||||
|
|
||||||
} while (lx < s->last_lit);
|
|
||||||
|
|
||||||
send_code(s, END_BLOCK, ltree);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Check if the data type is TEXT or BINARY, using the following algorithm:
|
|
||||||
* - TEXT if the two conditions below are satisfied:
|
|
||||||
* a) There are no non-portable control characters belonging to the
|
|
||||||
* "black list" (0..6, 14..25, 28..31).
|
|
||||||
* b) There is at least one printable character belonging to the
|
|
||||||
* "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
|
|
||||||
* - BINARY otherwise.
|
|
||||||
* - The following partially-portable control characters form a
|
|
||||||
* "gray list" that is ignored in this detection algorithm:
|
|
||||||
* (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
|
|
||||||
* IN assertion: the fields Freq of dyn_ltree are set.
|
|
||||||
*/
|
|
||||||
local int detect_data_type(s)
|
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
/* black_mask is the bit mask of black-listed bytes
|
|
||||||
* set bits 0..6, 14..25, and 28..31
|
|
||||||
* 0xf3ffc07f = binary 11110011111111111100000001111111
|
|
||||||
*/
|
|
||||||
unsigned long black_mask = 0xf3ffc07fUL;
|
|
||||||
int n;
|
|
||||||
|
|
||||||
/* Check for non-textual ("black-listed") bytes. */
|
|
||||||
for (n = 0; n <= 31; n++, black_mask >>= 1)
|
|
||||||
if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
|
|
||||||
return Z_BINARY;
|
|
||||||
|
|
||||||
/* Check for textual ("white-listed") bytes. */
|
|
||||||
if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
|
|
||||||
|| s->dyn_ltree[13].Freq != 0)
|
|
||||||
return Z_TEXT;
|
|
||||||
for (n = 32; n < LITERALS; n++)
|
|
||||||
if (s->dyn_ltree[n].Freq != 0)
|
|
||||||
return Z_TEXT;
|
|
||||||
|
|
||||||
/* There are no "black-listed" or "white-listed" bytes:
|
|
||||||
* this stream either is empty or has tolerated ("gray-listed") bytes only.
|
|
||||||
*/
|
|
||||||
return Z_BINARY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Reverse the first len bits of a code, using straightforward code (a faster
|
|
||||||
* method would use a table)
|
|
||||||
* IN assertion: 1 <= len <= 15
|
|
||||||
*/
|
|
||||||
local unsigned bi_reverse(code, len)
|
|
||||||
unsigned code; /* the value to invert */
|
|
||||||
int len; /* its bit length */
|
|
||||||
{
|
|
||||||
register unsigned res = 0;
|
|
||||||
do {
|
|
||||||
res |= code & 1;
|
|
||||||
code >>= 1, res <<= 1;
|
|
||||||
} while (--len > 0);
|
|
||||||
return res >> 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Flush the bit buffer, keeping at most 7 bits in it.
|
|
||||||
*/
|
|
||||||
local void bi_flush(s)
|
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
if (s->bi_valid == 16) {
|
|
||||||
put_short(s, s->bi_buf);
|
|
||||||
s->bi_buf = 0;
|
|
||||||
s->bi_valid = 0;
|
|
||||||
} else if (s->bi_valid >= 8) {
|
|
||||||
put_byte(s, (Byte)s->bi_buf);
|
|
||||||
s->bi_buf >>= 8;
|
|
||||||
s->bi_valid -= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Flush the bit buffer and align the output on a byte boundary
|
|
||||||
*/
|
|
||||||
local void bi_windup(s)
|
|
||||||
deflate_state *s;
|
|
||||||
{
|
|
||||||
if (s->bi_valid > 8) {
|
|
||||||
put_short(s, s->bi_buf);
|
|
||||||
} else if (s->bi_valid > 0) {
|
|
||||||
put_byte(s, (Byte)s->bi_buf);
|
|
||||||
}
|
|
||||||
s->bi_buf = 0;
|
|
||||||
s->bi_valid = 0;
|
|
||||||
#ifdef ZLIB_DEBUG
|
|
||||||
s->bits_sent = (s->bits_sent+7) & ~7;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,12 +24,8 @@
|
||||||
Z_DATA_ERROR if the input data was corrupted, including if the input data is
|
Z_DATA_ERROR if the input data was corrupted, including if the input data is
|
||||||
an incomplete zlib stream.
|
an incomplete zlib stream.
|
||||||
*/
|
*/
|
||||||
int ZEXPORT uncompress2 (dest, destLen, source, sourceLen)
|
int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
|
||||||
Bytef *dest;
|
uLong *sourceLen) {
|
||||||
uLongf *destLen;
|
|
||||||
const Bytef *source;
|
|
||||||
uLong *sourceLen;
|
|
||||||
{
|
|
||||||
z_stream stream;
|
z_stream stream;
|
||||||
int err;
|
int err;
|
||||||
const uInt max = (uInt)-1;
|
const uInt max = (uInt)-1;
|
||||||
|
@ -83,11 +79,7 @@ int ZEXPORT uncompress2 (dest, destLen, source, sourceLen)
|
||||||
err;
|
err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZEXPORT uncompress (dest, destLen, source, sourceLen)
|
int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source,
|
||||||
Bytef *dest;
|
uLong sourceLen) {
|
||||||
uLongf *destLen;
|
|
||||||
const Bytef *source;
|
|
||||||
uLong sourceLen;
|
|
||||||
{
|
|
||||||
return uncompress2(dest, destLen, source, &sourceLen);
|
return uncompress2(dest, destLen, source, &sourceLen);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* zconf.h -- configuration of the zlib compression library
|
/* zconf.h -- configuration of the zlib compression library
|
||||||
* Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
|
* Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -38,6 +38,9 @@
|
||||||
# define crc32 z_crc32
|
# define crc32 z_crc32
|
||||||
# define crc32_combine z_crc32_combine
|
# define crc32_combine z_crc32_combine
|
||||||
# define crc32_combine64 z_crc32_combine64
|
# define crc32_combine64 z_crc32_combine64
|
||||||
|
# define crc32_combine_gen z_crc32_combine_gen
|
||||||
|
# define crc32_combine_gen64 z_crc32_combine_gen64
|
||||||
|
# define crc32_combine_op z_crc32_combine_op
|
||||||
# define crc32_z z_crc32_z
|
# define crc32_z z_crc32_z
|
||||||
# define deflate z_deflate
|
# define deflate z_deflate
|
||||||
# define deflateBound z_deflateBound
|
# define deflateBound z_deflateBound
|
||||||
|
@ -238,7 +241,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Z_SOLO
|
#ifdef Z_SOLO
|
||||||
|
# ifdef _WIN64
|
||||||
|
typedef unsigned long long z_size_t;
|
||||||
|
# else
|
||||||
typedef unsigned long z_size_t;
|
typedef unsigned long z_size_t;
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# define z_longlong long long
|
# define z_longlong long long
|
||||||
# if defined(NO_SIZE_T)
|
# if defined(NO_SIZE_T)
|
||||||
|
@ -293,14 +300,6 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef Z_ARG /* function prototypes for stdarg */
|
|
||||||
# if defined(STDC) || defined(Z_HAVE_STDARG_H)
|
|
||||||
# define Z_ARG(args) args
|
|
||||||
# else
|
|
||||||
# define Z_ARG(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The following definitions for FAR are needed only for MSDOS mixed
|
/* The following definitions for FAR are needed only for MSDOS mixed
|
||||||
* model programming (small or medium model with some far allocations).
|
* model programming (small or medium model with some far allocations).
|
||||||
* This was tested only with MSC; for other MSDOS compilers you may have
|
* This was tested only with MSC; for other MSDOS compilers you may have
|
||||||
|
@ -349,6 +348,9 @@
|
||||||
# ifdef FAR
|
# ifdef FAR
|
||||||
# undef FAR
|
# undef FAR
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
/* No need for _export, use ZLIB.DEF instead. */
|
/* No need for _export, use ZLIB.DEF instead. */
|
||||||
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
|
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
|
||||||
|
@ -467,11 +469,18 @@ typedef uLong FAR uLongf;
|
||||||
# undef _LARGEFILE64_SOURCE
|
# undef _LARGEFILE64_SOURCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
|
#ifndef Z_HAVE_UNISTD_H
|
||||||
|
# ifdef __WATCOMC__
|
||||||
# define Z_HAVE_UNISTD_H
|
# define Z_HAVE_UNISTD_H
|
||||||
# endif
|
# endif
|
||||||
|
#endif
|
||||||
|
#ifndef Z_HAVE_UNISTD_H
|
||||||
|
# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)
|
||||||
|
# define Z_HAVE_UNISTD_H
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
#ifndef Z_SOLO
|
#ifndef Z_SOLO
|
||||||
# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
|
# if defined(Z_HAVE_UNISTD_H)
|
||||||
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
|
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
|
||||||
# ifdef VMS
|
# ifdef VMS
|
||||||
# include <unixio.h> /* for off_t */
|
# include <unixio.h> /* for off_t */
|
||||||
|
@ -507,7 +516,7 @@ typedef uLong FAR uLongf;
|
||||||
#if !defined(_WIN32) && defined(Z_LARGE64)
|
#if !defined(_WIN32) && defined(Z_LARGE64)
|
||||||
# define z_off64_t off64_t
|
# define z_off64_t off64_t
|
||||||
#else
|
#else
|
||||||
# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
|
# if defined(_WIN32) && !defined(__GNUC__)
|
||||||
# define z_off64_t __int64
|
# define z_off64_t __int64
|
||||||
# else
|
# else
|
||||||
# define z_off64_t z_off_t
|
# define z_off64_t z_off_t
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* zconf.h -- configuration of the zlib compression library
|
/* zconf.h -- configuration of the zlib compression library
|
||||||
* Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
|
* Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -38,6 +38,9 @@
|
||||||
# define crc32 z_crc32
|
# define crc32 z_crc32
|
||||||
# define crc32_combine z_crc32_combine
|
# define crc32_combine z_crc32_combine
|
||||||
# define crc32_combine64 z_crc32_combine64
|
# define crc32_combine64 z_crc32_combine64
|
||||||
|
# define crc32_combine_gen z_crc32_combine_gen
|
||||||
|
# define crc32_combine_gen64 z_crc32_combine_gen64
|
||||||
|
# define crc32_combine_op z_crc32_combine_op
|
||||||
# define crc32_z z_crc32_z
|
# define crc32_z z_crc32_z
|
||||||
# define deflate z_deflate
|
# define deflate z_deflate
|
||||||
# define deflateBound z_deflateBound
|
# define deflateBound z_deflateBound
|
||||||
|
@ -238,7 +241,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Z_SOLO
|
#ifdef Z_SOLO
|
||||||
|
# ifdef _WIN64
|
||||||
|
typedef unsigned long long z_size_t;
|
||||||
|
# else
|
||||||
typedef unsigned long z_size_t;
|
typedef unsigned long z_size_t;
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# define z_longlong long long
|
# define z_longlong long long
|
||||||
# if defined(NO_SIZE_T)
|
# if defined(NO_SIZE_T)
|
||||||
|
@ -293,14 +300,6 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef Z_ARG /* function prototypes for stdarg */
|
|
||||||
# if defined(STDC) || defined(Z_HAVE_STDARG_H)
|
|
||||||
# define Z_ARG(args) args
|
|
||||||
# else
|
|
||||||
# define Z_ARG(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The following definitions for FAR are needed only for MSDOS mixed
|
/* The following definitions for FAR are needed only for MSDOS mixed
|
||||||
* model programming (small or medium model with some far allocations).
|
* model programming (small or medium model with some far allocations).
|
||||||
* This was tested only with MSC; for other MSDOS compilers you may have
|
* This was tested only with MSC; for other MSDOS compilers you may have
|
||||||
|
@ -349,6 +348,9 @@
|
||||||
# ifdef FAR
|
# ifdef FAR
|
||||||
# undef FAR
|
# undef FAR
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
/* No need for _export, use ZLIB.DEF instead. */
|
/* No need for _export, use ZLIB.DEF instead. */
|
||||||
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
|
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
|
||||||
|
@ -467,11 +469,18 @@ typedef uLong FAR uLongf;
|
||||||
# undef _LARGEFILE64_SOURCE
|
# undef _LARGEFILE64_SOURCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
|
#ifndef Z_HAVE_UNISTD_H
|
||||||
|
# ifdef __WATCOMC__
|
||||||
# define Z_HAVE_UNISTD_H
|
# define Z_HAVE_UNISTD_H
|
||||||
# endif
|
# endif
|
||||||
|
#endif
|
||||||
|
#ifndef Z_HAVE_UNISTD_H
|
||||||
|
# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)
|
||||||
|
# define Z_HAVE_UNISTD_H
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
#ifndef Z_SOLO
|
#ifndef Z_SOLO
|
||||||
# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
|
# if defined(Z_HAVE_UNISTD_H)
|
||||||
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
|
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
|
||||||
# ifdef VMS
|
# ifdef VMS
|
||||||
# include <unixio.h> /* for off_t */
|
# include <unixio.h> /* for off_t */
|
||||||
|
@ -507,7 +516,7 @@ typedef uLong FAR uLongf;
|
||||||
#if !defined(_WIN32) && defined(Z_LARGE64)
|
#if !defined(_WIN32) && defined(Z_LARGE64)
|
||||||
# define z_off64_t off64_t
|
# define z_off64_t off64_t
|
||||||
#else
|
#else
|
||||||
# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
|
# if defined(_WIN32) && !defined(__GNUC__)
|
||||||
# define z_off64_t __int64
|
# define z_off64_t __int64
|
||||||
# else
|
# else
|
||||||
# define z_off64_t z_off_t
|
# define z_off64_t z_off_t
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -24,13 +24,11 @@ z_const char * const z_errmsg[10] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const char * ZEXPORT zlibVersion()
|
const char * ZEXPORT zlibVersion(void) {
|
||||||
{
|
|
||||||
return ZLIB_VERSION;
|
return ZLIB_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
uLong ZEXPORT zlibCompileFlags()
|
uLong ZEXPORT zlibCompileFlags(void) {
|
||||||
{
|
|
||||||
uLong flags;
|
uLong flags;
|
||||||
|
|
||||||
flags = 0;
|
flags = 0;
|
||||||
|
@ -61,9 +59,11 @@ uLong ZEXPORT zlibCompileFlags()
|
||||||
#ifdef ZLIB_DEBUG
|
#ifdef ZLIB_DEBUG
|
||||||
flags += 1 << 8;
|
flags += 1 << 8;
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
#if defined(ASMV) || defined(ASMINF)
|
#if defined(ASMV) || defined(ASMINF)
|
||||||
flags += 1 << 9;
|
flags += 1 << 9;
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
#ifdef ZLIB_WINAPI
|
#ifdef ZLIB_WINAPI
|
||||||
flags += 1 << 10;
|
flags += 1 << 10;
|
||||||
#endif
|
#endif
|
||||||
|
@ -119,9 +119,7 @@ uLong ZEXPORT zlibCompileFlags()
|
||||||
# endif
|
# endif
|
||||||
int ZLIB_INTERNAL z_verbose = verbose;
|
int ZLIB_INTERNAL z_verbose = verbose;
|
||||||
|
|
||||||
void ZLIB_INTERNAL z_error (m)
|
void ZLIB_INTERNAL z_error(char *m) {
|
||||||
char *m;
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s\n", m);
|
fprintf(stderr, "%s\n", m);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -130,14 +128,12 @@ void ZLIB_INTERNAL z_error (m)
|
||||||
/* exported to allow conversion of error code to string for compress() and
|
/* exported to allow conversion of error code to string for compress() and
|
||||||
* uncompress()
|
* uncompress()
|
||||||
*/
|
*/
|
||||||
const char * ZEXPORT zError(err)
|
const char * ZEXPORT zError(int err) {
|
||||||
int err;
|
|
||||||
{
|
|
||||||
return ERR_MSG(err);
|
return ERR_MSG(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_WIN32_WCE)
|
#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
|
||||||
/* The Microsoft C Run-Time Library for Windows CE doesn't have
|
/* The older Microsoft C Run-Time Library for Windows CE doesn't have
|
||||||
* errno. We define it as a global variable to simplify porting.
|
* errno. We define it as a global variable to simplify porting.
|
||||||
* Its value is always 0 and should not be used.
|
* Its value is always 0 and should not be used.
|
||||||
*/
|
*/
|
||||||
|
@ -146,22 +142,14 @@ const char * ZEXPORT zError(err)
|
||||||
|
|
||||||
#ifndef HAVE_MEMCPY
|
#ifndef HAVE_MEMCPY
|
||||||
|
|
||||||
void ZLIB_INTERNAL zmemcpy(dest, source, len)
|
void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) {
|
||||||
Bytef* dest;
|
|
||||||
const Bytef* source;
|
|
||||||
uInt len;
|
|
||||||
{
|
|
||||||
if (len == 0) return;
|
if (len == 0) return;
|
||||||
do {
|
do {
|
||||||
*dest++ = *source++; /* ??? to be unrolled */
|
*dest++ = *source++; /* ??? to be unrolled */
|
||||||
} while (--len != 0);
|
} while (--len != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZLIB_INTERNAL zmemcmp(s1, s2, len)
|
int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) {
|
||||||
const Bytef* s1;
|
|
||||||
const Bytef* s2;
|
|
||||||
uInt len;
|
|
||||||
{
|
|
||||||
uInt j;
|
uInt j;
|
||||||
|
|
||||||
for (j = 0; j < len; j++) {
|
for (j = 0; j < len; j++) {
|
||||||
|
@ -170,10 +158,7 @@ int ZLIB_INTERNAL zmemcmp(s1, s2, len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLIB_INTERNAL zmemzero(dest, len)
|
void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) {
|
||||||
Bytef* dest;
|
|
||||||
uInt len;
|
|
||||||
{
|
|
||||||
if (len == 0) return;
|
if (len == 0) return;
|
||||||
do {
|
do {
|
||||||
*dest++ = 0; /* ??? to be unrolled */
|
*dest++ = 0; /* ??? to be unrolled */
|
||||||
|
@ -214,8 +199,7 @@ local ptr_table table[MAX_PTR];
|
||||||
* a protected system like OS/2. Use Microsoft C instead.
|
* a protected system like OS/2. Use Microsoft C instead.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
|
voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) {
|
||||||
{
|
|
||||||
voidpf buf;
|
voidpf buf;
|
||||||
ulg bsize = (ulg)items*size;
|
ulg bsize = (ulg)items*size;
|
||||||
|
|
||||||
|
@ -240,8 +224,7 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
|
void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) {
|
||||||
{
|
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
(void)opaque;
|
(void)opaque;
|
||||||
|
@ -277,14 +260,12 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
|
||||||
# define _hfree hfree
|
# define _hfree hfree
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
|
voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) {
|
||||||
{
|
|
||||||
(void)opaque;
|
(void)opaque;
|
||||||
return _halloc((long)items, size);
|
return _halloc((long)items, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
|
void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) {
|
||||||
{
|
|
||||||
(void)opaque;
|
(void)opaque;
|
||||||
_hfree(ptr);
|
_hfree(ptr);
|
||||||
}
|
}
|
||||||
|
@ -297,25 +278,18 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
|
||||||
#ifndef MY_ZCALLOC /* Any system without a special alloc function */
|
#ifndef MY_ZCALLOC /* Any system without a special alloc function */
|
||||||
|
|
||||||
#ifndef STDC
|
#ifndef STDC
|
||||||
extern voidp malloc OF((uInt size));
|
extern voidp malloc(uInt size);
|
||||||
extern voidp calloc OF((uInt items, uInt size));
|
extern voidp calloc(uInt items, uInt size);
|
||||||
extern void free OF((voidpf ptr));
|
extern void free(voidpf ptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
|
voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) {
|
||||||
voidpf opaque;
|
|
||||||
unsigned items;
|
|
||||||
unsigned size;
|
|
||||||
{
|
|
||||||
(void)opaque;
|
(void)opaque;
|
||||||
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
|
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
|
||||||
(voidpf)calloc(items, size);
|
(voidpf)calloc(items, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLIB_INTERNAL zcfree (opaque, ptr)
|
void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) {
|
||||||
voidpf opaque;
|
|
||||||
voidpf ptr;
|
|
||||||
{
|
|
||||||
(void)opaque;
|
(void)opaque;
|
||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* zutil.h -- internal interface and configuration of the compression library
|
/* zutil.h -- internal interface and configuration of the compression library
|
||||||
* Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
|
* Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -29,10 +29,6 @@
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Z_SOLO
|
|
||||||
typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef local
|
#ifndef local
|
||||||
# define local static
|
# define local static
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,10 +42,21 @@ typedef unsigned short ush;
|
||||||
typedef ush FAR ushf;
|
typedef ush FAR ushf;
|
||||||
typedef unsigned long ulg;
|
typedef unsigned long ulg;
|
||||||
|
|
||||||
|
#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC)
|
||||||
|
# include <limits.h>
|
||||||
|
# if (ULONG_MAX == 0xffffffffffffffff)
|
||||||
|
# define Z_U8 unsigned long
|
||||||
|
# elif (ULLONG_MAX == 0xffffffffffffffff)
|
||||||
|
# define Z_U8 unsigned long long
|
||||||
|
# elif (UINT_MAX == 0xffffffffffffffff)
|
||||||
|
# define Z_U8 unsigned
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
||||||
/* (size given to avoid silly warnings with Visual C++) */
|
/* (size given to avoid silly warnings with Visual C++) */
|
||||||
|
|
||||||
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
|
#define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)]
|
||||||
|
|
||||||
#define ERR_RETURN(strm,err) \
|
#define ERR_RETURN(strm,err) \
|
||||||
return (strm->msg = ERR_MSG(err), (err))
|
return (strm->msg = ERR_MSG(err), (err))
|
||||||
|
@ -130,17 +137,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MACOS) || defined(TARGET_OS_MAC)
|
#if defined(MACOS)
|
||||||
# define OS_CODE 7
|
# define OS_CODE 7
|
||||||
# ifndef Z_SOLO
|
|
||||||
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
|
|
||||||
# include <unix.h> /* for fdopen */
|
|
||||||
# else
|
|
||||||
# ifndef fdopen
|
|
||||||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __acorn
|
#ifdef __acorn
|
||||||
|
@ -163,22 +161,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
||||||
# define OS_CODE 19
|
# define OS_CODE 19
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_BEOS_) || defined(RISCOS)
|
|
||||||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
|
|
||||||
# if defined(_WIN32_WCE)
|
|
||||||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
|
||||||
# ifndef _PTRDIFF_T_DEFINED
|
|
||||||
typedef int ptrdiff_t;
|
|
||||||
# define _PTRDIFF_T_DEFINED
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define fdopen(fd,type) _fdopen(fd,type)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__BORLANDC__) && !defined(MSDOS)
|
#if defined(__BORLANDC__) && !defined(MSDOS)
|
||||||
#pragma warn -8004
|
#pragma warn -8004
|
||||||
#pragma warn -8008
|
#pragma warn -8008
|
||||||
|
@ -188,8 +170,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
||||||
/* provide prototypes for these when building zlib without LFS */
|
/* provide prototypes for these when building zlib without LFS */
|
||||||
#if !defined(_WIN32) && \
|
#if !defined(_WIN32) && \
|
||||||
(!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
|
(!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
|
||||||
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
|
ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t);
|
||||||
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
|
ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t);
|
||||||
|
ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* common defaults */
|
/* common defaults */
|
||||||
|
@ -228,16 +211,16 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
||||||
# define zmemzero(dest, len) memset(dest, 0, len)
|
# define zmemzero(dest, len) memset(dest, 0, len)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
|
void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len);
|
||||||
int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
|
int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len);
|
||||||
void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
|
void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Diagnostic functions */
|
/* Diagnostic functions */
|
||||||
#ifdef ZLIB_DEBUG
|
#ifdef ZLIB_DEBUG
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
extern int ZLIB_INTERNAL z_verbose;
|
extern int ZLIB_INTERNAL z_verbose;
|
||||||
extern void ZLIB_INTERNAL z_error OF((char *m));
|
extern void ZLIB_INTERNAL z_error(char *m);
|
||||||
# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
|
# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
|
||||||
# define Trace(x) {if (z_verbose>=0) fprintf x ;}
|
# define Trace(x) {if (z_verbose>=0) fprintf x ;}
|
||||||
# define Tracev(x) {if (z_verbose>0) fprintf x ;}
|
# define Tracev(x) {if (z_verbose>0) fprintf x ;}
|
||||||
|
@ -254,9 +237,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef Z_SOLO
|
#ifndef Z_SOLO
|
||||||
voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
|
voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items,
|
||||||
unsigned size));
|
unsigned size);
|
||||||
void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
|
void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ZALLOC(strm, items, size) \
|
#define ZALLOC(strm, items, size) \
|
||||||
|
|
Loading…
Reference in New Issue