Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | d004b04783 | ||
|   | f6194ef39a | ||
|   | 639be99788 | ||
|   | d6231142d2 | ||
|   | b1c19ca6d8 | ||
|   | abf180a067 | ||
|   | 9c3a583021 | ||
|   | 6b8233bfe0 | 
							
								
								
									
										177
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,177 @@ | |||||||
|  | cmake_minimum_required(VERSION 2.4.4) | ||||||
|  | set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) | ||||||
|  |  | ||||||
|  | project(zlib C) | ||||||
|  |  | ||||||
|  | if(NOT DEFINED BUILD_SHARED_LIBS) | ||||||
|  |     option(BUILD_SHARED_LIBS "Build a shared library form of zlib" ON) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | include(CheckTypeSize) | ||||||
|  | include(CheckFunctionExists) | ||||||
|  | include(CheckIncludeFile) | ||||||
|  | include(CheckCSourceCompiles) | ||||||
|  | enable_testing() | ||||||
|  |  | ||||||
|  | check_include_file(sys/types.h HAVE_SYS_TYPES_H) | ||||||
|  | check_include_file(stdint.h    HAVE_STDINT_H) | ||||||
|  | check_include_file(stddef.h    HAVE_STDDEF_H) | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Check to see if we have large file support | ||||||
|  | # | ||||||
|  | set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE) | ||||||
|  |  | ||||||
|  | # We add these other definitions here because CheckTypeSize.cmake | ||||||
|  | # in CMake 2.4.x does not automatically do so and we want | ||||||
|  | # compatibility with CMake 2.4.x. | ||||||
|  | if(HAVE_SYS_TYPES_H) | ||||||
|  |     list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) | ||||||
|  | endif() | ||||||
|  | if(HAVE_STDINT_H) | ||||||
|  |     list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) | ||||||
|  | endif() | ||||||
|  | if(HAVE_STDDEF_H) | ||||||
|  |     list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | check_type_size(off64_t OFF64_T) | ||||||
|  |  | ||||||
|  | if(HAVE_OFF64_T) | ||||||
|  |    add_definitions(-D_LARGEFILE64_SOURCE) | ||||||
|  | endif() | ||||||
|  | set(CMAKE_REQUIRED_DEFINITIONS) # clear variable | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Check for fseeko | ||||||
|  | # | ||||||
|  | check_function_exists(fseeko HAVE_FSEEKO) | ||||||
|  | if(NOT HAVE_FSEEKO) | ||||||
|  |     add_definitions(-DNO_FSEEKO) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Check for unistd.h | ||||||
|  | # | ||||||
|  | check_include_file(unistd.h HAVE_UNISTD_H) | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Check for errno.h | ||||||
|  | check_include_file(errno.h HAVE_ERRNO_H) | ||||||
|  | if(NOT HAVE_ERRNO_H) | ||||||
|  |    add_definitions(-DNO_ERRNO_H) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Check for mmap support | ||||||
|  | # | ||||||
|  | set(mmap_test_code " | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/mman.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | caddr_t hello() { | ||||||
|  |   return mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0); | ||||||
|  | } | ||||||
|  | int main() { return 0; } | ||||||
|  | ") | ||||||
|  | check_c_source_compiles("${mmap_test_code}" USE_MMAP) | ||||||
|  | if(USE_MMAP) | ||||||
|  |     add_definitions(-DUSE_MMAP) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Create the zlibdefs.h file. | ||||||
|  | # Note: we create it in CMAKE_CURRENT_SOURCE_DIR instead  | ||||||
|  | #       of CMAKE_CURRENT_BINARY_DIR because an empty zlibdefs.h | ||||||
|  | #       is shipped with zlib in the source tree. | ||||||
|  | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlibdefs.h.cmakein | ||||||
|  |                ${CMAKE_CURRENT_SOURCE_DIR}/zlibdefs.h) | ||||||
|  |  | ||||||
|  | if(MSVC) | ||||||
|  |     set(CMAKE_DEBUG_POSTFIX "D") | ||||||
|  |     add_definitions(-D_CRT_SECURE_NO_DEPRECATE) | ||||||
|  |     add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | #============================================================================ | ||||||
|  | # zlib | ||||||
|  | #============================================================================ | ||||||
|  |  | ||||||
|  | set(ZLIB_PUBLIC_HDRS | ||||||
|  |     zconf.h | ||||||
|  |     zlib.h | ||||||
|  |     zlibdefs.h | ||||||
|  | ) | ||||||
|  | set(ZLIB_PRIVATE_HDRS | ||||||
|  |     crc32.h | ||||||
|  |     deflate.h | ||||||
|  |     gzguts.h | ||||||
|  |     inffast.h | ||||||
|  |     inffixed.h | ||||||
|  |     inflate.h | ||||||
|  |     inftrees.h | ||||||
|  |     trees.h | ||||||
|  |     zutil.h | ||||||
|  | ) | ||||||
|  | set(ZLIB_SRCS | ||||||
|  |     adler32.c | ||||||
|  |     compress.c | ||||||
|  |     crc32.c | ||||||
|  |     deflate.c | ||||||
|  |     gzclose.c | ||||||
|  |     gzio.c | ||||||
|  |     gzlib.c | ||||||
|  |     gzread.c | ||||||
|  |     gzwrite.c | ||||||
|  |     inflate.c | ||||||
|  |     infback.c | ||||||
|  |     inftrees.c | ||||||
|  |     inffast.c | ||||||
|  |     trees.c | ||||||
|  |     uncompr.c | ||||||
|  |     zutil.c | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) | ||||||
|  | set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) | ||||||
|  | set_target_properties(zlib PROPERTIES VERSION 1.2.3.4) | ||||||
|  | set_target_properties(zlib PROPERTIES SOVERSION 1) | ||||||
|  | if(UNIX) | ||||||
|  |    # On unix like platforms the library is almost always called libz | ||||||
|  |    set_target_properties(zlib PROPERTIES OUTPUT_NAME z) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) | ||||||
|  |     install(TARGETS zlib | ||||||
|  |         RUNTIME DESTINATION bin | ||||||
|  |         ARCHIVE DESTINATION lib | ||||||
|  |         LIBRARY DESTINATION lib ) | ||||||
|  | endif() | ||||||
|  | if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) | ||||||
|  |     install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include) | ||||||
|  | endif() | ||||||
|  | if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) | ||||||
|  |     install(FILES zlib.3 DESTINATION share/man/man3) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | #============================================================================ | ||||||
|  | # Example binaries | ||||||
|  | #============================================================================ | ||||||
|  |  | ||||||
|  | add_executable(example example.c) | ||||||
|  | target_link_libraries(example zlib) | ||||||
|  | add_test(example example) | ||||||
|  |  | ||||||
|  | add_executable(minigzip minigzip.c) | ||||||
|  | target_link_libraries(minigzip zlib) | ||||||
|  |  | ||||||
|  | if(HAVE_OFF64_T) | ||||||
|  |     add_executable(example64 example.c) | ||||||
|  |     target_link_libraries(example64 zlib) | ||||||
|  |     set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") | ||||||
|  |     add_test(example64 example64) | ||||||
|  |  | ||||||
|  |     add_executable(minigzip64 minigzip.c) | ||||||
|  |     target_link_libraries(minigzip64 zlib) | ||||||
|  |     set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") | ||||||
|  | endif() | ||||||
							
								
								
									
										217
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										217
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,6 +1,221 @@ | |||||||
|  |  | ||||||
|                 ChangeLog file for zlib |                 ChangeLog file for zlib | ||||||
|  |  | ||||||
|  | Changes in 1.2.3.5 (8 Jan 2010) | ||||||
|  | - Add space after #if in zutil.h for some compilers | ||||||
|  | - Fix relatively harmless bug in deflate_fast() [Exarevsky] | ||||||
|  | - Fix same problem in deflate_slow() | ||||||
|  | - Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown] | ||||||
|  | - Add deflate_rle() for faster Z_RLE strategy run-length encoding | ||||||
|  | - Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding | ||||||
|  | - Change name of "write" variable in inffast.c to avoid library collisions | ||||||
|  | - Fix premature EOF from gzread() in gzio.c [Brown] | ||||||
|  | - Use zlib header window size if windowBits is 0 in inflateInit2() | ||||||
|  | - Remove compressBound() call in deflate.c to avoid linking compress.o | ||||||
|  | - Replace use of errno in gz* with functions, support WinCE [Alves] | ||||||
|  | - Provide alternative to perror() in minigzip.c for WinCE [Alves] | ||||||
|  | - Don't use _vsnprintf on later versions of MSVC [Lowman] | ||||||
|  | - Add CMake build script and input file [Lowman] | ||||||
|  | - Update contrib/minizip to 1.1 [Svensson, Vollant] | ||||||
|  | - Moved nintendods directory from contrib to . | ||||||
|  | - Replace gzio.c with a new set of routines with the same functionality | ||||||
|  | - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above | ||||||
|  | - Update contrib/minizip to 1.1b | ||||||
|  |  | ||||||
|  | Changes in 1.2.3.4 (21 Dec 2009) | ||||||
|  | - Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility | ||||||
|  | - Update comments in configure and Makefile.in for default --shared | ||||||
|  | - Fix test -z's in configure [Marquess] | ||||||
|  | - Build examplesh and minigzipsh when not testing | ||||||
|  | - Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h | ||||||
|  | - Import LDFLAGS from the environment in configure | ||||||
|  | - Fix configure to populate SFLAGS with discovered CFLAGS options | ||||||
|  | - Adapt make_vms.com to the new Makefile.in [Zinser] | ||||||
|  | - Add zlib2ansi script for C++ compilation [Marquess] | ||||||
|  | - Add _FILE_OFFSET_BITS=64 test to make test (when applicable) | ||||||
|  | - Add AMD64 assembler code for longest match to contrib [Teterin] | ||||||
|  | - Include options from $SFLAGS when doing $LDSHARED | ||||||
|  | - Simplify 64-bit file support by introducing z_off64_t type | ||||||
|  | - Make shared object files in objs directory to work around old Sun cc | ||||||
|  | - Use only three-part version number for Darwin shared compiles | ||||||
|  | - Add rc option to ar in Makefile.in for when ./configure not run | ||||||
|  | - Add -WI,-rpath,. to LDFLAGS for OSF 1 V4* | ||||||
|  | - Set LD_LIBRARYN32_PATH for SGI IRIX shared compile | ||||||
|  | - Protect against _FILE_OFFSET_BITS being defined when compiling zlib | ||||||
|  | - Rename Makefile.in targets allstatic to static and allshared to shared | ||||||
|  | - Fix static and shared Makefile.in targets to be independent | ||||||
|  | - Correct error return bug in gz_open() by setting state [Brown] | ||||||
|  | - Put spaces before ;;'s in configure for better sh compatibility | ||||||
|  | - Add pigz.c (parallel implementation of gzip) to examples/ | ||||||
|  | - Correct constant in crc32.c to UL [Leventhal] | ||||||
|  | - Reject negative lengths in crc32_combine() | ||||||
|  | - Add inflateReset2() function to work like inflateEnd()/inflateInit2() | ||||||
|  | - Include sys/types.h for _LARGEFILE64_SOURCE [Brown] | ||||||
|  | - Correct typo in doc/algorithm.txt [Janik] | ||||||
|  | - Fix bug in adler32_combine() [Zhu] | ||||||
|  | - Catch missing-end-of-block-code error in all inflates and in puff | ||||||
|  |     Assures that random input to inflate eventually results in an error | ||||||
|  | - Added enough.c (calculation of ENOUGH for inftrees.h) to examples/ | ||||||
|  | - Update ENOUGH and its usage to reflect discovered bounds | ||||||
|  | - Fix gzerror() error report on empty input file [Brown] | ||||||
|  | - Add ush casts in trees.c to avoid pedantic runtime errors | ||||||
|  | - Fix typo in zlib.h uncompress() description [Reiss] | ||||||
|  | - Correct inflate() comments with regard to automatic header detection | ||||||
|  | - Remove deprecation comment on Z_PARTIAL_FLUSH (it stays) | ||||||
|  | - Put new version of gzlog (2.0) in examples with interruption recovery | ||||||
|  | - Add puff compile option to permit invalid distance-too-far streams | ||||||
|  | - Add puff TEST command options, ability to read piped input | ||||||
|  | - Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but | ||||||
|  |   _LARGEFILE64_SOURCE not defined | ||||||
|  | - Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart | ||||||
|  | - Fix deflateSetDictionary() to use all 32K for output consistency | ||||||
|  | - Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h) | ||||||
|  | - Clear bytes after deflate lookahead to avoid use of uninitialized data | ||||||
|  | - Change a limit in inftrees.c to be more transparent to Coverity Prevent | ||||||
|  | - Update win32/zlib.def with exported symbols from zlib.h | ||||||
|  | - Correct spelling error in zlib.h [Willem] | ||||||
|  | - Allow Z_BLOCK for deflate() to force a new block | ||||||
|  | - Allow negative bits in inflatePrime() to delete existing bit buffer | ||||||
|  | - Add Z_TREES flush option to inflate() to return at end of trees | ||||||
|  | - Add inflateMark() to return current state information for random access | ||||||
|  | - Add Makefile for NintendoDS to contrib [Costa] | ||||||
|  | - Add -w in configure compile tests to avoid spurious warnings [Beucler] | ||||||
|  | - Fix typos in zlib.h comments for deflateSetDictionary() | ||||||
|  | - Fix EOF detection in transparent gzread() [Maier] | ||||||
|  |  | ||||||
|  | Changes in 1.2.3.3 (2 October 2006) | ||||||
|  | - Make --shared the default for configure, add a --static option | ||||||
|  | - Add compile option to permit invalid distance-too-far streams | ||||||
|  | - Add inflateUndermine() function which is required to enable above | ||||||
|  | - Remove use of "this" variable name for C++ compatibility [Marquess] | ||||||
|  | - Add testing of shared library in make test, if shared library built | ||||||
|  | - Use ftello() and fseeko() if available instead of ftell() and fseek() | ||||||
|  | - Provide two versions of all functions that use the z_off_t type for | ||||||
|  |   binary compatibility -- a normal version and a 64-bit offset version, | ||||||
|  |   per the Large File Support Extension when _LARGEFILE64_SOURCE is | ||||||
|  |   defined; use the 64-bit versions by default when _FILE_OFFSET_BITS | ||||||
|  |   is defined to be 64 | ||||||
|  | - Add a --uname= option to configure to perhaps help with cross-compiling | ||||||
|  |  | ||||||
|  | Changes in 1.2.3.2 (3 September 2006) | ||||||
|  | - Turn off silly Borland warnings [Hay] | ||||||
|  | - Use off64_t and define _LARGEFILE64_SOURCE when present | ||||||
|  | - Fix missing dependency on inffixed.h in Makefile.in | ||||||
|  | - Rig configure --shared to build both shared and static [Teredesai, Truta] | ||||||
|  | - Remove zconf.in.h and instead create a new zlibdefs.h file | ||||||
|  | - Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant] | ||||||
|  | - Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt] | ||||||
|  |  | ||||||
|  | Changes in 1.2.3.1 (16 August 2006) | ||||||
|  | - Add watcom directory with OpenWatcom make files [Daniel] | ||||||
|  | - Remove #undef of FAR in zconf.in.h for MVS [Fedtke] | ||||||
|  | - Update make_vms.com [Zinser] | ||||||
|  | - Use -fPIC for shared build in configure [Teredesai, Nicholson] | ||||||
|  | - Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen] | ||||||
|  | - Use fdopen() (not _fdopen()) for Interix in zutil.h [B<>ck] | ||||||
|  | - Add some FAQ entries about the contrib directory | ||||||
|  | - Update the MVS question in the FAQ | ||||||
|  | - Avoid extraneous reads after EOF in gzio.c [Brown] | ||||||
|  | - Correct spelling of "successfully" in gzio.c [Randers-Pehrson] | ||||||
|  | - Add comments to zlib.h about gzerror() usage [Brown] | ||||||
|  | - Set extra flags in gzip header in gzopen() like deflate() does | ||||||
|  | - Make configure options more compatible with double-dash conventions | ||||||
|  |   [Weigelt] | ||||||
|  | - Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen] | ||||||
|  | - Fix uninstall target in Makefile.in [Truta] | ||||||
|  | - Add pkgconfig support [Weigelt] | ||||||
|  | - Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt] | ||||||
|  | - Replace set_data_type() with a more accurate detect_data_type() in | ||||||
|  |   trees.c, according to the txtvsbin.txt document [Truta] | ||||||
|  | - Swap the order of #include <stdio.h> and #include "zlib.h" in | ||||||
|  |   gzio.c, example.c and minigzip.c [Truta] | ||||||
|  | - Shut up annoying VS2005 warnings about standard C deprecation [Rowe, | ||||||
|  |   Truta] (where?) | ||||||
|  | - Fix target "clean" from win32/Makefile.bor [Truta] | ||||||
|  | - Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe] | ||||||
|  | - Update zlib www home address in win32/DLL_FAQ.txt [Truta] | ||||||
|  | - Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove] | ||||||
|  | - Enable browse info in the "Debug" and "ASM Debug" configurations in | ||||||
|  |   the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta] | ||||||
|  | - Add pkgconfig support [Weigelt] | ||||||
|  | - Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h, | ||||||
|  |   for use in win32/zlib1.rc [Polushin, Rowe, Truta] | ||||||
|  | - Add a document that explains the new text detection scheme to | ||||||
|  |   doc/txtvsbin.txt [Truta] | ||||||
|  | - Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta] | ||||||
|  | - Move algorithm.txt into doc/ [Truta] | ||||||
|  | - Synchronize FAQ with website | ||||||
|  | - Fix compressBound(), was low for some pathological cases [Fearnley] | ||||||
|  | - Take into account wrapper variations in deflateBound() | ||||||
|  | - Set examples/zpipe.c input and output to binary mode for Windows  | ||||||
|  | - Update examples/zlib_how.html with new zpipe.c (also web site) | ||||||
|  | - Fix some warnings in examples/gzlog.c and examples/zran.c (it seems | ||||||
|  |   that gcc became pickier in 4.0) | ||||||
|  | - Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain | ||||||
|  |   un-versioned, the patch adds versioning only for symbols introduced in | ||||||
|  |   zlib-1.2.0 or later.  It also declares as local those symbols which are | ||||||
|  |   not designed to be exported." [Levin] | ||||||
|  | - Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure | ||||||
|  | - Do not initialize global static by default in trees.c, add a response | ||||||
|  |   NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess] | ||||||
|  | - Don't use strerror() in gzio.c under WinCE [Yakimov] | ||||||
|  | - Don't use errno.h in zutil.h under WinCE [Yakimov] | ||||||
|  | - Move arguments for AR to its usage to allow replacing ar [Marot] | ||||||
|  | - Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson] | ||||||
|  | - Improve inflateInit() and inflateInit2() documentation | ||||||
|  | - Fix structure size comment in inflate.h | ||||||
|  | - Change configure help option from --h* to --help [Santos] | ||||||
|  |  | ||||||
|  | Changes in 1.2.3 (18 July 2005) | ||||||
|  | - Apply security vulnerability fixes to contrib/infback9 as well | ||||||
|  | - Clean up some text files (carriage returns, trailing space) | ||||||
|  | - Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant] | ||||||
|  |  | ||||||
|  | Changes in 1.2.2.4 (11 July 2005) | ||||||
|  | - Add inflatePrime() function for starting inflation at bit boundary | ||||||
|  | - Avoid some Visual C warnings in deflate.c | ||||||
|  | - Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit | ||||||
|  |   compile | ||||||
|  | - Fix some spelling errors in comments [Betts] | ||||||
|  | - Correct inflateInit2() error return documentation in zlib.h | ||||||
|  | - Added zran.c example of compressed data random access to examples | ||||||
|  |   directory, shows use of inflatePrime() | ||||||
|  | - Fix cast for assignments to strm->state in inflate.c and infback.c | ||||||
|  | - Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] | ||||||
|  | - Move declarations of gf2 functions to right place in crc32.c [Oberhumer] | ||||||
|  | - Add cast in trees.c t avoid a warning [Oberhumer] | ||||||
|  | - Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer] | ||||||
|  | - Update make_vms.com [Zinser] | ||||||
|  | - Initialize state->write in inflateReset() since copied in inflate_fast() | ||||||
|  | - Be more strict on incomplete code sets in inflate_table() and increase | ||||||
|  |   ENOUGH and MAXD -- this repairs a possible security vulnerability for | ||||||
|  |   invalid inflate input.  Thanks to Tavis Ormandy and Markus Oberhumer for | ||||||
|  |   discovering the vulnerability and providing test cases. | ||||||
|  | - Add ia64 support to configure for HP-UX [Smith] | ||||||
|  | - Add error return to gzread() for format or i/o error [Levin] | ||||||
|  | - Use malloc.h for OS/2 [Necasek] | ||||||
|  |  | ||||||
|  | Changes in 1.2.2.3 (27 May 2005) | ||||||
|  | - Replace 1U constants in inflate.c and inftrees.c for 64-bit compile | ||||||
|  | - Typecast fread() return values in gzio.c [Vollant] | ||||||
|  | - Remove trailing space in minigzip.c outmode (VC++ can't deal with it) | ||||||
|  | - Fix crc check bug in gzread() after gzungetc() [Heiner] | ||||||
|  | - Add the deflateTune() function to adjust internal compression parameters | ||||||
|  | - Add a fast gzip decompressor, gun.c, to examples (use of inflateBack) | ||||||
|  | - Remove an incorrect assertion in examples/zpipe.c | ||||||
|  | - Add C++ wrapper in infback9.h [Donais] | ||||||
|  | - Fix bug in inflateCopy() when decoding fixed codes | ||||||
|  | - Note in zlib.h how much deflateSetDictionary() actually uses | ||||||
|  | - Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used) | ||||||
|  | - Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer] | ||||||
|  | - Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer] | ||||||
|  | - Add gzdirect() function to indicate transparent reads | ||||||
|  | - Update contrib/minizip [Vollant] | ||||||
|  | - Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer] | ||||||
|  | - Add casts in crc32.c to avoid warnings [Oberhumer] | ||||||
|  | - Add contrib/masmx64 [Vollant] | ||||||
|  | - Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant] | ||||||
|  |  | ||||||
| Changes in 1.2.2.2 (30 December 2004) | Changes in 1.2.2.2 (30 December 2004) | ||||||
| - Replace structure assignments in deflate.c and inflate.c with zmemcpy to | - Replace structure assignments in deflate.c and inflate.c with zmemcpy to | ||||||
|   avoid implicit memcpy calls (portability for no-library compilation) |   avoid implicit memcpy calls (portability for no-library compilation) | ||||||
| @@ -490,7 +705,7 @@ Changes in 1.0.7 (20 Jan 1998) | |||||||
| Changes in 1.0.6 (19 Jan 1998) | 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 occuring 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() | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								FAQ
									
									
									
									
									
								
							| @@ -217,10 +217,14 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html | |||||||
|  |  | ||||||
| 29. Does zlib work on MVS, OS/390, CICS, etc.? | 29. Does zlib work on MVS, OS/390, CICS, etc.? | ||||||
|  |  | ||||||
|     We don't know for sure. We have heard occasional reports of success on |     Yes, there are working ports of zlib 1.1.4 to MVS which you can find | ||||||
|     these systems. If you do use it on one of these, please provide us with |     here: | ||||||
|     a report, instructions, and patches that we can reference when we get |  | ||||||
|     these questions. Thanks. |     http://www.homerow.net/asm/zlib390.htm | ||||||
|  |     http://www.homerow.net/asm/zlibLE.htm | ||||||
|  |  | ||||||
|  |     If these are updated to more recent versions of zlib, please let us | ||||||
|  |     know. Thanks. | ||||||
|  |  | ||||||
| 30. Is there some simpler, easier to read version of inflate I can look at | 30. Is there some simpler, easier to read version of inflate I can look at | ||||||
|     to understand the deflate format? |     to understand the deflate format? | ||||||
| @@ -271,7 +275,9 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html | |||||||
|         http://www.ijs.si/software/snprintf/ |         http://www.ijs.si/software/snprintf/ | ||||||
|  |  | ||||||
|     Note that you should be using the most recent version of zlib. Versions |     Note that you should be using the most recent version of zlib. Versions | ||||||
|     1.1.3 and before were subject to a double-free vulnerability. |     1.1.3 and before were subject to a double-free vulnerability, and version | ||||||
|  |     1.2.1 was subject to an access exception when decompressing invalid | ||||||
|  |     compressed data. | ||||||
|  |  | ||||||
| 34. Is there a Java version of zlib? | 34. Is there a Java version of zlib? | ||||||
|  |  | ||||||
| @@ -333,7 +339,23 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html | |||||||
|     In any case, the compression improvements are so modest compared to other |     In any case, the compression improvements are so modest compared to other | ||||||
|     more modern approaches, that it's not worth the effort to implement. |     more modern approaches, that it's not worth the effort to implement. | ||||||
|  |  | ||||||
| 41. Can you please sign these lengthy legal documents and fax them back to us | 41. I'm having a problem with the zip functions in zlib, can you help? | ||||||
|  |  | ||||||
|  |     There are no zip functions in zlib. You are probably using minizip by | ||||||
|  |     Giles Vollant, which is found in the contrib directory of zlib. It is not | ||||||
|  |     part of zlib. In fact none of the stuff in contrib is part of zlib. The | ||||||
|  |     files in there are not supported by the zlib authors. You need to contact | ||||||
|  |     the authors of the contribution for help. | ||||||
|  |  | ||||||
|  | 42. The match.asm code in contrib is under the GNU General Public License. | ||||||
|  |     Since it's part of zlib, doesn't that mean that all of zlib falls under the | ||||||
|  |     GNU GPL? | ||||||
|  |  | ||||||
|  |     No. The files in contrib are not part of zlib. They were contributed by | ||||||
|  |     other authors and are provided as a convenience to the user within the zlib | ||||||
|  |     distribution. Each of the items in contrib have their own license. | ||||||
|  |  | ||||||
|  | 43. Can you please sign these lengthy legal documents and fax them back to us | ||||||
|     so that we can use your software in our product? |     so that we can use your software in our product? | ||||||
|  |  | ||||||
|     No. Go away. Shoo. |     No. Go away. Shoo. | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								INDEX
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								INDEX
									
									
									
									
									
								
							| @@ -1,25 +1,35 @@ | |||||||
|  | CMakeLists.txt  cmake build file | ||||||
| ChangeLog       history of changes | ChangeLog       history of changes | ||||||
| FAQ             Frequently Asked Questions about zlib | FAQ             Frequently Asked Questions about zlib | ||||||
| INDEX           this file | INDEX           this file | ||||||
| Makefile        makefile for Unix (generated by configure) | Makefile        makefile for Unix (generated by configure) | ||||||
| Makefile.in     makefile for Unix (template for configure) | Makefile.in     makefile for Unix (template for configure) | ||||||
| README          guess what | README          guess what | ||||||
| algorithm.txt   description of the (de)compression algorithm |  | ||||||
| configure       configure script for Unix | configure       configure script for Unix | ||||||
| zconf.in.h      template for zconf.h (used by configure) | make_vms.com	makefile for VMS | ||||||
|  | treebuild.xml	XML description of source file dependencies | ||||||
|  | zlib.3		Man page for zlib | ||||||
|  | zlib.map	Linux symbol information | ||||||
|  | zlib.pc.in	Template for pkg-config descriptor | ||||||
|  | zlib2ansi	perl script to convert source files for C++ compilation | ||||||
|  |  | ||||||
| amiga/          makefiles for Amiga SAS C | amiga/          makefiles for Amiga SAS C | ||||||
| as400/          makefiles for IBM AS/400 | as400/          makefiles for IBM AS/400 | ||||||
|  | doc/		documentation for formats and algorithms | ||||||
| msdos/          makefiles for MSDOS | msdos/          makefiles for MSDOS | ||||||
|  | nintendods/	makefile for Nintendo DS | ||||||
| old/            makefiles for various architectures and zlib documentation | old/            makefiles for various architectures and zlib documentation | ||||||
|                 files that have not yet been updated for zlib 1.2.x |                 files that have not yet been updated for zlib 1.2.x | ||||||
| projects/       projects for various Integrated Development Environments | projects/       projects for various Integrated Development Environments | ||||||
| qnx/            makefiles for QNX | qnx/            makefiles for QNX | ||||||
|  | watcom/		makefiles for OpenWatcom | ||||||
| win32/          makefiles for Windows | win32/          makefiles for Windows | ||||||
|  | zlibdefs.h.cmakein      input file for cmake build | ||||||
|  |  | ||||||
|                 zlib public header files (must be kept): |                 zlib public header files (required for library use): | ||||||
| zconf.h | zconf.h | ||||||
| zlib.h | zlib.h | ||||||
|  | zlibdefs.h | ||||||
|  |  | ||||||
|                 private source files used to build the zlib library: |                 private source files used to build the zlib library: | ||||||
| adler32.c | adler32.c | ||||||
| @@ -28,7 +38,12 @@ crc32.c | |||||||
| crc32.h | crc32.h | ||||||
| deflate.c | deflate.c | ||||||
| deflate.h | deflate.h | ||||||
|  | gzclose.c | ||||||
|  | gzguts.h | ||||||
| gzio.c | gzio.c | ||||||
|  | gzlib.c | ||||||
|  | gzread.c | ||||||
|  | gzwrite.c | ||||||
| infback.c | infback.c | ||||||
| inffast.c | inffast.c | ||||||
| inffast.h | inffast.h | ||||||
| @@ -46,6 +61,7 @@ zutil.h | |||||||
|                 source files for sample programs: |                 source files for sample programs: | ||||||
| example.c | example.c | ||||||
| minigzip.c | minigzip.c | ||||||
|  | See examples/README.examples for more | ||||||
|  |  | ||||||
|                 unsupported contribution by third parties |                 unsupported contribution by third parties | ||||||
| See contrib/README.contrib | See contrib/README.contrib | ||||||
|   | |||||||
							
								
								
									
										193
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										193
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,11 +1,11 @@ | |||||||
| # Makefile for zlib | # Makefile for zlib | ||||||
| # Copyright (C) 1995-2003 Jean-loup Gailly. | # Copyright (C) 1995-2006 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 | ||||||
|  |  | ||||||
| # To compile and test, type: | # To compile and test, type: | ||||||
| #    ./configure; make test | #    ./configure; make test | ||||||
| # The call of configure is optional if you don't have special requirements | # Normally configure builds both a static and a shared library. | ||||||
| # If you wish to build zlib as a shared library, use: ./configure -s | # If you want to build just a static library, use: ./configure --static | ||||||
|  |  | ||||||
| # To use the asm code, type: | # To use the asm code, type: | ||||||
| #    cp contrib/asm?86/match.S ./match.S | #    cp contrib/asm?86/match.S ./match.S | ||||||
| @@ -24,14 +24,17 @@ CFLAGS=-O | |||||||
| #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ | #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ | ||||||
| #           -Wstrict-prototypes -Wmissing-prototypes | #           -Wstrict-prototypes -Wmissing-prototypes | ||||||
|  |  | ||||||
| LDFLAGS=libz.a | SFLAGS=-O | ||||||
|  |  | ||||||
|  | LDFLAGS=-L. libz.a | ||||||
| LDSHARED=$(CC) | LDSHARED=$(CC) | ||||||
| CPP=$(CC) -E | CPP=$(CC) -E | ||||||
|  |  | ||||||
| LIBS=libz.a | STATICLIB=libz.a | ||||||
| SHAREDLIB=libz.so | SHAREDLIB=libz.so | ||||||
| SHAREDLIBV=libz.so.1.2.2.2 | SHAREDLIBV=libz.so.1.2.3.5 | ||||||
| SHAREDLIBM=libz.so.1 | SHAREDLIBM=libz.so.1 | ||||||
|  | LIBS=$(STATICLIB) $(SHAREDLIB) $(SHAREDLIBV) | ||||||
|  |  | ||||||
| AR=ar rc | AR=ar rc | ||||||
| RANLIB=ranlib | RANLIB=ranlib | ||||||
| @@ -45,21 +48,36 @@ libdir = ${exec_prefix}/lib | |||||||
| includedir = ${prefix}/include | includedir = ${prefix}/include | ||||||
| mandir = ${prefix}/share/man | mandir = ${prefix}/share/man | ||||||
| man3dir = ${mandir}/man3 | man3dir = ${mandir}/man3 | ||||||
|  | pkgconfigdir = ${libdir}/pkgconfig | ||||||
|  |  | ||||||
| OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | OBJC = adler32.o compress.o crc32.o deflate.o gzclose.o gzio.o gzlib.o gzread.o \ | ||||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o | 	gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o | ||||||
|  |  | ||||||
|  | PIC_OBJC = adler32.lo compress.lo crc32.lo deflate.lo gzclose.lo gzio.lo gzlib.lo gzread.lo \ | ||||||
|  | 	gzwrite.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo | ||||||
|  |  | ||||||
|  | # to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo | ||||||
| OBJA = | OBJA = | ||||||
| # to use the asm code: make OBJA=match.o | PIC_OBJA = | ||||||
|  |  | ||||||
| TEST_OBJS = example.o minigzip.o | OBJS = $(OBJC) $(OBJA) | ||||||
|  |  | ||||||
| all: example$(EXE) minigzip$(EXE) | PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) | ||||||
|  |  | ||||||
|  | all: static shared | ||||||
|  |  | ||||||
|  | static: example$(EXE) minigzip$(EXE) | ||||||
|  |  | ||||||
|  | shared: examplesh$(EXE) minigzipsh$(EXE) | ||||||
|  |  | ||||||
|  | all64: example64$(EXE) minigzip64$(EXE) | ||||||
|  |  | ||||||
| check: test | check: test | ||||||
| test: all |  | ||||||
| 	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ | test: all teststatic testshared | ||||||
| 	echo hello world | ./minigzip | ./minigzip -d || \ |  | ||||||
|  | teststatic: static | ||||||
|  | 	@echo hello world | ./minigzip | ./minigzip -d || \ | ||||||
| 	  echo '		*** minigzip test FAILED ***' ; \ | 	  echo '		*** minigzip test FAILED ***' ; \ | ||||||
| 	if ./example; then \ | 	if ./example; then \ | ||||||
| 	  echo '		*** zlib test OK ***'; \ | 	  echo '		*** zlib test OK ***'; \ | ||||||
| @@ -67,8 +85,30 @@ test: all | |||||||
| 	  echo '		*** zlib test FAILED ***'; \ | 	  echo '		*** zlib test FAILED ***'; \ | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| libz.a: $(OBJS) $(OBJA) | testshared: shared | ||||||
| 	$(AR) $@ $(OBJS) $(OBJA) | 	@LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ | ||||||
|  | 	LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ | ||||||
|  | 	DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ | ||||||
|  | 	SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ | ||||||
|  | 	echo hello world | ./minigzipsh | ./minigzipsh -d || \ | ||||||
|  | 	  echo '		*** minigzip shared test FAILED ***' ; \ | ||||||
|  | 	if ./examplesh; then \ | ||||||
|  | 	  echo '		*** zlib shared test OK ***'; \ | ||||||
|  | 	else \ | ||||||
|  | 	  echo '		*** zlib shared test FAILED ***'; \ | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | test64: all64 | ||||||
|  | 	@echo hello world | ./minigzip64 | ./minigzip64 -d || \ | ||||||
|  | 	  echo '		*** minigzip 64-bit test FAILED ***' ; \ | ||||||
|  | 	if ./example64; then \ | ||||||
|  | 	  echo '		*** zlib 64-bit test OK ***'; \ | ||||||
|  | 	else \ | ||||||
|  | 	  echo '		*** zlib 64-bit test FAILED ***'; \ | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | libz.a: $(OBJS) | ||||||
|  | 	$(AR) $@ $(OBJS) | ||||||
| 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1 | 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1 | ||||||
|  |  | ||||||
| match.o: match.S | match.o: match.S | ||||||
| @@ -77,58 +117,100 @@ match.o: match.S | |||||||
| 	mv _match.o match.o | 	mv _match.o match.o | ||||||
| 	rm -f _match.s | 	rm -f _match.s | ||||||
|  |  | ||||||
| $(SHAREDLIBV): $(OBJS) | match.lo: match.S | ||||||
| 	$(LDSHARED) -o $@ $(OBJS) | 	$(CPP) match.S > _match.s | ||||||
|  | 	$(CC) -c -fPIC _match.s | ||||||
|  | 	mv _match.o match.lo | ||||||
|  | 	rm -f _match.s | ||||||
|  |  | ||||||
|  | example64.o: example.c zlib.h zconf.h zlibdefs.h | ||||||
|  | 	$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ $< | ||||||
|  |  | ||||||
|  | minigzip64.o: minigzip.c zlib.h zconf.h zlibdefs.h | ||||||
|  | 	$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ $< | ||||||
|  |  | ||||||
|  | .SUFFIXES: .lo | ||||||
|  |  | ||||||
|  | .c.lo: | ||||||
|  | 	-@if [ ! -d objs ]; then mkdir objs; fi | ||||||
|  | 	$(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $< | ||||||
|  | 	-@mv objs/$*.o $@ | ||||||
|  |  | ||||||
|  | $(SHAREDLIBV): $(PIC_OBJS) | ||||||
|  | 	$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) -lc | ||||||
| 	rm -f $(SHAREDLIB) $(SHAREDLIBM) | 	rm -f $(SHAREDLIB) $(SHAREDLIBM) | ||||||
| 	ln -s $@ $(SHAREDLIB) | 	ln -s $@ $(SHAREDLIB) | ||||||
| 	ln -s $@ $(SHAREDLIBM) | 	ln -s $@ $(SHAREDLIBM) | ||||||
|  | 	-@rmdir objs | ||||||
|  |  | ||||||
| example$(EXE): example.o $(LIBS) | example$(EXE): example.o $(STATICLIB) | ||||||
| 	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) | 	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) | ||||||
|  |  | ||||||
| minigzip$(EXE): minigzip.o $(LIBS) | minigzip$(EXE): minigzip.o $(STATICLIB) | ||||||
| 	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) | 	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) | ||||||
|  |  | ||||||
| install: $(LIBS) | examplesh$(EXE): example.o $(SHAREDLIBV) | ||||||
| 	-@if [ ! -d $(exec_prefix) ]; then mkdir -p $(exec_prefix); fi | 	$(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) | ||||||
| 	-@if [ ! -d $(includedir)  ]; then mkdir -p $(includedir); fi |  | ||||||
| 	-@if [ ! -d $(libdir)      ]; then mkdir -p $(libdir); fi | minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) | ||||||
| 	-@if [ ! -d $(man3dir)     ]; then mkdir -p $(man3dir); fi | 	$(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) | ||||||
| 	cp zlib.h zconf.h $(includedir) |  | ||||||
| 	chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h | example64$(EXE): example64.o $(STATICLIB) | ||||||
| 	cp $(LIBS) $(libdir) | 	$(CC) $(CFLAGS) -o $@ example64.o $(LDFLAGS) | ||||||
| 	cd $(libdir); chmod 755 $(LIBS) |  | ||||||
| 	-@(cd $(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1 | minigzip64$(EXE): minigzip64.o $(STATICLIB) | ||||||
| 	cd $(libdir); if test -f $(SHAREDLIBV); then \ | 	$(CC) $(CFLAGS) -o $@ minigzip64.o $(LDFLAGS) | ||||||
|  |  | ||||||
|  | install-libs: $(LIBS) | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(exec_prefix)  ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(libdir)       ]; then mkdir -p $(DESTDIR)$(libdir); fi | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi | ||||||
|  | 	cp $(LIBS) $(DESTDIR)$(libdir) | ||||||
|  | 	cd $(DESTDIR)$(libdir); chmod 755 $(LIBS) | ||||||
|  | 	-@(cd $(DESTDIR)$(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1 | ||||||
|  | 	cd $(DESTDIR)$(libdir); if test -f $(SHAREDLIBV); then \ | ||||||
| 	  rm -f $(SHAREDLIB) $(SHAREDLIBM); \ | 	  rm -f $(SHAREDLIB) $(SHAREDLIBM); \ | ||||||
| 	  ln -s $(SHAREDLIBV) $(SHAREDLIB); \ | 	  ln -s $(SHAREDLIBV) $(SHAREDLIB); \ | ||||||
| 	  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \ | 	  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \ | ||||||
| 	  (ldconfig || true)  >/dev/null 2>&1; \ | 	  (ldconfig || true)  >/dev/null 2>&1; \ | ||||||
| 	fi | 	fi | ||||||
| 	cp zlib.3 $(man3dir) | 	cp zlib.3 $(DESTDIR)$(man3dir) | ||||||
| 	chmod 644 $(man3dir)/zlib.3 | 	chmod 644 $(DESTDIR)$(man3dir)/zlib.3 | ||||||
|  | 	cp zlib.pc $(DESTDIR)$(pkgconfigdir) | ||||||
|  | 	chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc | ||||||
| # The ranlib in install is needed on NeXTSTEP which checks file times | # The ranlib in install is needed on NeXTSTEP which checks file times | ||||||
| # ldconfig is for Linux | # ldconfig is for Linux | ||||||
|  |  | ||||||
|  | install: install-libs | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi | ||||||
|  | 	cp zlib.h zconf.h zlibdefs.h $(DESTDIR)$(includedir) | ||||||
|  | 	chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h $(DESTDIR)$(includedir)/zlibdefs.h | ||||||
|  |  | ||||||
| uninstall: | uninstall: | ||||||
| 	cd $(includedir); \ | 	cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h zlibdefs.h | ||||||
| 	cd $(libdir); rm -f libz.a; \ | 	cd $(DESTDIR)$(libdir); rm -f libz.a; \ | ||||||
| 	if test -f $(SHAREDLIBV); then \ | 	if test -f $(SHAREDLIBV); then \ | ||||||
| 	  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ | 	  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ | ||||||
| 	fi | 	fi | ||||||
| 	cd $(man3dir); rm -f zlib.3 | 	cd $(DESTDIR)$(man3dir); rm -f zlib.3 | ||||||
|  | 	cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc | ||||||
|  |  | ||||||
| mostlyclean: clean | mostlyclean: clean | ||||||
| clean: | clean: | ||||||
| 	rm -f *.o *~ example$(EXE) minigzip$(EXE) \ | 	rm -f *.o *.lo *~ \ | ||||||
|  | 	   example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ | ||||||
|  | 	   example64$(EXE) minigzip64$(EXE) \ | ||||||
| 	   libz.* foo.gz so_locations \ | 	   libz.* foo.gz so_locations \ | ||||||
| 	   _match.s maketree contrib/infback9/*.o | 	   _match.s maketree contrib/infback9/*.o | ||||||
|  | 	rm -rf objs | ||||||
|  |  | ||||||
| maintainer-clean: distclean | maintainer-clean: distclean | ||||||
| distclean: clean | distclean: clean | ||||||
| 	cp -p Makefile.in Makefile | 	cp -p Makefile.in Makefile | ||||||
| 	cp -p zconf.in.h zconf.h | 	rm zlibdefs.h | ||||||
| 	rm -f .DS_Store | 	touch -r configure zlibdefs.h | ||||||
|  | 	rm -f zlib.pc .DS_Store | ||||||
|  |  | ||||||
| tags: | tags: | ||||||
| 	etags *.[ch] | 	etags *.[ch] | ||||||
| @@ -138,17 +220,22 @@ depend: | |||||||
|  |  | ||||||
| # DO NOT DELETE THIS LINE -- make depend depends on it. | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||||||
|  |  | ||||||
| adler32.o: zlib.h zconf.h | adler32.o gzio.o zutil.o: zutil.h zlib.h zconf.h zlibdefs.h | ||||||
| compress.o: zlib.h zconf.h | gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h zlibdefs.h gzguts.h | ||||||
| crc32.o: crc32.h zlib.h zconf.h | compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h zlibdefs.h | ||||||
| deflate.o: deflate.h zutil.h zlib.h zconf.h | crc32.o: zutil.h zlib.h zconf.h zlibdefs.h crc32.h | ||||||
| example.o: zlib.h zconf.h | deflate.o: deflate.h zutil.h zlib.h zconf.h zlibdefs.h | ||||||
| gzio.o: zutil.h zlib.h zconf.h | infback.o inflate.o: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h | ||||||
| inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inffast.o: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h | ||||||
| inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inftrees.o: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h | ||||||
| infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | trees.o: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h | ||||||
| inftrees.o: zutil.h zlib.h zconf.h inftrees.h |  | ||||||
| minigzip.o: zlib.h zconf.h | adler32.lo gzio.lo zutil.lo: zutil.h zlib.h zconf.h zlibdefs.h | ||||||
| trees.o: deflate.h zutil.h zlib.h zconf.h trees.h | gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h zlibdefs.h gzguts.h | ||||||
| uncompr.o: zlib.h zconf.h | compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h zlibdefs.h | ||||||
| zutil.o: zutil.h zlib.h zconf.h | crc32.lo: zutil.h zlib.h zconf.h zlibdefs.h crc32.h | ||||||
|  | deflate.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h | ||||||
|  | infback.lo inflate.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h | ||||||
|  | inffast.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h | ||||||
|  | inftrees.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h | ||||||
|  | trees.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h | ||||||
|   | |||||||
							
								
								
									
										193
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										193
									
								
								Makefile.in
									
									
									
									
									
								
							| @@ -1,11 +1,11 @@ | |||||||
| # Makefile for zlib | # Makefile for zlib | ||||||
| # Copyright (C) 1995-2003 Jean-loup Gailly. | # Copyright (C) 1995-2006 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 | ||||||
|  |  | ||||||
| # To compile and test, type: | # To compile and test, type: | ||||||
| #    ./configure; make test | #    ./configure; make test | ||||||
| # The call of configure is optional if you don't have special requirements | # Normally configure builds both a static and a shared library. | ||||||
| # If you wish to build zlib as a shared library, use: ./configure -s | # If you want to build just a static library, use: ./configure --static | ||||||
|  |  | ||||||
| # To use the asm code, type: | # To use the asm code, type: | ||||||
| #    cp contrib/asm?86/match.S ./match.S | #    cp contrib/asm?86/match.S ./match.S | ||||||
| @@ -24,14 +24,17 @@ CFLAGS=-O | |||||||
| #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ | #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ | ||||||
| #           -Wstrict-prototypes -Wmissing-prototypes | #           -Wstrict-prototypes -Wmissing-prototypes | ||||||
|  |  | ||||||
| LDFLAGS=libz.a | SFLAGS=-O | ||||||
|  |  | ||||||
|  | LDFLAGS=-L. libz.a | ||||||
| LDSHARED=$(CC) | LDSHARED=$(CC) | ||||||
| CPP=$(CC) -E | CPP=$(CC) -E | ||||||
|  |  | ||||||
| LIBS=libz.a | STATICLIB=libz.a | ||||||
| SHAREDLIB=libz.so | SHAREDLIB=libz.so | ||||||
| SHAREDLIBV=libz.so.1.2.2.2 | SHAREDLIBV=libz.so.1.2.3.5 | ||||||
| SHAREDLIBM=libz.so.1 | SHAREDLIBM=libz.so.1 | ||||||
|  | LIBS=$(STATICLIB) $(SHAREDLIB) $(SHAREDLIBV) | ||||||
|  |  | ||||||
| AR=ar rc | AR=ar rc | ||||||
| RANLIB=ranlib | RANLIB=ranlib | ||||||
| @@ -45,21 +48,36 @@ libdir = ${exec_prefix}/lib | |||||||
| includedir = ${prefix}/include | includedir = ${prefix}/include | ||||||
| mandir = ${prefix}/share/man | mandir = ${prefix}/share/man | ||||||
| man3dir = ${mandir}/man3 | man3dir = ${mandir}/man3 | ||||||
|  | pkgconfigdir = ${libdir}/pkgconfig | ||||||
|  |  | ||||||
| OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | OBJC = adler32.o compress.o crc32.o deflate.o gzclose.o gzio.o gzlib.o gzread.o \ | ||||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o | 	gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o | ||||||
|  |  | ||||||
|  | PIC_OBJC = adler32.lo compress.lo crc32.lo deflate.lo gzclose.lo gzio.lo gzlib.lo gzread.lo \ | ||||||
|  | 	gzwrite.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo | ||||||
|  |  | ||||||
|  | # to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo | ||||||
| OBJA = | OBJA = | ||||||
| # to use the asm code: make OBJA=match.o | PIC_OBJA = | ||||||
|  |  | ||||||
| TEST_OBJS = example.o minigzip.o | OBJS = $(OBJC) $(OBJA) | ||||||
|  |  | ||||||
| all: example$(EXE) minigzip$(EXE) | PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) | ||||||
|  |  | ||||||
|  | all: static shared | ||||||
|  |  | ||||||
|  | static: example$(EXE) minigzip$(EXE) | ||||||
|  |  | ||||||
|  | shared: examplesh$(EXE) minigzipsh$(EXE) | ||||||
|  |  | ||||||
|  | all64: example64$(EXE) minigzip64$(EXE) | ||||||
|  |  | ||||||
| check: test | check: test | ||||||
| test: all |  | ||||||
| 	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ | test: all teststatic testshared | ||||||
| 	echo hello world | ./minigzip | ./minigzip -d || \ |  | ||||||
|  | teststatic: static | ||||||
|  | 	@echo hello world | ./minigzip | ./minigzip -d || \ | ||||||
| 	  echo '		*** minigzip test FAILED ***' ; \ | 	  echo '		*** minigzip test FAILED ***' ; \ | ||||||
| 	if ./example; then \ | 	if ./example; then \ | ||||||
| 	  echo '		*** zlib test OK ***'; \ | 	  echo '		*** zlib test OK ***'; \ | ||||||
| @@ -67,8 +85,30 @@ test: all | |||||||
| 	  echo '		*** zlib test FAILED ***'; \ | 	  echo '		*** zlib test FAILED ***'; \ | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| libz.a: $(OBJS) $(OBJA) | testshared: shared | ||||||
| 	$(AR) $@ $(OBJS) $(OBJA) | 	@LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ | ||||||
|  | 	LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ | ||||||
|  | 	DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ | ||||||
|  | 	SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ | ||||||
|  | 	echo hello world | ./minigzipsh | ./minigzipsh -d || \ | ||||||
|  | 	  echo '		*** minigzip shared test FAILED ***' ; \ | ||||||
|  | 	if ./examplesh; then \ | ||||||
|  | 	  echo '		*** zlib shared test OK ***'; \ | ||||||
|  | 	else \ | ||||||
|  | 	  echo '		*** zlib shared test FAILED ***'; \ | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | test64: all64 | ||||||
|  | 	@echo hello world | ./minigzip64 | ./minigzip64 -d || \ | ||||||
|  | 	  echo '		*** minigzip 64-bit test FAILED ***' ; \ | ||||||
|  | 	if ./example64; then \ | ||||||
|  | 	  echo '		*** zlib 64-bit test OK ***'; \ | ||||||
|  | 	else \ | ||||||
|  | 	  echo '		*** zlib 64-bit test FAILED ***'; \ | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | libz.a: $(OBJS) | ||||||
|  | 	$(AR) $@ $(OBJS) | ||||||
| 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1 | 	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1 | ||||||
|  |  | ||||||
| match.o: match.S | match.o: match.S | ||||||
| @@ -77,58 +117,100 @@ match.o: match.S | |||||||
| 	mv _match.o match.o | 	mv _match.o match.o | ||||||
| 	rm -f _match.s | 	rm -f _match.s | ||||||
|  |  | ||||||
| $(SHAREDLIBV): $(OBJS) | match.lo: match.S | ||||||
| 	$(LDSHARED) -o $@ $(OBJS) | 	$(CPP) match.S > _match.s | ||||||
|  | 	$(CC) -c -fPIC _match.s | ||||||
|  | 	mv _match.o match.lo | ||||||
|  | 	rm -f _match.s | ||||||
|  |  | ||||||
|  | example64.o: example.c zlib.h zconf.h zlibdefs.h | ||||||
|  | 	$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ $< | ||||||
|  |  | ||||||
|  | minigzip64.o: minigzip.c zlib.h zconf.h zlibdefs.h | ||||||
|  | 	$(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ $< | ||||||
|  |  | ||||||
|  | .SUFFIXES: .lo | ||||||
|  |  | ||||||
|  | .c.lo: | ||||||
|  | 	-@if [ ! -d objs ]; then mkdir objs; fi | ||||||
|  | 	$(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $< | ||||||
|  | 	-@mv objs/$*.o $@ | ||||||
|  |  | ||||||
|  | $(SHAREDLIBV): $(PIC_OBJS) | ||||||
|  | 	$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) -lc | ||||||
| 	rm -f $(SHAREDLIB) $(SHAREDLIBM) | 	rm -f $(SHAREDLIB) $(SHAREDLIBM) | ||||||
| 	ln -s $@ $(SHAREDLIB) | 	ln -s $@ $(SHAREDLIB) | ||||||
| 	ln -s $@ $(SHAREDLIBM) | 	ln -s $@ $(SHAREDLIBM) | ||||||
|  | 	-@rmdir objs | ||||||
|  |  | ||||||
| example$(EXE): example.o $(LIBS) | example$(EXE): example.o $(STATICLIB) | ||||||
| 	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) | 	$(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) | ||||||
|  |  | ||||||
| minigzip$(EXE): minigzip.o $(LIBS) | minigzip$(EXE): minigzip.o $(STATICLIB) | ||||||
| 	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) | 	$(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) | ||||||
|  |  | ||||||
| install: $(LIBS) | examplesh$(EXE): example.o $(SHAREDLIBV) | ||||||
| 	-@if [ ! -d $(exec_prefix) ]; then mkdir -p $(exec_prefix); fi | 	$(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) | ||||||
| 	-@if [ ! -d $(includedir)  ]; then mkdir -p $(includedir); fi |  | ||||||
| 	-@if [ ! -d $(libdir)      ]; then mkdir -p $(libdir); fi | minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) | ||||||
| 	-@if [ ! -d $(man3dir)     ]; then mkdir -p $(man3dir); fi | 	$(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) | ||||||
| 	cp zlib.h zconf.h $(includedir) |  | ||||||
| 	chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h | example64$(EXE): example64.o $(STATICLIB) | ||||||
| 	cp $(LIBS) $(libdir) | 	$(CC) $(CFLAGS) -o $@ example64.o $(LDFLAGS) | ||||||
| 	cd $(libdir); chmod 755 $(LIBS) |  | ||||||
| 	-@(cd $(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1 | minigzip64$(EXE): minigzip64.o $(STATICLIB) | ||||||
| 	cd $(libdir); if test -f $(SHAREDLIBV); then \ | 	$(CC) $(CFLAGS) -o $@ minigzip64.o $(LDFLAGS) | ||||||
|  |  | ||||||
|  | install-libs: $(LIBS) | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(exec_prefix)  ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(libdir)       ]; then mkdir -p $(DESTDIR)$(libdir); fi | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi | ||||||
|  | 	cp $(LIBS) $(DESTDIR)$(libdir) | ||||||
|  | 	cd $(DESTDIR)$(libdir); chmod 755 $(LIBS) | ||||||
|  | 	-@(cd $(DESTDIR)$(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1 | ||||||
|  | 	cd $(DESTDIR)$(libdir); if test -f $(SHAREDLIBV); then \ | ||||||
| 	  rm -f $(SHAREDLIB) $(SHAREDLIBM); \ | 	  rm -f $(SHAREDLIB) $(SHAREDLIBM); \ | ||||||
| 	  ln -s $(SHAREDLIBV) $(SHAREDLIB); \ | 	  ln -s $(SHAREDLIBV) $(SHAREDLIB); \ | ||||||
| 	  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \ | 	  ln -s $(SHAREDLIBV) $(SHAREDLIBM); \ | ||||||
| 	  (ldconfig || true)  >/dev/null 2>&1; \ | 	  (ldconfig || true)  >/dev/null 2>&1; \ | ||||||
| 	fi | 	fi | ||||||
| 	cp zlib.3 $(man3dir) | 	cp zlib.3 $(DESTDIR)$(man3dir) | ||||||
| 	chmod 644 $(man3dir)/zlib.3 | 	chmod 644 $(DESTDIR)$(man3dir)/zlib.3 | ||||||
|  | 	cp zlib.pc $(DESTDIR)$(pkgconfigdir) | ||||||
|  | 	chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc | ||||||
| # The ranlib in install is needed on NeXTSTEP which checks file times | # The ranlib in install is needed on NeXTSTEP which checks file times | ||||||
| # ldconfig is for Linux | # ldconfig is for Linux | ||||||
|  |  | ||||||
|  | install: install-libs | ||||||
|  | 	-@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi | ||||||
|  | 	cp zlib.h zconf.h zlibdefs.h $(DESTDIR)$(includedir) | ||||||
|  | 	chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h $(DESTDIR)$(includedir)/zlibdefs.h | ||||||
|  |  | ||||||
| uninstall: | uninstall: | ||||||
| 	cd $(includedir); \ | 	cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h zlibdefs.h | ||||||
| 	cd $(libdir); rm -f libz.a; \ | 	cd $(DESTDIR)$(libdir); rm -f libz.a; \ | ||||||
| 	if test -f $(SHAREDLIBV); then \ | 	if test -f $(SHAREDLIBV); then \ | ||||||
| 	  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ | 	  rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ | ||||||
| 	fi | 	fi | ||||||
| 	cd $(man3dir); rm -f zlib.3 | 	cd $(DESTDIR)$(man3dir); rm -f zlib.3 | ||||||
|  | 	cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc | ||||||
|  |  | ||||||
| mostlyclean: clean | mostlyclean: clean | ||||||
| clean: | clean: | ||||||
| 	rm -f *.o *~ example$(EXE) minigzip$(EXE) \ | 	rm -f *.o *.lo *~ \ | ||||||
|  | 	   example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ | ||||||
|  | 	   example64$(EXE) minigzip64$(EXE) \ | ||||||
| 	   libz.* foo.gz so_locations \ | 	   libz.* foo.gz so_locations \ | ||||||
| 	   _match.s maketree contrib/infback9/*.o | 	   _match.s maketree contrib/infback9/*.o | ||||||
|  | 	rm -rf objs | ||||||
|  |  | ||||||
| maintainer-clean: distclean | maintainer-clean: distclean | ||||||
| distclean: clean | distclean: clean | ||||||
| 	cp -p Makefile.in Makefile | 	cp -p Makefile.in Makefile | ||||||
| 	cp -p zconf.in.h zconf.h | 	rm zlibdefs.h | ||||||
| 	rm -f .DS_Store | 	touch -r configure zlibdefs.h | ||||||
|  | 	rm -f zlib.pc .DS_Store | ||||||
|  |  | ||||||
| tags: | tags: | ||||||
| 	etags *.[ch] | 	etags *.[ch] | ||||||
| @@ -138,17 +220,22 @@ depend: | |||||||
|  |  | ||||||
| # DO NOT DELETE THIS LINE -- make depend depends on it. | # DO NOT DELETE THIS LINE -- make depend depends on it. | ||||||
|  |  | ||||||
| adler32.o: zlib.h zconf.h | adler32.o gzio.o zutil.o: zutil.h zlib.h zconf.h zlibdefs.h | ||||||
| compress.o: zlib.h zconf.h | gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h zlibdefs.h gzguts.h | ||||||
| crc32.o: crc32.h zlib.h zconf.h | compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h zlibdefs.h | ||||||
| deflate.o: deflate.h zutil.h zlib.h zconf.h | crc32.o: zutil.h zlib.h zconf.h zlibdefs.h crc32.h | ||||||
| example.o: zlib.h zconf.h | deflate.o: deflate.h zutil.h zlib.h zconf.h zlibdefs.h | ||||||
| gzio.o: zutil.h zlib.h zconf.h | infback.o inflate.o: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h | ||||||
| inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inffast.o: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h | ||||||
| inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inftrees.o: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h | ||||||
| infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | trees.o: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h | ||||||
| inftrees.o: zutil.h zlib.h zconf.h inftrees.h |  | ||||||
| minigzip.o: zlib.h zconf.h | adler32.lo gzio.lo zutil.lo: zutil.h zlib.h zconf.h zlibdefs.h | ||||||
| trees.o: deflate.h zutil.h zlib.h zconf.h trees.h | gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h zlibdefs.h gzguts.h | ||||||
| uncompr.o: zlib.h zconf.h | compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h zlibdefs.h | ||||||
| zutil.o: zutil.h zlib.h zconf.h | crc32.lo: zutil.h zlib.h zconf.h zlibdefs.h crc32.h | ||||||
|  | deflate.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h | ||||||
|  | infback.lo inflate.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h inffixed.h | ||||||
|  | inffast.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h inflate.h inffast.h | ||||||
|  | inftrees.lo: zutil.h zlib.h zconf.h zlibdefs.h inftrees.h | ||||||
|  | trees.lo: deflate.h zutil.h zlib.h zconf.h zlibdefs.h trees.h | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| ZLIB DATA COMPRESSION LIBRARY | ZLIB DATA COMPRESSION LIBRARY | ||||||
|  |  | ||||||
| zlib 1.2.2.2 is a general purpose data compression library.  All the code is | zlib 1.2.3.5 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://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) | http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) | ||||||
| @@ -33,7 +33,7 @@ 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 in | issue of  Dr. Dobb's Journal; a copy of the article is available in | ||||||
| http://dogma.net/markn/articles/zlibtool/zlibtool.htm | http://dogma.net/markn/articles/zlibtool/zlibtool.htm | ||||||
|  |  | ||||||
| The changes made in version 1.2.2.2 are documented in the file ChangeLog. | The changes made in version 1.2.3.5 are documented in the file ChangeLog. | ||||||
|  |  | ||||||
| Unsupported third party contributions are provided in directory "contrib". | Unsupported third party contributions are provided in directory "contrib". | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								adler32.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								adler32.c
									
									
									
									
									
								
							| @@ -1,12 +1,15 @@ | |||||||
| /* adler32.c -- compute the Adler-32 checksum of a data stream | /* adler32.c -- compute the Adler-32 checksum of a data stream | ||||||
|  * Copyright (C) 1995-2004 Mark Adler |  * Copyright (C) 1995-2007 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* @(#) $Id$ */ | /* @(#) $Id$ */ | ||||||
|  |  | ||||||
| #define ZLIB_INTERNAL | #include "zutil.h" | ||||||
| #include "zlib.h" |  | ||||||
|  | #define local static | ||||||
|  |  | ||||||
|  | local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2); | ||||||
|  |  | ||||||
| #define BASE 65521UL    /* largest prime smaller than 65536 */ | #define BASE 65521UL    /* largest prime smaller than 65536 */ | ||||||
| #define NMAX 5552 | #define NMAX 5552 | ||||||
| @@ -125,10 +128,10 @@ uLong ZEXPORT adler32(adler, buf, len) | |||||||
| } | } | ||||||
|  |  | ||||||
| /* ========================================================================= */ | /* ========================================================================= */ | ||||||
| uLong ZEXPORT adler32_combine(adler1, adler2, len2) | local uLong adler32_combine_(adler1, adler2, len2) | ||||||
|     uLong adler1; |     uLong adler1; | ||||||
|     uLong adler2; |     uLong adler2; | ||||||
|     z_off_t len2; |     z_off64_t len2; | ||||||
| { | { | ||||||
|     unsigned long sum1; |     unsigned long sum1; | ||||||
|     unsigned long sum2; |     unsigned long sum2; | ||||||
| @@ -141,9 +144,26 @@ uLong ZEXPORT adler32_combine(adler1, adler2, len2) | |||||||
|     MOD(sum2); |     MOD(sum2); | ||||||
|     sum1 += (adler2 & 0xffff) + BASE - 1; |     sum1 += (adler2 & 0xffff) + BASE - 1; | ||||||
|     sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; |     sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; | ||||||
|     if (sum1 > BASE) sum1 -= BASE; |     if (sum1 >= BASE) sum1 -= BASE; | ||||||
|     if (sum1 > BASE) sum1 -= BASE; |     if (sum1 >= BASE) sum1 -= BASE; | ||||||
|     if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); |     if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1); | ||||||
|     if (sum2 > BASE) sum2 -= BASE; |     if (sum2 >= BASE) sum2 -= BASE; | ||||||
|     return sum1 | (sum2 << 16); |     return sum1 | (sum2 << 16); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* ========================================================================= */ | ||||||
|  | uLong ZEXPORT adler32_combine(adler1, adler2, len2) | ||||||
|  |     uLong adler1; | ||||||
|  |     uLong adler2; | ||||||
|  |     z_off_t len2; | ||||||
|  | { | ||||||
|  |     return adler32_combine_(adler1, adler2, len2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | uLong ZEXPORT adler32_combine64(adler1, adler2, len2) | ||||||
|  |     uLong adler1; | ||||||
|  |     uLong adler2; | ||||||
|  |     z_off64_t len2; | ||||||
|  | { | ||||||
|  |     return adler32_combine_(adler1, adler2, len2); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -14,8 +14,8 @@ LDFLAGS	= -o | |||||||
| LDLIBS	= LIB:scppc.a LIB:end.o | LDLIBS	= LIB:scppc.a LIB:end.o | ||||||
| RM	= delete quiet | RM	= delete quiet | ||||||
|  |  | ||||||
| OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | OBJS = adler32.o compress.o crc32.o gzclose.o gzio.o gzlib.o gzread.o gzwrite.o \ | ||||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o |        uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o | ||||||
|  |  | ||||||
| TEST_OBJS = example.o minigzip.o | TEST_OBJS = example.o minigzip.o | ||||||
|  |  | ||||||
| @@ -55,7 +55,11 @@ compress.o: zlib.h zconf.h | |||||||
| crc32.o: crc32.h zlib.h zconf.h | crc32.o: crc32.h zlib.h zconf.h | ||||||
| deflate.o: deflate.h zutil.h zlib.h zconf.h | deflate.o: deflate.h zutil.h zlib.h zconf.h | ||||||
| example.o: zlib.h zconf.h | example.o: zlib.h zconf.h | ||||||
|  | gzclose.o: zlib.h zconf.h gzguts.h | ||||||
| gzio.o: zutil.h zlib.h zconf.h | gzio.o: zutil.h zlib.h zconf.h | ||||||
|  | gzlib.o: zlib.h zconf.h gzguts.h | ||||||
|  | gzread.o: zlib.h zconf.h gzguts.h | ||||||
|  | gzwrite.o: zlib.h zconf.h gzguts.h | ||||||
| inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | ||||||
| inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | ||||||
| infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | ||||||
|   | |||||||
| @@ -13,8 +13,8 @@ SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \ | |||||||
|        NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \ |        NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \ | ||||||
|        DEF=POSTINC |        DEF=POSTINC | ||||||
|  |  | ||||||
| OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ | OBJS = adler32.o compress.o crc32.o gzclose.o gzio.o gzlib.o gzread.o gzwrite.o \ | ||||||
|        zutil.o inflate.o infback.o inftrees.o inffast.o |        uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o | ||||||
|  |  | ||||||
| TEST_OBJS = example.o minigzip.o | TEST_OBJS = example.o minigzip.o | ||||||
|  |  | ||||||
| @@ -54,7 +54,11 @@ compress.o: zlib.h zconf.h | |||||||
| crc32.o: crc32.h zlib.h zconf.h | crc32.o: crc32.h zlib.h zconf.h | ||||||
| deflate.o: deflate.h zutil.h zlib.h zconf.h | deflate.o: deflate.h zutil.h zlib.h zconf.h | ||||||
| example.o: zlib.h zconf.h | example.o: zlib.h zconf.h | ||||||
|  | gzclose.o: zlib.h zconf.h gzguts.h | ||||||
| gzio.o: zutil.h zlib.h zconf.h | gzio.o: zutil.h zlib.h zconf.h | ||||||
|  | gzlib.o: zlib.h zconf.h gzguts.h | ||||||
|  | gzread.o: zlib.h zconf.h gzguts.h | ||||||
|  | gzwrite.o: zlib.h zconf.h gzguts.h | ||||||
| inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | ||||||
| inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | ||||||
| infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h | ||||||
|   | |||||||
| @@ -118,6 +118,6 @@ | |||||||
|                                  &MODLIB/INFTREES    &MODLIB/TREES       + |                                  &MODLIB/INFTREES    &MODLIB/TREES       + | ||||||
|                                  &MODLIB/UNCOMPR     &MODLIB/ZUTIL)      + |                                  &MODLIB/UNCOMPR     &MODLIB/ZUTIL)      + | ||||||
|                           SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) + |                           SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) + | ||||||
|                           TEXT('ZLIB 1.2.2') TGTRLS(V4R4M0) |                           TEXT('ZLIB 1.2.3') TGTRLS(V4R4M0) | ||||||
|  |  | ||||||
|              ENDPGM |              ENDPGM | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
|         ZLIB version 1.2.2 for AS400 installation instructions |         ZLIB version 1.2.3 for AS400 installation instructions | ||||||
|  |  | ||||||
| I) From an AS400 *SAVF file: | I) From an AS400 *SAVF file: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
|       *  ZLIB.INC - Interface to the general purpose compression library |       *  ZLIB.INC - Interface to the general purpose compression library | ||||||
|       * |       * | ||||||
|       *  ILE RPG400 version by Patrick Monnerat, DATASPHERE. |       *  ILE RPG400 version by Patrick Monnerat, DATASPHERE. | ||||||
|       *  Version 1.2.2.2 |       *  Version 1.2.3.5 | ||||||
|       * |       * | ||||||
|       * |       * | ||||||
|       *  WARNING: |       *  WARNING: | ||||||
| @@ -20,8 +20,12 @@ | |||||||
|       *                               Constants |       *                               Constants | ||||||
|       ************************************************************************** |       ************************************************************************** | ||||||
|       * |       * | ||||||
|      D ZLIB_VERSION    C                   '1.2.2.2'                            Header's version |       *  Versioning information. | ||||||
|      D ZLIB_VERNUM     C                   X'1222' |       * | ||||||
|  |      D ZLIB_VERSION    C                   '1.2.3.5' | ||||||
|  |      D ZLIB_VERNUM     C                   X'1235' | ||||||
|  |       * | ||||||
|  |       *  Other equates. | ||||||
|       * |       * | ||||||
|      D Z_NO_FLUSH      C                   0 |      D Z_NO_FLUSH      C                   0 | ||||||
|      D Z_SYNC_FLUSH    C                   2 |      D Z_SYNC_FLUSH    C                   2 | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| /* compress.c -- compress a memory buffer | /* compress.c -- compress a memory buffer | ||||||
|  * Copyright (C) 1995-2003 Jean-loup Gailly. |  * Copyright (C) 1995-2005 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -75,5 +75,6 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) | |||||||
| uLong ZEXPORT compressBound (sourceLen) | uLong ZEXPORT compressBound (sourceLen) | ||||||
|     uLong sourceLen; |     uLong sourceLen; | ||||||
| { | { | ||||||
|     return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; |     return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + | ||||||
|  |            (sourceLen >> 25) + 13; | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										252
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										252
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -1,29 +1,26 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # configure script for zlib. This script is needed only if | # configure script for zlib. | ||||||
| # you wish to build a shared library and your system supports them, |  | ||||||
| # of if you need special compiler, flags or install directory. |  | ||||||
| # Otherwise, you can just use directly "make test; make install" |  | ||||||
| # | # | ||||||
| # To create a shared library, use "configure --shared"; by default a static | # Normally configure builds both a static and a shared library. | ||||||
| # library is created. If the primitive shared library support provided here | # If you want to build just a static library, use: ./configure --static | ||||||
| # does not work, use ftp://prep.ai.mit.edu/pub/gnu/libtool-*.tar.gz |  | ||||||
| # | # | ||||||
| # To impose specific compiler or flags or install directory, use for example: | # To impose specific compiler or flags or install directory, use for example: | ||||||
| #    prefix=$HOME CC=cc CFLAGS="-O4" ./configure | #    prefix=$HOME CC=cc CFLAGS="-O4" ./configure | ||||||
| # or for csh/tcsh users: | # or for csh/tcsh users: | ||||||
| #    (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) | #    (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) | ||||||
| # LDSHARED is the command to be used to create a shared library |  | ||||||
|  |  | ||||||
| # Incorrect settings of CC or CFLAGS may prevent creating a shared library. | # Incorrect settings of CC or CFLAGS may prevent creating a shared library. | ||||||
| # If you have problems, try without defining CC and CFLAGS before reporting | # If you have problems, try without defining CC and CFLAGS before reporting | ||||||
| # an error. | # an error. | ||||||
|  |  | ||||||
| LIBS=libz.a | STATICLIB=libz.a | ||||||
| LDFLAGS="-L. ${LIBS}" | LDFLAGS="${LDFLAGS} -L. ${STATICLIB}" | ||||||
| VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h` | VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h` | ||||||
|  | VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h` | ||||||
| VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h` | VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h` | ||||||
| VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h` | VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h` | ||||||
| AR=${AR-"ar rc"} | AR=${AR-"ar"} | ||||||
|  | AR_RC="${AR} rc" | ||||||
| RANLIB=${RANLIB-"ranlib"} | RANLIB=${RANLIB-"ranlib"} | ||||||
| prefix=${prefix-/usr/local} | prefix=${prefix-/usr/local} | ||||||
| exec_prefix=${exec_prefix-'${prefix}'} | exec_prefix=${exec_prefix-'${prefix}'} | ||||||
| @@ -31,7 +28,8 @@ libdir=${libdir-'${exec_prefix}/lib'} | |||||||
| includedir=${includedir-'${prefix}/include'} | includedir=${includedir-'${prefix}/include'} | ||||||
| mandir=${mandir-'${prefix}/share/man'} | mandir=${mandir-'${prefix}/share/man'} | ||||||
| shared_ext='.so' | shared_ext='.so' | ||||||
| shared=0 | shared=1 | ||||||
|  | zprefix=0 | ||||||
| gcc=0 | gcc=0 | ||||||
| old_cc="$CC" | old_cc="$CC" | ||||||
| old_cflags="$CFLAGS" | old_cflags="$CFLAGS" | ||||||
| @@ -39,21 +37,26 @@ old_cflags="$CFLAGS" | |||||||
| while test $# -ge 1 | while test $# -ge 1 | ||||||
| do | do | ||||||
| case "$1" in | case "$1" in | ||||||
|     -h* | --h*) |     -h* | --help) | ||||||
|       echo 'usage:' |       echo 'usage:' | ||||||
|       echo '  configure [--shared] [--prefix=PREFIX]  [--exec_prefix=EXPREFIX]' |       echo '  configure [--shared] [--prefix=PREFIX]  [--exec_prefix=EXPREFIX]' | ||||||
|       echo '     [--libdir=LIBDIR] [--includedir=INCLUDEDIR]' |       echo '     [--libdir=LIBDIR] [--includedir=INCLUDEDIR] [--zprefix]' | ||||||
|         exit 0;; |         exit 0 ;; | ||||||
|     -p*=* | --p*=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; |     -p*=* | --prefix=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift ;; | ||||||
|     -e*=* | --e*=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; |     -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift ;; | ||||||
|     -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; |     -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift ;; | ||||||
|     -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;; |     -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift ;; | ||||||
|     -p* | --p*) prefix="$2"; shift; shift;; |     -u*=* | --uname=*) uname=`echo $1 | sed 's/[-a-z_]*=//'`;shift ;; | ||||||
|     -e* | --e*) exec_prefix="$2"; shift; shift;; |     -p* | --prefix) prefix="$2"; shift; shift ;; | ||||||
|     -l* | --l*) libdir="$2"; shift; shift;; |     -e* | --eprefix) exec_prefix="$2"; shift; shift ;; | ||||||
|     -i* | --i*) includedir="$2"; shift; shift;; |     -l* | --libdir) libdir="$2"; shift; shift ;; | ||||||
|     -s* | --s*) shared=1; shift;; |     -i* | --includedir) includedir="$2"; shift; shift ;; | ||||||
|     *) echo "unknown option: $1"; echo "$0 --help for help"; exit 1;; |     -s* | --shared | --enable-shared) shared=1; shift ;; | ||||||
|  |     -t | --static) shared=0; shift ;; | ||||||
|  |     -z* | --zprefix) zprefix=1; shift ;; | ||||||
|  |     --sysconfdir=*) echo "ignored option: --sysconfdir"; shift ;; | ||||||
|  |     --localstatedir=*) echo "ignored option: --localstatedir"; shift ;; | ||||||
|  |     *) echo "unknown option: $1"; echo "$0 --help for help"; exit 1 ;; | ||||||
|     esac |     esac | ||||||
| done | done | ||||||
|  |  | ||||||
| @@ -68,86 +71,112 @@ cc=${CC-gcc} | |||||||
| cflags=${CFLAGS-"-O3"} | cflags=${CFLAGS-"-O3"} | ||||||
| # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure | # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure | ||||||
| case "$cc" in | case "$cc" in | ||||||
|   *gcc*) gcc=1;; |   *gcc*) gcc=1 ;; | ||||||
| esac | esac | ||||||
|  |  | ||||||
| if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then | if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then | ||||||
|   CC="$cc" |   CC="$cc" | ||||||
|   SFLAGS=${CFLAGS-"-fPIC -O3"} |   SFLAGS="${CFLAGS-"-O3"} -fPIC" | ||||||
|   CFLAGS="$cflags" |   CFLAGS="${CFLAGS-"-O3"}" | ||||||
|   case `(uname -s || echo unknown) 2>/dev/null` in |   if test -z "$uname"; then | ||||||
|   Linux | linux | GNU | GNU/*) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};; |     uname=`(uname -s || echo unknown) 2>/dev/null` | ||||||
|  |   fi | ||||||
|  |   case "$uname" in | ||||||
|  |   Linux | linux | GNU | GNU/*) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;; | ||||||
|   CYGWIN* | Cygwin* | cygwin* | OS/2* ) |   CYGWIN* | Cygwin* | cygwin* | OS/2* ) | ||||||
|              EXE='.exe';; |              EXE='.exe' ;; | ||||||
|   QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 |   QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 | ||||||
|          # (alain.bonnefoy@icbt.com) |          # (alain.bonnefoy@icbt.com) | ||||||
|                  LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"};; |                  LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;; | ||||||
|   HP-UX*)        LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} |   HP-UX*) | ||||||
|  |          LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} | ||||||
|  |          case `(uname -m || echo unknown) 2>/dev/null` in | ||||||
|  |          ia64) | ||||||
|  |                  shared_ext='.so' | ||||||
|  |                  SHAREDLIB='libz.so' ;; | ||||||
|  |          *) | ||||||
|                  shared_ext='.sl' |                  shared_ext='.sl' | ||||||
|                  SHAREDLIB='libz.sl';; |                  SHAREDLIB='libz.sl' ;; | ||||||
|  |          esac ;; | ||||||
|   Darwin*)   shared_ext='.dylib' |   Darwin*)   shared_ext='.dylib' | ||||||
|              SHAREDLIB=libz$shared_ext |              SHAREDLIB=libz$shared_ext | ||||||
|              SHAREDLIBV=libz.$VER$shared_ext |              SHAREDLIBV=libz.$VER$shared_ext | ||||||
|              SHAREDLIBM=libz.$VER1$shared_ext |              SHAREDLIBM=libz.$VER1$shared_ext | ||||||
|              LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER"};; |              LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} ;; | ||||||
|   *)             LDSHARED=${LDSHARED-"$cc -shared"};; |   *)             LDSHARED=${LDSHARED-"$cc -shared"} ;; | ||||||
|   esac |   esac | ||||||
| else | else | ||||||
|   # find system name and corresponding cc options |   # find system name and corresponding cc options | ||||||
|   CC=${CC-cc} |   CC=${CC-cc} | ||||||
|   case `(uname -sr || echo unknown) 2>/dev/null` in |   if test -z "$uname"; then | ||||||
|  |     uname=`(uname -sr || echo unknown) 2>/dev/null` | ||||||
|  |   fi | ||||||
|  |   case "$uname" in | ||||||
|   HP-UX*)    SFLAGS=${CFLAGS-"-O +z"} |   HP-UX*)    SFLAGS=${CFLAGS-"-O +z"} | ||||||
|              CFLAGS=${CFLAGS-"-O"} |              CFLAGS=${CFLAGS-"-O"} | ||||||
| #            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} | #            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} | ||||||
|              LDSHARED=${LDSHARED-"ld -b"} |              LDSHARED=${LDSHARED-"ld -b"} | ||||||
|  |          case `(uname -m || echo unknown) 2>/dev/null` in | ||||||
|  |          ia64) | ||||||
|  |              shared_ext='.so' | ||||||
|  |              SHAREDLIB='libz.so' ;; | ||||||
|  |          *) | ||||||
|              shared_ext='.sl' |              shared_ext='.sl' | ||||||
|              SHAREDLIB='libz.sl';; |              SHAREDLIB='libz.sl' ;; | ||||||
|  |          esac ;; | ||||||
|   IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} |   IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} | ||||||
|              CFLAGS=${CFLAGS-"-ansi -O2"} |              CFLAGS=${CFLAGS-"-ansi -O2"} | ||||||
|              LDSHARED=${LDSHARED-"cc -shared"};; |              LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; | ||||||
|   OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} |   OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} | ||||||
|              CFLAGS=${CFLAGS-"-O -std1"} |              CFLAGS=${CFLAGS-"-O -std1"} | ||||||
|              LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};; |              LDFLAGS="${LDFLAGS} -Wl,-rpath,." | ||||||
|  |              LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;; | ||||||
|   OSF1*)     SFLAGS=${CFLAGS-"-O -std1"} |   OSF1*)     SFLAGS=${CFLAGS-"-O -std1"} | ||||||
|              CFLAGS=${CFLAGS-"-O -std1"} |              CFLAGS=${CFLAGS-"-O -std1"} | ||||||
|              LDSHARED=${LDSHARED-"cc -shared"};; |              LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; | ||||||
|   QNX*)      SFLAGS=${CFLAGS-"-4 -O"} |   QNX*)      SFLAGS=${CFLAGS-"-4 -O"} | ||||||
|              CFLAGS=${CFLAGS-"-4 -O"} |              CFLAGS=${CFLAGS-"-4 -O"} | ||||||
|              LDSHARED=${LDSHARED-"cc"} |              LDSHARED=${LDSHARED-"cc"} | ||||||
|              RANLIB=${RANLIB-"true"} |              RANLIB=${RANLIB-"true"} | ||||||
|              AR="cc -A";; |              AR_RC="cc -A" ;; | ||||||
|   SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} |   SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} | ||||||
|              CFLAGS=${CFLAGS-"-O3"} |              CFLAGS=${CFLAGS-"-O3"} | ||||||
|              LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};; |              LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;; | ||||||
|   SunOS\ 5*) SFLAGS=${CFLAGS-"-fast -xcg89 -KPIC -R."} |   SunOS\ 5*) LDSHARED=${LDSHARED-"cc -G"} | ||||||
|              CFLAGS=${CFLAGS-"-fast -xcg89"} |          case `(uname -m || echo unknown) 2>/dev/null` in | ||||||
|              LDSHARED=${LDSHARED-"cc -G"};; |          i86*) | ||||||
|  |              SFLAGS=${CFLAGS-"-xpentium -fast -KPIC -R."} | ||||||
|  |              CFLAGS=${CFLAGS-"-xpentium -fast"} ;; | ||||||
|  |          *) | ||||||
|  |              SFLAGS=${CFLAGS-"-fast -xcg92 -KPIC -R."} | ||||||
|  |              CFLAGS=${CFLAGS-"-fast -xcg92"} ;; | ||||||
|  |          esac ;; | ||||||
|   SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} |   SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} | ||||||
|              CFLAGS=${CFLAGS-"-O2"} |              CFLAGS=${CFLAGS-"-O2"} | ||||||
|              LDSHARED=${LDSHARED-"ld"};; |              LDSHARED=${LDSHARED-"ld"} ;; | ||||||
|   SunStudio\ 9*) SFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} |   SunStudio\ 9*) SFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} | ||||||
|              CFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xtarget=ultra3 -xarch=v9b"} |              CFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xtarget=ultra3 -xarch=v9b"} | ||||||
|              LDSHARED=${LDSHARED-"cc -xarch=v9b"};; |              LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;; | ||||||
|   UNIX_System_V\ 4.2.0) |   UNIX_System_V\ 4.2.0) | ||||||
|              SFLAGS=${CFLAGS-"-KPIC -O"} |              SFLAGS=${CFLAGS-"-KPIC -O"} | ||||||
|              CFLAGS=${CFLAGS-"-O"} |              CFLAGS=${CFLAGS-"-O"} | ||||||
|              LDSHARED=${LDSHARED-"cc -G"};; |              LDSHARED=${LDSHARED-"cc -G"} ;; | ||||||
|   UNIX_SV\ 4.2MP) |   UNIX_SV\ 4.2MP) | ||||||
|              SFLAGS=${CFLAGS-"-Kconform_pic -O"} |              SFLAGS=${CFLAGS-"-Kconform_pic -O"} | ||||||
|              CFLAGS=${CFLAGS-"-O"} |              CFLAGS=${CFLAGS-"-O"} | ||||||
|              LDSHARED=${LDSHARED-"cc -G"};; |              LDSHARED=${LDSHARED-"cc -G"} ;; | ||||||
|   OpenUNIX\ 5) |   OpenUNIX\ 5) | ||||||
|              SFLAGS=${CFLAGS-"-KPIC -O"} |              SFLAGS=${CFLAGS-"-KPIC -O"} | ||||||
|              CFLAGS=${CFLAGS-"-O"} |              CFLAGS=${CFLAGS-"-O"} | ||||||
|              LDSHARED=${LDSHARED-"cc -G"};; |              LDSHARED=${LDSHARED-"cc -G"} ;; | ||||||
|   AIX*)  # Courtesy of dbakker@arrayasolutions.com |   AIX*)  # Courtesy of dbakker@arrayasolutions.com | ||||||
|              SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} |              SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} | ||||||
|              CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} |              CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} | ||||||
|              LDSHARED=${LDSHARED-"xlc -G"};; |              LDSHARED=${LDSHARED-"xlc -G"} ;; | ||||||
|   # send working options for other systems to support@gzip.org |   # send working options for other systems to support@gzip.org | ||||||
|   *)         SFLAGS=${CFLAGS-"-O"} |   *)         SFLAGS=${CFLAGS-"-O"} | ||||||
|              CFLAGS=${CFLAGS-"-O"} |              CFLAGS=${CFLAGS-"-O"} | ||||||
|              LDSHARED=${LDSHARED-"cc -shared"};; |              LDSHARED=${LDSHARED-"cc -shared"} ;; | ||||||
|   esac |   esac | ||||||
| fi | fi | ||||||
|  |  | ||||||
| @@ -158,24 +187,66 @@ SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"} | |||||||
| if test $shared -eq 1; then | if test $shared -eq 1; then | ||||||
|   echo Checking for shared library support... |   echo Checking for shared library support... | ||||||
|   # we must test in two steps (cc then ld), required at least on SunOS 4.x |   # we must test in two steps (cc then ld), required at least on SunOS 4.x | ||||||
|   if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" && |   if test "`($CC -w -c $SFLAGS $test.c) 2>&1`" = "" && | ||||||
|      test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then |      test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then | ||||||
|     CFLAGS="$SFLAGS" |  | ||||||
|     LIBS="$SHAREDLIBV" |  | ||||||
|     echo Building shared library $SHAREDLIBV with $CC. |     echo Building shared library $SHAREDLIBV with $CC. | ||||||
|   elif test -z "$old_cc" -a -z "$old_cflags"; then |   elif test -z "$old_cc" -a -z "$old_cflags"; then | ||||||
|     echo No shared library support. |     echo No shared library support. | ||||||
|     shared=0; |     shared=0; | ||||||
|   else |   else | ||||||
|  |     echo Tested $CC -w -c $SFLAGS $test.c | ||||||
|  |     $CC -w -c $SFLAGS $test.c | ||||||
|  |     echo Tested $LDSHARED -o $test$shared_ext $test.o | ||||||
|  |     $LDSHARED -o $test$shared_ext $test.o | ||||||
|     echo 'No shared library support; try without defining CC and CFLAGS' |     echo 'No shared library support; try without defining CC and CFLAGS' | ||||||
|     shared=0; |     shared=0; | ||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
| if test $shared -eq 0; then | if test $shared -eq 0; then | ||||||
|   LDSHARED="$CC" |   LDSHARED="$CC" | ||||||
|   echo Building static library $LIBS version $VER with $CC. |   ALL="static" | ||||||
|  |   TEST="all teststatic" | ||||||
|  |   echo Building static library $STATICLIB version $VER with $CC. | ||||||
| else | else | ||||||
|   LDFLAGS="-L. ${SHAREDLIBV}" |   ALL="static shared" | ||||||
|  |   TEST="all teststatic testshared" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | cat > zlibdefs.h << EOF | ||||||
|  | /* zlibdefs.h -- compile-time definitions for the zlib compression library | ||||||
|  |  * Copyright (C) 1995-2006 Jean-loup Gailly. | ||||||
|  |  * For conditions of distribution and use, see copyright notice in zlib.h | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | EOF | ||||||
|  |  | ||||||
|  | cat > $test.c <<EOF | ||||||
|  | #include <sys/types.h> | ||||||
|  | off64_t dummy = 0; | ||||||
|  | EOF | ||||||
|  | if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`" = ""; then | ||||||
|  |   CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1" | ||||||
|  |   SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1" | ||||||
|  |   ALL="${ALL} all64" | ||||||
|  |   TEST="${TEST} test64" | ||||||
|  |   echo "Checking for off64_t... Yes." | ||||||
|  |   echo "Checking for fseeko... Yes." | ||||||
|  | else | ||||||
|  |   echo "Checking for off64_t... No." | ||||||
|  |   cat > $test.c <<EOF | ||||||
|  | #include <stdio.h> | ||||||
|  | int main(void) { | ||||||
|  |   fseeko(NULL, 0, 0); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  |   if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then | ||||||
|  |     echo "Checking for fseeko... Yes." | ||||||
|  |   else | ||||||
|  |     CFLAGS="${CFLAGS} -DNO_FSEEKO" | ||||||
|  |     SFLAGS="${SFLAGS} -DNO_FSEEKO" | ||||||
|  |     echo "Checking for fseeko... No." | ||||||
|  |   fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| cat > $test.c <<EOF | cat > $test.c <<EOF | ||||||
| @@ -183,13 +254,27 @@ cat > $test.c <<EOF | |||||||
| int main() { return 0; } | int main() { return 0; } | ||||||
| EOF | EOF | ||||||
| if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | ||||||
|   sed < zconf.in.h "/HAVE_UNISTD_H/s%0%1%" > zconf.h |   cat >> zlibdefs.h <<EOF | ||||||
|  | #include <sys/types.h>	/* for off_t */ | ||||||
|  | #include <unistd.h>	/* for SEEK_* and off_t */ | ||||||
|  | #ifdef VMS | ||||||
|  | #  include <unixio.h>	/* for off_t */ | ||||||
|  | #endif | ||||||
|  | #ifndef z_off_t | ||||||
|  | #  define z_off_t off_t | ||||||
|  | #endif | ||||||
|  | EOF | ||||||
|   echo "Checking for unistd.h... Yes." |   echo "Checking for unistd.h... Yes." | ||||||
| else | else | ||||||
|   cp -p zconf.in.h zconf.h |  | ||||||
|   echo "Checking for unistd.h... No." |   echo "Checking for unistd.h... No." | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | if test $zprefix -eq 1; then | ||||||
|  |   sed < zconf.h "/#ifdef Z_PREFIX/s/def Z_PREFIX/ 1/" > zconf.temp.h | ||||||
|  |   mv zconf.temp.h zconf.h | ||||||
|  |   echo "Using z_ prefix on all symbols." | ||||||
|  | fi | ||||||
|  |  | ||||||
| cat > $test.c <<EOF | cat > $test.c <<EOF | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
| @@ -206,7 +291,7 @@ int main() | |||||||
| EOF | EOF | ||||||
|  |  | ||||||
| if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | ||||||
|   echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()" |   echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | ||||||
|  |  | ||||||
|   cat > $test.c <<EOF |   cat > $test.c <<EOF | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| @@ -258,6 +343,7 @@ EOF | |||||||
|       echo "Checking for return value of vsnprintf()... Yes." |       echo "Checking for return value of vsnprintf()... Yes." | ||||||
|     else |     else | ||||||
|       CFLAGS="$CFLAGS -DHAS_vsnprintf_void" |       CFLAGS="$CFLAGS -DHAS_vsnprintf_void" | ||||||
|  |       SFLAGS="$SFLAGS -DHAS_vsnprintf_void" | ||||||
|       echo "Checking for return value of vsnprintf()... No." |       echo "Checking for return value of vsnprintf()... No." | ||||||
|       echo "  WARNING: apparently vsnprintf() does not return a value. zlib" |       echo "  WARNING: apparently vsnprintf() does not return a value. zlib" | ||||||
|       echo "  can build but will be open to possible string-format security" |       echo "  can build but will be open to possible string-format security" | ||||||
| @@ -265,6 +351,7 @@ EOF | |||||||
|     fi |     fi | ||||||
|   else |   else | ||||||
|     CFLAGS="$CFLAGS -DNO_vsnprintf" |     CFLAGS="$CFLAGS -DNO_vsnprintf" | ||||||
|  |     SFLAGS="$SFLAGS -DNO_vsnprintf" | ||||||
|     echo "Checking for vsnprintf() in stdio.h... No." |     echo "Checking for vsnprintf() in stdio.h... No." | ||||||
|     echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" |     echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | ||||||
|     echo "  can build but will be open to possible buffer-overflow security" |     echo "  can build but will be open to possible buffer-overflow security" | ||||||
| @@ -296,6 +383,7 @@ EOF | |||||||
|       echo "Checking for return value of vsprintf()... Yes." |       echo "Checking for return value of vsprintf()... Yes." | ||||||
|     else |     else | ||||||
|       CFLAGS="$CFLAGS -DHAS_vsprintf_void" |       CFLAGS="$CFLAGS -DHAS_vsprintf_void" | ||||||
|  |       SFLAGS="$SFLAGS -DHAS_vsprintf_void" | ||||||
|       echo "Checking for return value of vsprintf()... No." |       echo "Checking for return value of vsprintf()... No." | ||||||
|       echo "  WARNING: apparently vsprintf() does not return a value. zlib" |       echo "  WARNING: apparently vsprintf() does not return a value. zlib" | ||||||
|       echo "  can build but will be open to possible string-format security" |       echo "  can build but will be open to possible string-format security" | ||||||
| @@ -303,7 +391,7 @@ EOF | |||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
| else | else | ||||||
|   echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()" |   echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | ||||||
|  |  | ||||||
|   cat >$test.c <<EOF |   cat >$test.c <<EOF | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| @@ -345,6 +433,7 @@ EOF | |||||||
|       echo "Checking for return value of snprintf()... Yes." |       echo "Checking for return value of snprintf()... Yes." | ||||||
|     else |     else | ||||||
|       CFLAGS="$CFLAGS -DHAS_snprintf_void" |       CFLAGS="$CFLAGS -DHAS_snprintf_void" | ||||||
|  |       SFLAGS="$SFLAGS -DHAS_snprintf_void" | ||||||
|       echo "Checking for return value of snprintf()... No." |       echo "Checking for return value of snprintf()... No." | ||||||
|       echo "  WARNING: apparently snprintf() does not return a value. zlib" |       echo "  WARNING: apparently snprintf() does not return a value. zlib" | ||||||
|       echo "  can build but will be open to possible string-format security" |       echo "  can build but will be open to possible string-format security" | ||||||
| @@ -352,6 +441,7 @@ EOF | |||||||
|     fi |     fi | ||||||
|   else |   else | ||||||
|     CFLAGS="$CFLAGS -DNO_snprintf" |     CFLAGS="$CFLAGS -DNO_snprintf" | ||||||
|  |     SFLAGS="$SFLAGS -DNO_snprintf" | ||||||
|     echo "Checking for snprintf() in stdio.h... No." |     echo "Checking for snprintf() in stdio.h... No." | ||||||
|     echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib" |     echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib" | ||||||
|     echo "  can build but will be open to possible buffer-overflow security" |     echo "  can build but will be open to possible buffer-overflow security" | ||||||
| @@ -377,6 +467,7 @@ EOF | |||||||
|       echo "Checking for return value of sprintf()... Yes." |       echo "Checking for return value of sprintf()... Yes." | ||||||
|     else |     else | ||||||
|       CFLAGS="$CFLAGS -DHAS_sprintf_void" |       CFLAGS="$CFLAGS -DHAS_sprintf_void" | ||||||
|  |       SFLAGS="$SFLAGS -DHAS_sprintf_void" | ||||||
|       echo "Checking for return value of sprintf()... No." |       echo "Checking for return value of sprintf()... No." | ||||||
|       echo "  WARNING: apparently sprintf() does not return a value. zlib" |       echo "  WARNING: apparently sprintf() does not return a value. zlib" | ||||||
|       echo "  can build but will be open to possible string-format security" |       echo "  can build but will be open to possible string-format security" | ||||||
| @@ -394,6 +485,7 @@ if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | |||||||
| else | else | ||||||
|   echo "Checking for errno.h... No." |   echo "Checking for errno.h... No." | ||||||
|   CFLAGS="$CFLAGS -DNO_ERRNO_H" |   CFLAGS="$CFLAGS -DNO_ERRNO_H" | ||||||
|  |   SFLAGS="$SFLAGS -DNO_ERRNO_H" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| cat > $test.c <<EOF | cat > $test.c <<EOF | ||||||
| @@ -406,6 +498,7 @@ caddr_t hello() { | |||||||
| EOF | EOF | ||||||
| if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | ||||||
|   CFLAGS="$CFLAGS -DUSE_MMAP" |   CFLAGS="$CFLAGS -DUSE_MMAP" | ||||||
|  |   SFLAGS="$SFLAGS -DUSE_MMAP" | ||||||
|   echo Checking for mmap support... Yes. |   echo Checking for mmap support... Yes. | ||||||
| else | else | ||||||
|   echo Checking for mmap support... No. |   echo Checking for mmap support... No. | ||||||
| @@ -419,7 +512,7 @@ case $CFLAGS in | |||||||
|       echo Checking for underline in external names... No. |       echo Checking for underline in external names... No. | ||||||
|     else |     else | ||||||
|       echo Checking for underline in external names... Yes. |       echo Checking for underline in external names... Yes. | ||||||
|     fi;; |     fi ;; | ||||||
| esac | esac | ||||||
|  |  | ||||||
| rm -f $test.[co] $test $test$shared_ext | rm -f $test.[co] $test $test$shared_ext | ||||||
| @@ -428,13 +521,36 @@ rm -f $test.[co] $test $test$shared_ext | |||||||
| sed < Makefile.in " | sed < Makefile.in " | ||||||
| /^CC *=/s#=.*#=$CC# | /^CC *=/s#=.*#=$CC# | ||||||
| /^CFLAGS *=/s#=.*#=$CFLAGS# | /^CFLAGS *=/s#=.*#=$CFLAGS# | ||||||
| /^CPP *=/s#=.*#=$CPP# | /^SFLAGS *=/s#=.*#=$SFLAGS# | ||||||
|  | /^LDFLAGS *=/s#=.*#=$LDFLAGS# | ||||||
| /^LDSHARED *=/s#=.*#=$LDSHARED# | /^LDSHARED *=/s#=.*#=$LDSHARED# | ||||||
| /^LIBS *=/s#=.*#=$LIBS# | /^CPP *=/s#=.*#=$CPP# | ||||||
|  | /^STATICLIB *=/s#=.*#=$STATICLIB# | ||||||
| /^SHAREDLIB *=/s#=.*#=$SHAREDLIB# | /^SHAREDLIB *=/s#=.*#=$SHAREDLIB# | ||||||
| /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# | /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# | ||||||
| /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# | /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# | ||||||
| /^AR *=/s#=.*#=$AR# | /^AR *=/s#=.*#=$AR_RC# | ||||||
|  | /^RANLIB *=/s#=.*#=$RANLIB# | ||||||
|  | /^EXE *=/s#=.*#=$EXE# | ||||||
|  | /^prefix *=/s#=.*#=$prefix# | ||||||
|  | /^exec_prefix *=/s#=.*#=$exec_prefix# | ||||||
|  | /^libdir *=/s#=.*#=$libdir# | ||||||
|  | /^includedir *=/s#=.*#=$includedir# | ||||||
|  | /^mandir *=/s#=.*#=$mandir# | ||||||
|  | /^all: */s#:.*#: $ALL# | ||||||
|  | /^test: */s#:.*#: $TEST# | ||||||
|  | " > Makefile | ||||||
|  |  | ||||||
|  | sed < zlib.pc.in " | ||||||
|  | /^CC *=/s#=.*#=$CC# | ||||||
|  | /^CFLAGS *=/s#=.*#=$CFLAGS# | ||||||
|  | /^CPP *=/s#=.*#=$CPP# | ||||||
|  | /^LDSHARED *=/s#=.*#=$LDSHARED# | ||||||
|  | /^STATICLIB *=/s#=.*#=$STATICLIB# | ||||||
|  | /^SHAREDLIB *=/s#=.*#=$SHAREDLIB# | ||||||
|  | /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# | ||||||
|  | /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# | ||||||
|  | /^AR *=/s#=.*#=$AR_RC# | ||||||
| /^RANLIB *=/s#=.*#=$RANLIB# | /^RANLIB *=/s#=.*#=$RANLIB# | ||||||
| /^EXE *=/s#=.*#=$EXE# | /^EXE *=/s#=.*#=$EXE# | ||||||
| /^prefix *=/s#=.*#=$prefix# | /^prefix *=/s#=.*#=$prefix# | ||||||
| @@ -443,4 +559,6 @@ sed < Makefile.in " | |||||||
| /^includedir *=/s#=.*#=$includedir# | /^includedir *=/s#=.*#=$includedir# | ||||||
| /^mandir *=/s#=.*#=$mandir# | /^mandir *=/s#=.*#=$mandir# | ||||||
| /^LDFLAGS *=/s#=.*#=$LDFLAGS# | /^LDFLAGS *=/s#=.*#=$LDFLAGS# | ||||||
| " > Makefile | " | sed -e " | ||||||
|  | s/\@VERSION\@/$VER/g; | ||||||
|  | " > zlib.pc | ||||||
|   | |||||||
| @@ -8,6 +8,10 @@ ada/        by Dmitriy Anisimkov <anisimkov@yahoo.com> | |||||||
|         Support for Ada |         Support for Ada | ||||||
|         See http://zlib-ada.sourceforge.net/ |         See http://zlib-ada.sourceforge.net/ | ||||||
|  |  | ||||||
|  | amd64/      by Mikhail Teterin <mi@ALDAN.algebra.com> | ||||||
|  |         asm code for AMD64 | ||||||
|  |         See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393 | ||||||
|  |  | ||||||
| asm586/ | asm586/ | ||||||
| asm686/     by Brian Raiter <breadbox@muppetlabs.com> | asm686/     by Brian Raiter <breadbox@muppetlabs.com> | ||||||
|         asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax |         asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax | ||||||
| @@ -42,12 +46,17 @@ masm686/    by Dan Higdon <hdan@kinesoft.com> | |||||||
|             and Chuck Walbourn <chuckw@kinesoft.com> |             and Chuck Walbourn <chuckw@kinesoft.com> | ||||||
|         asm code for Pentium Pro/PII, using the MASM syntax |         asm code for Pentium Pro/PII, using the MASM syntax | ||||||
|  |  | ||||||
|  | masmx64/    by Gilles Vollant <info@winimage.com> | ||||||
|  | 	x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to | ||||||
|  | 	replace longest_match() and inflate_fast() | ||||||
|  |  | ||||||
| masmx86/    by Gilles Vollant <info@winimage.com> | masmx86/    by Gilles Vollant <info@winimage.com> | ||||||
|         x86 asm code to replace longest_match() and inflate_fast(), |         x86 asm code to replace longest_match() and inflate_fast(), | ||||||
|         for Visual C++ and MASM |         for Visual C++ and MASM | ||||||
|  |  | ||||||
| minizip/    by Gilles Vollant <info@winimage.com> | minizip/    by Gilles Vollant <info@winimage.com> | ||||||
|         Mini zip and unzip based on zlib |         Mini zip and unzip based on zlib | ||||||
|  | 	Includes Zip64 support by Mathias Svensson <mathias@result42.com> | ||||||
|         See http://www.winimage.com/zLibDll/unzip.html |         See http://www.winimage.com/zLibDll/unzip.html | ||||||
|  |  | ||||||
| pascal/     by Bob Dellaca <bobdl@xtra.co.nz> et al. | pascal/     by Bob Dellaca <bobdl@xtra.co.nz> et al. | ||||||
|   | |||||||
							
								
								
									
										357
									
								
								contrib/amd64/amd64-match.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								contrib/amd64/amd64-match.S
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,357 @@ | |||||||
|  | /* | ||||||
|  |  * match.S -- optimized version of longest_match() | ||||||
|  |  * based on the similar work by Gilles Vollant, and Brian Raiter, written 1998 | ||||||
|  |  * | ||||||
|  |  * This is free software; you can redistribute it and/or modify it | ||||||
|  |  * under the terms of the BSD License. Use by owners of Che Guevarra | ||||||
|  |  * parafernalia is prohibited, where possible, and highly discouraged | ||||||
|  |  * elsewhere. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef NO_UNDERLINE | ||||||
|  | #	define	match_init	_match_init | ||||||
|  | #	define	longest_match	_longest_match | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define	scanend		ebx | ||||||
|  | #define	scanendw	bx | ||||||
|  | #define	chainlenwmask	edx /* high word: current chain len low word: s->wmask */ | ||||||
|  | #define	curmatch	rsi | ||||||
|  | #define	curmatchd	esi | ||||||
|  | #define	windowbestlen	r8 | ||||||
|  | #define	scanalign	r9 | ||||||
|  | #define	scanalignd	r9d | ||||||
|  | #define	window		r10 | ||||||
|  | #define	bestlen		r11 | ||||||
|  | #define	bestlend	r11d | ||||||
|  | #define	scanstart	r12d | ||||||
|  | #define	scanstartw	r12w | ||||||
|  | #define scan		r13 | ||||||
|  | #define nicematch	r14d | ||||||
|  | #define	limit		r15 | ||||||
|  | #define	limitd		r15d | ||||||
|  | #define prev		rcx | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * The 258 is a "magic number, not a parameter -- changing it | ||||||
|  |  * breaks the hell loose | ||||||
|  |  */ | ||||||
|  | #define	MAX_MATCH	(258) | ||||||
|  | #define	MIN_MATCH	(3) | ||||||
|  | #define	MIN_LOOKAHEAD	(MAX_MATCH + MIN_MATCH + 1) | ||||||
|  | #define	MAX_MATCH_8	((MAX_MATCH + 7) & ~7) | ||||||
|  |  | ||||||
|  | /* stack frame offsets */ | ||||||
|  | #define	LocalVarsSize	(112) | ||||||
|  | #define _chainlenwmask	( 8-LocalVarsSize)(%rsp) | ||||||
|  | #define _windowbestlen	(16-LocalVarsSize)(%rsp) | ||||||
|  | #define save_r14        (24-LocalVarsSize)(%rsp) | ||||||
|  | #define save_rsi        (32-LocalVarsSize)(%rsp) | ||||||
|  | #define save_rbx        (40-LocalVarsSize)(%rsp) | ||||||
|  | #define save_r12        (56-LocalVarsSize)(%rsp) | ||||||
|  | #define save_r13        (64-LocalVarsSize)(%rsp) | ||||||
|  | #define save_r15        (80-LocalVarsSize)(%rsp) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * On AMD64 the first argument of a function (in our case -- the pointer to | ||||||
|  |  * deflate_state structure) is passed in %rdi, hence our offsets below are | ||||||
|  |  * all off of that. | ||||||
|  |  */ | ||||||
|  | #ifndef STRUCT_OFFSET | ||||||
|  | #	define STRUCT_OFFSET	(0) | ||||||
|  | #endif | ||||||
|  | #define dsWSize		( 56 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsWMask		( 64 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsWindow	( 72 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsPrev		( 88 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsMatchLen	(136 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsPrevMatch	(140 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsStrStart	(148 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsMatchStart	(152 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsLookahead	(156 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsPrevLen	(160 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsMaxChainLen	(164 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsGoodMatch	(180 + STRUCT_OFFSET)(%rdi) | ||||||
|  | #define dsNiceMatch	(184 + STRUCT_OFFSET)(%rdi) | ||||||
|  |  | ||||||
|  | .globl	match_init, longest_match | ||||||
|  |  | ||||||
|  | .text | ||||||
|  |  | ||||||
|  | /* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */ | ||||||
|  |  | ||||||
|  | longest_match: | ||||||
|  | /* | ||||||
|  |  * Retrieve the function arguments. %curmatch will hold cur_match | ||||||
|  |  * throughout the entire function (passed via rsi on amd64). | ||||||
|  |  * rdi will hold the pointer to the deflate_state (first arg on amd64) | ||||||
|  |  */ | ||||||
|  | 		mov     %rsi, save_rsi | ||||||
|  | 		mov     %rbx, save_rbx | ||||||
|  | 		mov	%r12, save_r12 | ||||||
|  | 		mov     %r13, save_r13 | ||||||
|  | 		mov     %r14, save_r14 | ||||||
|  | 		mov     %r15, save_r15 | ||||||
|  |  | ||||||
|  | /* uInt wmask = s->w_mask;						*/ | ||||||
|  | /* unsigned chain_length = s->max_chain_length;				*/ | ||||||
|  | /* if (s->prev_length >= s->good_match) {				*/ | ||||||
|  | /*     chain_length >>= 2;						*/ | ||||||
|  | /* }									*/ | ||||||
|  |  | ||||||
|  | 		movl	dsPrevLen, %eax | ||||||
|  | 		movl	dsGoodMatch, %ebx | ||||||
|  | 		cmpl	%ebx, %eax | ||||||
|  | 		movl	dsWMask, %eax | ||||||
|  | 		movl	dsMaxChainLen, %chainlenwmask | ||||||
|  | 		jl	LastMatchGood | ||||||
|  | 		shrl	$2, %chainlenwmask | ||||||
|  | LastMatchGood: | ||||||
|  |  | ||||||
|  | /* chainlen is decremented once beforehand so that the function can	*/ | ||||||
|  | /* use the sign flag instead of the zero flag for the exit test.	*/ | ||||||
|  | /* It is then shifted into the high word, to make room for the wmask	*/ | ||||||
|  | /* value, which it will always accompany.				*/ | ||||||
|  |  | ||||||
|  | 		decl	%chainlenwmask | ||||||
|  | 		shll	$16, %chainlenwmask | ||||||
|  | 		orl	%eax, %chainlenwmask | ||||||
|  |  | ||||||
|  | /* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;	*/ | ||||||
|  |  | ||||||
|  | 		movl	dsNiceMatch, %eax | ||||||
|  | 		movl	dsLookahead, %ebx | ||||||
|  | 		cmpl	%eax, %ebx | ||||||
|  | 		jl	LookaheadLess | ||||||
|  | 		movl	%eax, %ebx | ||||||
|  | LookaheadLess:	movl	%ebx, %nicematch | ||||||
|  |  | ||||||
|  | /* register Bytef *scan = s->window + s->strstart;			*/ | ||||||
|  |  | ||||||
|  | 		mov	dsWindow, %window | ||||||
|  | 		movl	dsStrStart, %limitd | ||||||
|  | 		lea	(%limit, %window), %scan | ||||||
|  |  | ||||||
|  | /* Determine how many bytes the scan ptr is off from being		*/ | ||||||
|  | /* dword-aligned.							*/ | ||||||
|  |  | ||||||
|  | 		mov	%scan, %scanalign | ||||||
|  | 		negl	%scanalignd | ||||||
|  | 		andl	$3, %scanalignd | ||||||
|  |  | ||||||
|  | /* IPos limit = s->strstart > (IPos)MAX_DIST(s) ?			*/ | ||||||
|  | /*     s->strstart - (IPos)MAX_DIST(s) : NIL;				*/ | ||||||
|  |  | ||||||
|  | 		movl	dsWSize, %eax | ||||||
|  | 		subl	$MIN_LOOKAHEAD, %eax | ||||||
|  | 		xorl	%ecx, %ecx | ||||||
|  | 		subl	%eax, %limitd | ||||||
|  | 		cmovng	%ecx, %limitd | ||||||
|  |  | ||||||
|  | /* int best_len = s->prev_length;					*/ | ||||||
|  |  | ||||||
|  | 		movl	dsPrevLen, %bestlend | ||||||
|  |  | ||||||
|  | /* Store the sum of s->window + best_len in %windowbestlen locally, and in memory.	*/ | ||||||
|  |  | ||||||
|  | 		lea	(%window, %bestlen), %windowbestlen | ||||||
|  | 		mov	%windowbestlen, _windowbestlen | ||||||
|  |  | ||||||
|  | /* register ush scan_start = *(ushf*)scan;				*/ | ||||||
|  | /* register ush scan_end   = *(ushf*)(scan+best_len-1);			*/ | ||||||
|  | /* Posf *prev = s->prev;						*/ | ||||||
|  |  | ||||||
|  | 		movzwl	(%scan), %scanstart | ||||||
|  | 		movzwl	-1(%scan, %bestlen), %scanend | ||||||
|  | 		mov	dsPrev, %prev | ||||||
|  |  | ||||||
|  | /* Jump into the main loop.						*/ | ||||||
|  |  | ||||||
|  | 		movl	%chainlenwmask, _chainlenwmask | ||||||
|  | 		jmp	LoopEntry | ||||||
|  |  | ||||||
|  | .balign 16 | ||||||
|  |  | ||||||
|  | /* do { | ||||||
|  |  *     match = s->window + cur_match; | ||||||
|  |  *     if (*(ushf*)(match+best_len-1) != scan_end || | ||||||
|  |  *         *(ushf*)match != scan_start) continue; | ||||||
|  |  *     [...] | ||||||
|  |  * } while ((cur_match = prev[cur_match & wmask]) > limit | ||||||
|  |  *          && --chain_length != 0); | ||||||
|  |  * | ||||||
|  |  * Here is the inner loop of the function. The function will spend the | ||||||
|  |  * majority of its time in this loop, and majority of that time will | ||||||
|  |  * be spent in the first ten instructions. | ||||||
|  |  */ | ||||||
|  | LookupLoop: | ||||||
|  | 		andl	%chainlenwmask, %curmatchd | ||||||
|  | 		movzwl	(%prev, %curmatch, 2), %curmatchd | ||||||
|  | 		cmpl	%limitd, %curmatchd | ||||||
|  | 		jbe	LeaveNow | ||||||
|  | 		subl	$0x00010000, %chainlenwmask | ||||||
|  | 		js	LeaveNow | ||||||
|  | LoopEntry:	cmpw	-1(%windowbestlen, %curmatch), %scanendw | ||||||
|  | 		jne	LookupLoop | ||||||
|  | 		cmpw	%scanstartw, (%window, %curmatch) | ||||||
|  | 		jne	LookupLoop | ||||||
|  |  | ||||||
|  | /* Store the current value of chainlen.					*/ | ||||||
|  | 		movl	%chainlenwmask, _chainlenwmask | ||||||
|  |  | ||||||
|  | /* %scan is the string under scrutiny, and %prev to the string we	*/ | ||||||
|  | /* are hoping to match it up with. In actuality, %esi and %edi are	*/ | ||||||
|  | /* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is	*/ | ||||||
|  | /* initialized to -(MAX_MATCH_8 - scanalign).				*/ | ||||||
|  |  | ||||||
|  | 		mov	$(-MAX_MATCH_8), %rdx | ||||||
|  | 		lea	(%curmatch, %window), %windowbestlen | ||||||
|  | 		lea	MAX_MATCH_8(%windowbestlen, %scanalign), %windowbestlen | ||||||
|  | 		lea	MAX_MATCH_8(%scan, %scanalign), %prev | ||||||
|  |  | ||||||
|  | /* the prefetching below makes very little difference... */ | ||||||
|  | 		prefetcht1	(%windowbestlen, %rdx) | ||||||
|  | 		prefetcht1	(%prev, %rdx) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Test the strings for equality, 8 bytes at a time. At the end, | ||||||
|  |  * adjust %rdx so that it is offset to the exact byte that mismatched. | ||||||
|  |  * | ||||||
|  |  * It should be confessed that this loop usually does not represent | ||||||
|  |  * much of the total running time. Replacing it with a more | ||||||
|  |  * straightforward "rep cmpsb" would not drastically degrade | ||||||
|  |  * performance -- unrolling it, for example, makes no difference. | ||||||
|  |  */ | ||||||
|  | #undef USE_SSE	/* works, but is 6-7% slower, than non-SSE... */ | ||||||
|  | LoopCmps: | ||||||
|  | #ifdef USE_SSE | ||||||
|  | 		/* Preload the SSE registers */ | ||||||
|  | 		movdqu	  (%windowbestlen, %rdx), %xmm1 | ||||||
|  | 		movdqu	  (%prev, %rdx), %xmm2 | ||||||
|  | 		pcmpeqb	%xmm2, %xmm1 | ||||||
|  | 		movdqu	16(%windowbestlen, %rdx), %xmm3 | ||||||
|  | 		movdqu	16(%prev, %rdx), %xmm4 | ||||||
|  | 		pcmpeqb	%xmm4, %xmm3 | ||||||
|  | 		movdqu	32(%windowbestlen, %rdx), %xmm5 | ||||||
|  | 		movdqu	32(%prev, %rdx), %xmm6 | ||||||
|  | 		pcmpeqb	%xmm6, %xmm5 | ||||||
|  | 		movdqu	48(%windowbestlen, %rdx), %xmm7 | ||||||
|  | 		movdqu	48(%prev, %rdx), %xmm8 | ||||||
|  | 		pcmpeqb	%xmm8, %xmm7 | ||||||
|  |  | ||||||
|  | 		/* Check the comparisions' results */ | ||||||
|  | 		pmovmskb %xmm1, %rax | ||||||
|  | 		notw	%ax | ||||||
|  | 		bsfw	%ax, %ax | ||||||
|  | 		jnz	LeaveLoopCmps | ||||||
|  | 		add	$16, %rdx | ||||||
|  | 		pmovmskb %xmm3, %rax | ||||||
|  | 		notw	%ax | ||||||
|  | 		bsfw	%ax, %ax | ||||||
|  | 		jnz	LeaveLoopCmps | ||||||
|  | 		add	$16, %rdx | ||||||
|  | 		pmovmskb %xmm5, %rax | ||||||
|  | 		notw	%ax | ||||||
|  | 		bsfw	%ax, %ax | ||||||
|  | 		jnz	LeaveLoopCmps | ||||||
|  | 		add	$16, %rdx | ||||||
|  | 		pmovmskb %xmm7, %rax | ||||||
|  | 		notw	%ax | ||||||
|  | 		bsfw	%ax, %ax | ||||||
|  | 		jnz	LeaveLoopCmps | ||||||
|  | 		add	$16, %rdx | ||||||
|  | 		jmp	LoopCmps | ||||||
|  | LeaveLoopCmps:	add	%rax, %rdx | ||||||
|  | #else | ||||||
|  | 		mov	(%windowbestlen, %rdx), %rax | ||||||
|  | 		xor	(%prev, %rdx), %rax | ||||||
|  | 		jnz	LeaveLoopCmps | ||||||
|  | 		add	$8, %rdx | ||||||
|  | 		jnz	LoopCmps | ||||||
|  | 		jmp	LenMaximum | ||||||
|  | #	if 0 | ||||||
|  | /* | ||||||
|  |  * This three-liner is tantalizingly simple, but bsf is a slow instruction, | ||||||
|  |  * and the complicated alternative down below is quite a bit faster. Sad... | ||||||
|  |  */ | ||||||
|  | LeaveLoopCmps:	bsf	%rax, %rax /* find the first non-zero bit */ | ||||||
|  | 		shrl	$3, %eax /* divide by 8 to get the byte */ | ||||||
|  | 		add	%rax, %rdx | ||||||
|  | #	else | ||||||
|  | LeaveLoopCmps:	testl   $0xFFFFFFFF, %eax /* Check the first 4 bytes */ | ||||||
|  | 		jnz     Check16 | ||||||
|  | 		add     $4, %rdx | ||||||
|  | 		shr     $32, %rax | ||||||
|  | Check16:        testw   $0xFFFF, %ax | ||||||
|  | 		jnz     LenLower | ||||||
|  | 		add	$2, %rdx | ||||||
|  | 		shrl	$16, %eax | ||||||
|  | LenLower:	subb	$1, %al | ||||||
|  | 		adc	$0, %rdx | ||||||
|  | #	endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* Calculate the length of the match. If it is longer than MAX_MATCH,	*/ | ||||||
|  | /* then automatically accept it as the best possible match and leave.	*/ | ||||||
|  |  | ||||||
|  | 		lea	(%prev, %rdx), %rax | ||||||
|  | 		sub	%scan, %rax | ||||||
|  | 		cmpl	$MAX_MATCH, %eax | ||||||
|  | 		jge	LenMaximum | ||||||
|  |  | ||||||
|  | /* If the length of the match is not longer than the best match we	*/ | ||||||
|  | /* have so far, then forget it and return to the lookup loop.		*/ | ||||||
|  |  | ||||||
|  | 		cmpl	%bestlend, %eax | ||||||
|  | 		jg	LongerMatch | ||||||
|  | 		mov	_windowbestlen, %windowbestlen | ||||||
|  | 		mov	dsPrev, %prev | ||||||
|  | 		movl	_chainlenwmask, %edx | ||||||
|  | 		jmp	LookupLoop | ||||||
|  |  | ||||||
|  | /*         s->match_start = cur_match;					*/ | ||||||
|  | /*         best_len = len;						*/ | ||||||
|  | /*         if (len >= nice_match) break;				*/ | ||||||
|  | /*         scan_end = *(ushf*)(scan+best_len-1);			*/ | ||||||
|  |  | ||||||
|  | LongerMatch: | ||||||
|  | 		movl	%eax, %bestlend | ||||||
|  | 		movl	%curmatchd, dsMatchStart | ||||||
|  | 		cmpl	%nicematch, %eax | ||||||
|  | 		jge	LeaveNow | ||||||
|  |  | ||||||
|  | 		lea	(%window, %bestlen), %windowbestlen | ||||||
|  | 		mov	%windowbestlen, _windowbestlen | ||||||
|  |  | ||||||
|  | 		movzwl	-1(%scan, %rax), %scanend | ||||||
|  | 		mov	dsPrev, %prev | ||||||
|  | 		movl	_chainlenwmask, %chainlenwmask | ||||||
|  | 		jmp	LookupLoop | ||||||
|  |  | ||||||
|  | /* Accept the current string, with the maximum possible length.		*/ | ||||||
|  |  | ||||||
|  | LenMaximum: | ||||||
|  | 		movl	$MAX_MATCH, %bestlend | ||||||
|  | 		movl	%curmatchd, dsMatchStart | ||||||
|  |  | ||||||
|  | /* if ((uInt)best_len <= s->lookahead) return (uInt)best_len;		*/ | ||||||
|  | /* return s->lookahead;							*/ | ||||||
|  |  | ||||||
|  | LeaveNow: | ||||||
|  | 		movl	dsLookahead, %eax | ||||||
|  | 		cmpl	%eax, %bestlend | ||||||
|  | 		cmovngl	%bestlend, %eax | ||||||
|  | LookaheadRet: | ||||||
|  |  | ||||||
|  | /* Restore the registers and return from whence we came.			*/ | ||||||
|  |  | ||||||
|  | 	mov	save_rsi, %rsi | ||||||
|  | 	mov	save_rbx, %rbx | ||||||
|  | 	mov	save_r12, %r12 | ||||||
|  | 	mov	save_r13, %r13 | ||||||
|  | 	mov	save_r14, %r14 | ||||||
|  | 	mov	save_r15, %r15 | ||||||
|  |  | ||||||
|  | 	ret | ||||||
|  |  | ||||||
|  | match_init:	ret | ||||||
| @@ -45,19 +45,29 @@ | |||||||
|  * program to crash horribly, without so much as a warning at |  * program to crash horribly, without so much as a warning at | ||||||
|  * compile time. Sigh.) |  * compile time. Sigh.) | ||||||
|  */ |  */ | ||||||
| #define	dsWSize			36 |  | ||||||
| #define	dsWMask			44 | /* All the +zlib1222add offsets are due to the addition of fields | ||||||
| #define	dsWindow		48 |  *  in zlib in the deflate_state structure since the asm code was first written | ||||||
| #define	dsPrev			56 |  * (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). | ||||||
| #define	dsMatchLen		88 |  * (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). | ||||||
| #define	dsPrevMatch		92 |  * if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). | ||||||
| #define	dsStrStart		100 |  */ | ||||||
| #define	dsMatchStart		104 |  | ||||||
| #define	dsLookahead		108 | #define zlib1222add		(8) | ||||||
| #define	dsPrevLen		112 |  | ||||||
| #define	dsMaxChainLen		116 | #define	dsWSize			(36+zlib1222add) | ||||||
| #define	dsGoodMatch		132 | #define	dsWMask			(44+zlib1222add) | ||||||
| #define	dsNiceMatch		136 | #define	dsWindow		(48+zlib1222add) | ||||||
|  | #define	dsPrev			(56+zlib1222add) | ||||||
|  | #define	dsMatchLen		(88+zlib1222add) | ||||||
|  | #define	dsPrevMatch		(92+zlib1222add) | ||||||
|  | #define	dsStrStart		(100+zlib1222add) | ||||||
|  | #define	dsMatchStart		(104+zlib1222add) | ||||||
|  | #define	dsLookahead		(108+zlib1222add) | ||||||
|  | #define	dsPrevLen		(112+zlib1222add) | ||||||
|  | #define	dsMaxChainLen		(116+zlib1222add) | ||||||
|  | #define	dsGoodMatch		(132+zlib1222add) | ||||||
|  | #define	dsNiceMatch		(136+zlib1222add) | ||||||
|  |  | ||||||
|  |  | ||||||
| .file "match.S" | .file "match.S" | ||||||
|   | |||||||
| @@ -38,26 +38,28 @@ | |||||||
| #define	deflatestate		56	/* the function arguments	*/ | #define	deflatestate		56	/* the function arguments	*/ | ||||||
| #define	curmatch		60 | #define	curmatch		60 | ||||||
|  |  | ||||||
| /* Offsets for fields in the deflate_state structure. These numbers | /* All the +zlib1222add offsets are due to the addition of fields | ||||||
|  * are calculated from the definition of deflate_state, with the |  *  in zlib in the deflate_state structure since the asm code was first written | ||||||
|  * assumption that the compiler will dword-align the fields. (Thus, |  * (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). | ||||||
|  * changing the definition of deflate_state could easily cause this |  * (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). | ||||||
|  * program to crash horribly, without so much as a warning at |  * if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). | ||||||
|  * compile time. Sigh.) |  | ||||||
|  */ |  */ | ||||||
| #define	dsWSize			36 |  | ||||||
| #define	dsWMask			44 | #define zlib1222add		(8) | ||||||
| #define	dsWindow		48 |  | ||||||
| #define	dsPrev			56 | #define	dsWSize			(36+zlib1222add) | ||||||
| #define	dsMatchLen		88 | #define	dsWMask			(44+zlib1222add) | ||||||
| #define	dsPrevMatch		92 | #define	dsWindow		(48+zlib1222add) | ||||||
| #define	dsStrStart		100 | #define	dsPrev			(56+zlib1222add) | ||||||
| #define	dsMatchStart		104 | #define	dsMatchLen		(88+zlib1222add) | ||||||
| #define	dsLookahead		108 | #define	dsPrevMatch		(92+zlib1222add) | ||||||
| #define	dsPrevLen		112 | #define	dsStrStart		(100+zlib1222add) | ||||||
| #define	dsMaxChainLen		116 | #define	dsMatchStart		(104+zlib1222add) | ||||||
| #define	dsGoodMatch		132 | #define	dsLookahead		(108+zlib1222add) | ||||||
| #define	dsNiceMatch		136 | #define	dsPrevLen		(112+zlib1222add) | ||||||
|  | #define	dsMaxChainLen		(116+zlib1222add) | ||||||
|  | #define	dsGoodMatch		(132+zlib1222add) | ||||||
|  | #define	dsNiceMatch		(136+zlib1222add) | ||||||
|  |  | ||||||
|  |  | ||||||
| .file "match.S" | .file "match.S" | ||||||
|   | |||||||
| @@ -152,7 +152,7 @@ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; | |||||||
|   const OutBuf: Pointer; BufSize: Integer); |   const OutBuf: Pointer; BufSize: Integer); | ||||||
|  |  | ||||||
| const | const | ||||||
|   zlib_version = '1.2.2'; |   zlib_version = '1.2.3'; | ||||||
|  |  | ||||||
| type | type | ||||||
|   EZlibError = class(Exception); |   EZlibError = class(Exception); | ||||||
|   | |||||||
| @@ -18,10 +18,10 @@ LDFLAGS = | |||||||
| # variables | # variables | ||||||
| ZLIB_LIB = zlib.lib | ZLIB_LIB = zlib.lib | ||||||
|  |  | ||||||
| OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj | OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzio.obj gzlib.obj gzread.obj | ||||||
| OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | ||||||
| OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj | OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzio.obj+gzlib.obj+gzread.obj | ||||||
| OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj | OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj | ||||||
|  |  | ||||||
|  |  | ||||||
| # targets | # targets | ||||||
| @@ -38,8 +38,16 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h | |||||||
|  |  | ||||||
| deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | ||||||
|  |  | ||||||
|  | gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
| gzio.obj: gzio.c zutil.h zlib.h zconf.h | gzio.obj: gzio.c zutil.h zlib.h zconf.h | ||||||
|  |  | ||||||
|  | gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
|  | gzread.obj: gzread.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
|  | gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
| infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||||
|  inffast.h inffixed.h |  inffast.h inffixed.h | ||||||
|  |  | ||||||
|   | |||||||
| @@ -156,7 +156,7 @@ namespace DotZLibTests | |||||||
|         public void Info_Version() |         public void Info_Version() | ||||||
|         { |         { | ||||||
|             Info info = new Info(); |             Info info = new Info(); | ||||||
|             Assert.AreEqual("1.2.2", Info.Version); |             Assert.AreEqual("1.2.3", Info.Version); | ||||||
|             Assert.AreEqual(32, info.SizeOfUInt); |             Assert.AreEqual(32, info.SizeOfUInt); | ||||||
|             Assert.AreEqual(32, info.SizeOfULong); |             Assert.AreEqual(32, info.SizeOfULong); | ||||||
|             Assert.AreEqual(32, info.SizeOfPointer); |             Assert.AreEqual(32, info.SizeOfPointer); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| /* infback9.c -- inflate deflate64 data using a call-back interface | /* infback9.c -- inflate deflate64 data using a call-back interface | ||||||
|  * Copyright (C) 1995-2003 Mark Adler |  * Copyright (C) 1995-2008 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -242,7 +242,7 @@ void FAR *out_desc; | |||||||
|     code const FAR *distcode;   /* starting table for distance codes */ |     code const FAR *distcode;   /* starting table for distance codes */ | ||||||
|     unsigned lenbits;           /* index bits for lencode */ |     unsigned lenbits;           /* index bits for lencode */ | ||||||
|     unsigned distbits;          /* index bits for distcode */ |     unsigned distbits;          /* index bits for distcode */ | ||||||
|     code this;                  /* current decoding table entry */ |     code here;                  /* current decoding table entry */ | ||||||
|     code last;                  /* parent table entry */ |     code last;                  /* parent table entry */ | ||||||
|     unsigned len;               /* length to copy for repeats, bits to drop */ |     unsigned len;               /* length to copy for repeats, bits to drop */ | ||||||
|     int ret;                    /* return code */ |     int ret;                    /* return code */ | ||||||
| @@ -384,19 +384,19 @@ void FAR *out_desc; | |||||||
|             state->have = 0; |             state->have = 0; | ||||||
|             while (state->have < state->nlen + state->ndist) { |             while (state->have < state->nlen + state->ndist) { | ||||||
|                 for (;;) { |                 for (;;) { | ||||||
|                     this = lencode[BITS(lenbits)]; |                     here = lencode[BITS(lenbits)]; | ||||||
|                     if ((unsigned)(this.bits) <= bits) break; |                     if ((unsigned)(here.bits) <= bits) break; | ||||||
|                     PULLBYTE(); |                     PULLBYTE(); | ||||||
|                 } |                 } | ||||||
|                 if (this.val < 16) { |                 if (here.val < 16) { | ||||||
|                     NEEDBITS(this.bits); |                     NEEDBITS(here.bits); | ||||||
|                     DROPBITS(this.bits); |                     DROPBITS(here.bits); | ||||||
|                     state->lens[state->have++] = this.val; |                     state->lens[state->have++] = here.val; | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                     if (this.val == 16) { |                     if (here.val == 16) { | ||||||
|                         NEEDBITS(this.bits + 2); |                         NEEDBITS(here.bits + 2); | ||||||
|                         DROPBITS(this.bits); |                         DROPBITS(here.bits); | ||||||
|                         if (state->have == 0) { |                         if (state->have == 0) { | ||||||
|                             strm->msg = (char *)"invalid bit length repeat"; |                             strm->msg = (char *)"invalid bit length repeat"; | ||||||
|                             mode = BAD; |                             mode = BAD; | ||||||
| @@ -406,16 +406,16 @@ void FAR *out_desc; | |||||||
|                         copy = 3 + BITS(2); |                         copy = 3 + BITS(2); | ||||||
|                         DROPBITS(2); |                         DROPBITS(2); | ||||||
|                     } |                     } | ||||||
|                     else if (this.val == 17) { |                     else if (here.val == 17) { | ||||||
|                         NEEDBITS(this.bits + 3); |                         NEEDBITS(here.bits + 3); | ||||||
|                         DROPBITS(this.bits); |                         DROPBITS(here.bits); | ||||||
|                         len = 0; |                         len = 0; | ||||||
|                         copy = 3 + BITS(3); |                         copy = 3 + BITS(3); | ||||||
|                         DROPBITS(3); |                         DROPBITS(3); | ||||||
|                     } |                     } | ||||||
|                     else { |                     else { | ||||||
|                         NEEDBITS(this.bits + 7); |                         NEEDBITS(here.bits + 7); | ||||||
|                         DROPBITS(this.bits); |                         DROPBITS(here.bits); | ||||||
|                         len = 0; |                         len = 0; | ||||||
|                         copy = 11 + BITS(7); |                         copy = 11 + BITS(7); | ||||||
|                         DROPBITS(7); |                         DROPBITS(7); | ||||||
| @@ -433,7 +433,16 @@ void FAR *out_desc; | |||||||
|             /* handle error breaks in while */ |             /* handle error breaks in while */ | ||||||
|             if (mode == BAD) break; |             if (mode == BAD) break; | ||||||
|  |  | ||||||
|             /* build code tables */ |             /* check for end-of-block code (better have one) */ | ||||||
|  |             if (state->lens[256] == 0) { | ||||||
|  |                 strm->msg = (char *)"invalid code -- missing end-of-block"; | ||||||
|  |                 mode = BAD; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             /* build code tables -- note: do not change the lenbits or distbits | ||||||
|  |                values here (9 and 6) without reading the comments in inftree9.h | ||||||
|  |                concerning the ENOUGH constants, which depend on those values */ | ||||||
|             state->next = state->codes; |             state->next = state->codes; | ||||||
|             lencode = (code const FAR *)(state->next); |             lencode = (code const FAR *)(state->next); | ||||||
|             lenbits = 9; |             lenbits = 9; | ||||||
| @@ -460,28 +469,28 @@ void FAR *out_desc; | |||||||
|         case LEN: |         case LEN: | ||||||
|             /* get a literal, length, or end-of-block code */ |             /* get a literal, length, or end-of-block code */ | ||||||
|             for (;;) { |             for (;;) { | ||||||
|                 this = lencode[BITS(lenbits)]; |                 here = lencode[BITS(lenbits)]; | ||||||
|                 if ((unsigned)(this.bits) <= bits) break; |                 if ((unsigned)(here.bits) <= bits) break; | ||||||
|                 PULLBYTE(); |                 PULLBYTE(); | ||||||
|             } |             } | ||||||
|             if (this.op && (this.op & 0xf0) == 0) { |             if (here.op && (here.op & 0xf0) == 0) { | ||||||
|                 last = this; |                 last = here; | ||||||
|                 for (;;) { |                 for (;;) { | ||||||
|                     this = lencode[last.val + |                     here = lencode[last.val + | ||||||
|                             (BITS(last.bits + last.op) >> last.bits)]; |                             (BITS(last.bits + last.op) >> last.bits)]; | ||||||
|                     if ((unsigned)(last.bits + this.bits) <= bits) break; |                     if ((unsigned)(last.bits + here.bits) <= bits) break; | ||||||
|                     PULLBYTE(); |                     PULLBYTE(); | ||||||
|                 } |                 } | ||||||
|                 DROPBITS(last.bits); |                 DROPBITS(last.bits); | ||||||
|             } |             } | ||||||
|             DROPBITS(this.bits); |             DROPBITS(here.bits); | ||||||
|             length = (unsigned)this.val; |             length = (unsigned)here.val; | ||||||
|  |  | ||||||
|             /* process literal */ |             /* process literal */ | ||||||
|             if (this.op == 0) { |             if (here.op == 0) { | ||||||
|                 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? |                 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? | ||||||
|                         "inflate:         literal '%c'\n" : |                         "inflate:         literal '%c'\n" : | ||||||
|                         "inflate:         literal 0x%02x\n", this.val)); |                         "inflate:         literal 0x%02x\n", here.val)); | ||||||
|                 ROOM(); |                 ROOM(); | ||||||
|                 *put++ = (unsigned char)(length); |                 *put++ = (unsigned char)(length); | ||||||
|                 left--; |                 left--; | ||||||
| @@ -490,21 +499,21 @@ void FAR *out_desc; | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             /* process end of block */ |             /* process end of block */ | ||||||
|             if (this.op & 32) { |             if (here.op & 32) { | ||||||
|                 Tracevv((stderr, "inflate:         end of block\n")); |                 Tracevv((stderr, "inflate:         end of block\n")); | ||||||
|                 mode = TYPE; |                 mode = TYPE; | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             /* invalid code */ |             /* invalid code */ | ||||||
|             if (this.op & 64) { |             if (here.op & 64) { | ||||||
|                 strm->msg = (char *)"invalid literal/length code"; |                 strm->msg = (char *)"invalid literal/length code"; | ||||||
|                 mode = BAD; |                 mode = BAD; | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             /* length code -- get extra bits, if any */ |             /* length code -- get extra bits, if any */ | ||||||
|             extra = (unsigned)(this.op) & 31; |             extra = (unsigned)(here.op) & 31; | ||||||
|             if (extra != 0) { |             if (extra != 0) { | ||||||
|                 NEEDBITS(extra); |                 NEEDBITS(extra); | ||||||
|                 length += BITS(extra); |                 length += BITS(extra); | ||||||
| @@ -514,30 +523,30 @@ void FAR *out_desc; | |||||||
|  |  | ||||||
|             /* get distance code */ |             /* get distance code */ | ||||||
|             for (;;) { |             for (;;) { | ||||||
|                 this = distcode[BITS(distbits)]; |                 here = distcode[BITS(distbits)]; | ||||||
|                 if ((unsigned)(this.bits) <= bits) break; |                 if ((unsigned)(here.bits) <= bits) break; | ||||||
|                 PULLBYTE(); |                 PULLBYTE(); | ||||||
|             } |             } | ||||||
|             if ((this.op & 0xf0) == 0) { |             if ((here.op & 0xf0) == 0) { | ||||||
|                 last = this; |                 last = here; | ||||||
|                 for (;;) { |                 for (;;) { | ||||||
|                     this = distcode[last.val + |                     here = distcode[last.val + | ||||||
|                             (BITS(last.bits + last.op) >> last.bits)]; |                             (BITS(last.bits + last.op) >> last.bits)]; | ||||||
|                     if ((unsigned)(last.bits + this.bits) <= bits) break; |                     if ((unsigned)(last.bits + here.bits) <= bits) break; | ||||||
|                     PULLBYTE(); |                     PULLBYTE(); | ||||||
|                 } |                 } | ||||||
|                 DROPBITS(last.bits); |                 DROPBITS(last.bits); | ||||||
|             } |             } | ||||||
|             DROPBITS(this.bits); |             DROPBITS(here.bits); | ||||||
|             if (this.op & 64) { |             if (here.op & 64) { | ||||||
|                 strm->msg = (char *)"invalid distance code"; |                 strm->msg = (char *)"invalid distance code"; | ||||||
|                 mode = BAD; |                 mode = BAD; | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             offset = (unsigned)this.val; |             offset = (unsigned)here.val; | ||||||
|  |  | ||||||
|             /* get distance extra bits, if any */ |             /* get distance extra bits, if any */ | ||||||
|             extra = (unsigned)(this.op) & 15; |             extra = (unsigned)(here.op) & 15; | ||||||
|             if (extra != 0) { |             if (extra != 0) { | ||||||
|                 NEEDBITS(extra); |                 NEEDBITS(extra); | ||||||
|                 offset += BITS(extra); |                 offset += BITS(extra); | ||||||
|   | |||||||
| @@ -16,6 +16,10 @@ | |||||||
|  * zlib.h must be included before this header file. |  * zlib.h must be included before this header file. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
| ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm, | ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm, | ||||||
|                                     in_func in, void FAR *in_desc, |                                     in_func in, void FAR *in_desc, | ||||||
|                                     out_func out, void FAR *out_desc)); |                                     out_func out, void FAR *out_desc)); | ||||||
| @@ -27,3 +31,7 @@ ZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm, | |||||||
| #define inflateBack9Init(strm, window) \ | #define inflateBack9Init(strm, window) \ | ||||||
|         inflateBack9Init_((strm), (window), \ |         inflateBack9Init_((strm), (window), \ | ||||||
|         ZLIB_VERSION, sizeof(z_stream)) |         ZLIB_VERSION, sizeof(z_stream)) | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| /* inftree9.c -- generate Huffman trees for efficient decoding | /* inftree9.c -- generate Huffman trees for efficient decoding | ||||||
|  * Copyright (C) 1995-2003 Mark Adler |  * Copyright (C) 1995-2008 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 inflate9_copyright[] = | const char inflate9_copyright[] = | ||||||
|    " inflate9 1.2.2.2 Copyright 1995-2004 Mark Adler "; |    " inflate9 1.2.3.5 Copyright 1995-2009 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 | ||||||
| @@ -64,7 +64,7 @@ unsigned short FAR *work; | |||||||
|     static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |     static const unsigned short lext[31] = { /* Length codes 257..285 extra */ | ||||||
|         128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, |         128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, | ||||||
|         130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, |         130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, | ||||||
|         133, 133, 133, 133, 144, 72, 199}; |         133, 133, 133, 133, 144, 69, 199}; | ||||||
|     static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ |     static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ | ||||||
|         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, |         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, | ||||||
|         65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, |         65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, | ||||||
| @@ -128,7 +128,7 @@ unsigned short FAR *work; | |||||||
|         left -= count[len]; |         left -= count[len]; | ||||||
|         if (left < 0) return -1;        /* over-subscribed */ |         if (left < 0) return -1;        /* over-subscribed */ | ||||||
|     } |     } | ||||||
|     if (left > 0 && (type == CODES || (codes - count[0] != 1))) |     if (left > 0 && (type == CODES || max != 1)) | ||||||
|         return -1;                      /* incomplete set */ |         return -1;                      /* incomplete set */ | ||||||
|  |  | ||||||
|     /* generate offsets into symbol table for each length for sorting */ |     /* generate offsets into symbol table for each length for sorting */ | ||||||
| @@ -160,11 +160,10 @@ unsigned short FAR *work; | |||||||
|        entered in the tables. |        entered in the tables. | ||||||
|  |  | ||||||
|        used keeps track of how many table entries have been allocated from the |        used keeps track of how many table entries have been allocated from the | ||||||
|        provided *table space.  It is checked when a LENS table is being made |        provided *table space.  It is checked for LENS and DIST tables against | ||||||
|        against the space in *table, ENOUGH, minus the maximum space needed by |        the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in | ||||||
|        the worst case distance code, MAXD.  This should never happen, but the |        the initial root table size constants.  See the comments in inftree9.h | ||||||
|        sufficiency of ENOUGH has not been proven exhaustively, hence the check. |        for more information. | ||||||
|        This assumes that when type == LENS, bits == 9. |  | ||||||
|  |  | ||||||
|        sym increments through all symbols, and the loop terminates when |        sym increments through all symbols, and the loop terminates when | ||||||
|        all codes of length max, i.e. all codes, have been processed.  This |        all codes of length max, i.e. all codes, have been processed.  This | ||||||
| @@ -203,7 +202,8 @@ unsigned short FAR *work; | |||||||
|     mask = used - 1;            /* mask for comparing low */ |     mask = used - 1;            /* mask for comparing low */ | ||||||
|  |  | ||||||
|     /* check available table space */ |     /* check available table space */ | ||||||
|     if (type == LENS && used >= ENOUGH - MAXD) |     if ((type == LENS && used >= ENOUGH_LENS) || | ||||||
|  |         (type == DISTS && used >= ENOUGH_DISTS)) | ||||||
|         return 1; |         return 1; | ||||||
|  |  | ||||||
|     /* process all codes and make table entries */ |     /* process all codes and make table entries */ | ||||||
| @@ -270,7 +270,8 @@ unsigned short FAR *work; | |||||||
|  |  | ||||||
|             /* check for enough space */ |             /* check for enough space */ | ||||||
|             used += 1U << curr; |             used += 1U << curr; | ||||||
|             if (type == LENS && used >= ENOUGH - MAXD) |             if ((type == LENS && used >= ENOUGH_LENS) || | ||||||
|  |                 (type == DISTS && used >= ENOUGH_DISTS)) | ||||||
|                 return 1; |                 return 1; | ||||||
|  |  | ||||||
|             /* point entry in root table to sub-table */ |             /* point entry in root table to sub-table */ | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| /* inftree9.h -- header to use inftree9.c | /* inftree9.h -- header to use inftree9.c | ||||||
|  * Copyright (C) 1995-2003 Mark Adler |  * Copyright (C) 1995-2008 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -35,15 +35,21 @@ typedef struct { | |||||||
|     01000000 - invalid code |     01000000 - invalid code | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* Maximum size of dynamic tree.  The maximum found in a long but non- | /* Maximum size of the dynamic table.  The maximum number of code structures is | ||||||
|    exhaustive search was 1004 code structures (850 for length/literals |    1446, which is the sum of 852 for literal/length codes and 594 for distance | ||||||
|    and 154 for distances, the latter actually the result of an |    codes.  These values were found by exhaustive searches using the program | ||||||
|    exhaustive search).  The true maximum is not known, but the value |    examples/enough.c found in the zlib distribtution.  The arguments to that | ||||||
|    below is more than safe. */ |    program are the number of symbols, the initial root table size, and the | ||||||
| #define ENOUGH 1440 |    maximum bit length of a code.  "enough 286 9 15" for literal/length codes | ||||||
| #define MAXD 154 |    returns returns 852, and "enough 32 6 15" for distance codes returns 594. | ||||||
|  |    The initial root table size (9 or 6) is found in the fifth argument of the | ||||||
|  |    inflate_table() calls in infback9.c.  If the root table size is changed, | ||||||
|  |    then these maximum sizes would be need to be recalculated and updated. */ | ||||||
|  | #define ENOUGH_LENS 852 | ||||||
|  | #define ENOUGH_DISTS 594 | ||||||
|  | #define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) | ||||||
|  |  | ||||||
| /* Type of code to build for inftable() */ | /* Type of code to build for inflate_table9() */ | ||||||
| typedef enum { | typedef enum { | ||||||
|     CODES, |     CODES, | ||||||
|     LENS, |     LENS, | ||||||
|   | |||||||
| @@ -12,6 +12,8 @@ | |||||||
| ; Based on match.S | ; Based on match.S | ||||||
| ; Written for zlib 1.1.2 | ; Written for zlib 1.1.2 | ||||||
| ; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com> | ; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com> | ||||||
|  | ; | ||||||
|  | ; Modified by Gilles Vollant (2005) for add gzhead and gzindex | ||||||
|  |  | ||||||
| 	.686P | 	.686P | ||||||
| 	.MODEL	FLAT | 	.MODEL	FLAT | ||||||
| @@ -39,6 +41,9 @@ ds_pending_buf_size	dd ? | |||||||
| ds_pending_out		dd ? | ds_pending_out		dd ? | ||||||
| ds_pending		dd ? | ds_pending		dd ? | ||||||
| ds_wrap			dd ? | ds_wrap			dd ? | ||||||
|  | ; gzhead and gzindex are added in zlib 1.2.2.2 (see deflate.h) | ||||||
|  | ds_gzhead               dd ? | ||||||
|  | ds_gzindex              dd ? | ||||||
| ds_data_type		db ? | ds_data_type		db ? | ||||||
| ds_method		db ? | ds_method		db ? | ||||||
| 			db ?	; padding | 			db ?	; padding | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								contrib/masmx64/bld_ml64.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								contrib/masmx64/bld_ml64.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | ml64.exe /Flinffasx64 /c /Zi inffasx64.asm | ||||||
|  | ml64.exe /Flgvmat64   /c /Zi gvmat64.asm | ||||||
							
								
								
									
										513
									
								
								contrib/masmx64/gvmat64.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										513
									
								
								contrib/masmx64/gvmat64.asm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,513 @@ | |||||||
|  | ;uInt longest_match_x64( | ||||||
|  | ;    deflate_state *s, | ||||||
|  | ;    IPos cur_match);                             /* current match */ | ||||||
|  |  | ||||||
|  | ; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86 | ||||||
|  | ; Copyright (C) 1995-2005 Jean-loup Gailly, Brian Raiter and Gilles Vollant. | ||||||
|  | ; | ||||||
|  | ; File written by Gilles Vollant, by converting to assembly the longest_match | ||||||
|  | ;  from Jean-loup Gailly in deflate.c of zLib and infoZip zip. | ||||||
|  | ; | ||||||
|  | ;  and by taking inspiration on asm686 with masm, optimised assembly code | ||||||
|  | ;        from Brian Raiter, written 1998 | ||||||
|  | ; | ||||||
|  | ;         http://www.zlib.net | ||||||
|  | ;         http://www.winimage.com/zLibDll | ||||||
|  | ;         http://www.muppetlabs.com/~breadbox/software/assembly.html | ||||||
|  | ; | ||||||
|  | ; to compile this file for infozip Zip, I use option: | ||||||
|  | ;   ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm | ||||||
|  | ; | ||||||
|  | ; to compile this file for zLib, I use option: | ||||||
|  | ;   ml64.exe /Flgvmat64 /c /Zi gvmat64.asm | ||||||
|  | ; Be carrefull to adapt zlib1222add below to your version of zLib | ||||||
|  | ;   (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change | ||||||
|  | ;    value of zlib1222add later) | ||||||
|  | ; | ||||||
|  | ; This file compile with Microsoft Macro Assembler (x64) for AMD64 | ||||||
|  | ; | ||||||
|  | ;   ml64.exe is given with Visual Studio 2005 and Windows 2003 server DDK | ||||||
|  | ; | ||||||
|  | ;   (you can get Windows 2003 server DDK with ml64 and cl for AMD64 from | ||||||
|  | ;      http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price) | ||||||
|  | ; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;uInt longest_match(s, cur_match) | ||||||
|  | ;    deflate_state *s; | ||||||
|  | ;    IPos cur_match;                             /* current match */ | ||||||
|  | .code | ||||||
|  | longest_match PROC | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;LocalVarsSize   equ 88 | ||||||
|  |  LocalVarsSize   equ 72 | ||||||
|  |  | ||||||
|  | ; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12 | ||||||
|  | ; free register :  r14,r15 | ||||||
|  | ; register can be saved : rsp | ||||||
|  |  | ||||||
|  |  chainlenwmask   equ  rsp + 8 - LocalVarsSize    ; high word: current chain len | ||||||
|  |                                                  ; low word: s->wmask | ||||||
|  | ;window          equ  rsp + xx - LocalVarsSize   ; local copy of s->window ; stored in r10 | ||||||
|  | ;windowbestlen   equ  rsp + xx - LocalVarsSize   ; s->window + bestlen , use r10+r11 | ||||||
|  | ;scanstart       equ  rsp + xx - LocalVarsSize   ; first two bytes of string ; stored in r12w | ||||||
|  | ;scanend         equ  rsp + xx - LocalVarsSize   ; last two bytes of string use ebx | ||||||
|  | ;scanalign       equ  rsp + xx - LocalVarsSize   ; dword-misalignment of string r13 | ||||||
|  | ;bestlen         equ  rsp + xx - LocalVarsSize   ; size of best match so far -> r11d | ||||||
|  | ;scan            equ  rsp + xx - LocalVarsSize   ; ptr to string wanting match -> r9 | ||||||
|  | IFDEF INFOZIP | ||||||
|  | ELSE | ||||||
|  |  nicematch       equ  (rsp + 16 - LocalVarsSize) ; a good enough match size | ||||||
|  | ENDIF | ||||||
|  |  | ||||||
|  | save_rdi        equ  rsp + 24 - LocalVarsSize | ||||||
|  | save_rsi        equ  rsp + 32 - LocalVarsSize | ||||||
|  | save_rbx        equ  rsp + 40 - LocalVarsSize | ||||||
|  | save_rbp        equ  rsp + 48 - LocalVarsSize | ||||||
|  | save_r12        equ  rsp + 56 - LocalVarsSize | ||||||
|  | save_r13        equ  rsp + 64 - LocalVarsSize | ||||||
|  | ;save_r14        equ  rsp + 72 - LocalVarsSize | ||||||
|  | ;save_r15        equ  rsp + 80 - LocalVarsSize | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;  all the +4 offsets are due to the addition of pending_buf_size (in zlib | ||||||
|  | ;  in the deflate_state structure since the asm code was first written | ||||||
|  | ;  (if you compile with zlib 1.0.4 or older, remove the +4). | ||||||
|  | ;  Note : these value are good with a 8 bytes boundary pack structure | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     MAX_MATCH           equ     258 | ||||||
|  |     MIN_MATCH           equ     3 | ||||||
|  |     MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; Offsets for fields in the deflate_state structure. These numbers | ||||||
|  | ;;; are calculated from the definition of deflate_state, with the | ||||||
|  | ;;; assumption that the compiler will dword-align the fields. (Thus, | ||||||
|  | ;;; changing the definition of deflate_state could easily cause this | ||||||
|  | ;;; program to crash horribly, without so much as a warning at | ||||||
|  | ;;; compile time. Sigh.) | ||||||
|  |  | ||||||
|  | ;  all the +zlib1222add offsets are due to the addition of fields | ||||||
|  | ;  in zlib in the deflate_state structure since the asm code was first written | ||||||
|  | ;  (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). | ||||||
|  | ;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). | ||||||
|  | ;  if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). | ||||||
|  |  | ||||||
|  |  | ||||||
|  | IFDEF INFOZIP | ||||||
|  |  | ||||||
|  | _DATA   SEGMENT | ||||||
|  | COMM    window_size:DWORD | ||||||
|  | ; WMask ; 7fff | ||||||
|  | COMM    window:BYTE:010040H | ||||||
|  | COMM    prev:WORD:08000H | ||||||
|  | ; MatchLen : unused | ||||||
|  | ; PrevMatch : unused | ||||||
|  | COMM    strstart:DWORD | ||||||
|  | COMM    match_start:DWORD | ||||||
|  | ; Lookahead : ignore | ||||||
|  | COMM    prev_length:DWORD ; PrevLen | ||||||
|  | COMM    max_chain_length:DWORD | ||||||
|  | COMM    good_match:DWORD | ||||||
|  | COMM    nice_match:DWORD | ||||||
|  | prev_ad equ OFFSET prev | ||||||
|  | window_ad equ OFFSET window | ||||||
|  | nicematch equ nice_match | ||||||
|  | _DATA ENDS | ||||||
|  | WMask equ 07fffh | ||||||
|  |  | ||||||
|  | ELSE | ||||||
|  |  | ||||||
|  |   IFNDEF zlib1222add | ||||||
|  |     zlib1222add equ 8 | ||||||
|  |   ENDIF | ||||||
|  | dsWSize         equ 56+zlib1222add+(zlib1222add/2) | ||||||
|  | dsWMask         equ 64+zlib1222add+(zlib1222add/2) | ||||||
|  | dsWindow        equ 72+zlib1222add | ||||||
|  | dsPrev          equ 88+zlib1222add | ||||||
|  | dsMatchLen      equ 128+zlib1222add | ||||||
|  | dsPrevMatch     equ 132+zlib1222add | ||||||
|  | dsStrStart      equ 140+zlib1222add | ||||||
|  | dsMatchStart    equ 144+zlib1222add | ||||||
|  | dsLookahead     equ 148+zlib1222add | ||||||
|  | dsPrevLen       equ 152+zlib1222add | ||||||
|  | dsMaxChainLen   equ 156+zlib1222add | ||||||
|  | dsGoodMatch     equ 172+zlib1222add | ||||||
|  | dsNiceMatch     equ 176+zlib1222add | ||||||
|  |  | ||||||
|  | window_size     equ [ rcx + dsWSize] | ||||||
|  | WMask           equ [ rcx + dsWMask] | ||||||
|  | window_ad       equ [ rcx + dsWindow] | ||||||
|  | prev_ad         equ [ rcx + dsPrev] | ||||||
|  | strstart        equ [ rcx + dsStrStart] | ||||||
|  | match_start     equ [ rcx + dsMatchStart] | ||||||
|  | Lookahead       equ [ rcx + dsLookahead] ; 0ffffffffh on infozip | ||||||
|  | prev_length     equ [ rcx + dsPrevLen] | ||||||
|  | max_chain_length equ [ rcx + dsMaxChainLen] | ||||||
|  | good_match      equ [ rcx + dsGoodMatch] | ||||||
|  | nice_match      equ [ rcx + dsNiceMatch] | ||||||
|  | ENDIF | ||||||
|  |  | ||||||
|  | ; parameter 1 in r8(deflate state s), param 2 in rdx (cur match) | ||||||
|  |  | ||||||
|  | ; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and | ||||||
|  | ; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp | ||||||
|  | ; | ||||||
|  | ; All registers must be preserved across the call, except for | ||||||
|  | ;   rax, rcx, rdx, r8, r9, r10, and r11, which are scratch. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; Save registers that the compiler may be using, and adjust esp to | ||||||
|  | ;;; make room for our stack frame. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; Retrieve the function arguments. r8d will hold cur_match | ||||||
|  | ;;; throughout the entire function. edx will hold the pointer to the | ||||||
|  | ;;; deflate_state structure during the function's setup (before | ||||||
|  | ;;; entering the main loop. | ||||||
|  |  | ||||||
|  | ; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match) | ||||||
|  |  | ||||||
|  | ; this clear high 32 bits of r8, which can be garbage in both r8 and rdx | ||||||
|  |  | ||||||
|  |         mov [save_rdi],rdi | ||||||
|  |         mov [save_rsi],rsi | ||||||
|  |         mov [save_rbx],rbx | ||||||
|  |         mov [save_rbp],rbp | ||||||
|  | IFDEF INFOZIP | ||||||
|  |         mov r8d,ecx | ||||||
|  | ELSE | ||||||
|  |         mov r8d,edx | ||||||
|  | ENDIF | ||||||
|  |         mov [save_r12],r12 | ||||||
|  |         mov [save_r13],r13 | ||||||
|  | ;        mov [save_r14],r14 | ||||||
|  | ;        mov [save_r15],r15 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; uInt wmask = s->w_mask; | ||||||
|  | ;;; unsigned chain_length = s->max_chain_length; | ||||||
|  | ;;; if (s->prev_length >= s->good_match) { | ||||||
|  | ;;;     chain_length >>= 2; | ||||||
|  | ;;; } | ||||||
|  |  | ||||||
|  |         mov edi, prev_length | ||||||
|  |         mov esi, good_match | ||||||
|  |         mov eax, WMask | ||||||
|  |         mov ebx, max_chain_length | ||||||
|  |         cmp edi, esi | ||||||
|  |         jl  LastMatchGood | ||||||
|  |         shr ebx, 2 | ||||||
|  | LastMatchGood: | ||||||
|  |  | ||||||
|  | ;;; chainlen is decremented once beforehand so that the function can | ||||||
|  | ;;; use the sign flag instead of the zero flag for the exit test. | ||||||
|  | ;;; It is then shifted into the high word, to make room for the wmask | ||||||
|  | ;;; value, which it will always accompany. | ||||||
|  |  | ||||||
|  |         dec ebx | ||||||
|  |         shl ebx, 16 | ||||||
|  |         or  ebx, eax | ||||||
|  |  | ||||||
|  | ;;; on zlib only | ||||||
|  | ;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; | ||||||
|  |  | ||||||
|  | IFDEF INFOZIP | ||||||
|  |         mov [chainlenwmask], ebx | ||||||
|  | ; on infozip nice_match = [nice_match] | ||||||
|  | ELSE | ||||||
|  |         mov eax, nice_match | ||||||
|  |         mov [chainlenwmask], ebx | ||||||
|  |         mov r10d, Lookahead | ||||||
|  |         cmp r10d, eax | ||||||
|  |         cmovnl r10d, eax | ||||||
|  |         mov [nicematch],r10d | ||||||
|  | ENDIF | ||||||
|  |  | ||||||
|  | ;;; register Bytef *scan = s->window + s->strstart; | ||||||
|  |         mov r10, window_ad | ||||||
|  |         mov ebp, strstart | ||||||
|  |         lea r13, [r10 + rbp] | ||||||
|  |  | ||||||
|  | ;;; Determine how many bytes the scan ptr is off from being | ||||||
|  | ;;; dword-aligned. | ||||||
|  |  | ||||||
|  |          mov r9,r13 | ||||||
|  |          neg r13 | ||||||
|  |          and r13,3 | ||||||
|  |  | ||||||
|  | ;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? | ||||||
|  | ;;;     s->strstart - (IPos)MAX_DIST(s) : NIL; | ||||||
|  | IFDEF INFOZIP | ||||||
|  |         mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1)) | ||||||
|  | ELSE | ||||||
|  |         mov eax, window_size | ||||||
|  |         sub eax, MIN_LOOKAHEAD | ||||||
|  | ENDIF | ||||||
|  |         xor edi,edi | ||||||
|  |         sub ebp, eax | ||||||
|  |  | ||||||
|  |         mov r11d, prev_length | ||||||
|  |  | ||||||
|  |         cmovng ebp,edi | ||||||
|  |  | ||||||
|  | ;;; int best_len = s->prev_length; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; Store the sum of s->window + best_len in esi locally, and in esi. | ||||||
|  |  | ||||||
|  |        lea  rsi,[r10+r11] | ||||||
|  |  | ||||||
|  | ;;; register ush scan_start = *(ushf*)scan; | ||||||
|  | ;;; register ush scan_end   = *(ushf*)(scan+best_len-1); | ||||||
|  | ;;; Posf *prev = s->prev; | ||||||
|  |  | ||||||
|  |         movzx r12d,word ptr [r9] | ||||||
|  |         movzx ebx, word ptr [r9 + r11 - 1] | ||||||
|  |  | ||||||
|  |         mov rdi, prev_ad | ||||||
|  |  | ||||||
|  | ;;; Jump into the main loop. | ||||||
|  |  | ||||||
|  |         mov edx, [chainlenwmask] | ||||||
|  |  | ||||||
|  |         cmp bx,word ptr [rsi + r8 - 1] | ||||||
|  |         jz  LookupLoopIsZero | ||||||
|  |  | ||||||
|  | LookupLoop1: | ||||||
|  |         and r8d, edx | ||||||
|  |  | ||||||
|  |         movzx   r8d, word ptr [rdi + r8*2] | ||||||
|  |         cmp r8d, ebp | ||||||
|  |         jbe LeaveNow | ||||||
|  |         sub edx, 00010000h | ||||||
|  |         js  LeaveNow | ||||||
|  |  | ||||||
|  | LoopEntry1: | ||||||
|  |         cmp bx,word ptr [rsi + r8 - 1] | ||||||
|  |         jz  LookupLoopIsZero | ||||||
|  |  | ||||||
|  | LookupLoop2: | ||||||
|  |         and r8d, edx | ||||||
|  |  | ||||||
|  |         movzx   r8d, word ptr [rdi + r8*2] | ||||||
|  |         cmp r8d, ebp | ||||||
|  |         jbe LeaveNow | ||||||
|  |         sub edx, 00010000h | ||||||
|  |         js  LeaveNow | ||||||
|  |  | ||||||
|  | LoopEntry2: | ||||||
|  |         cmp bx,word ptr [rsi + r8 - 1] | ||||||
|  |         jz  LookupLoopIsZero | ||||||
|  |  | ||||||
|  | LookupLoop4: | ||||||
|  |         and r8d, edx | ||||||
|  |  | ||||||
|  |         movzx   r8d, word ptr [rdi + r8*2] | ||||||
|  |         cmp r8d, ebp | ||||||
|  |         jbe LeaveNow | ||||||
|  |         sub edx, 00010000h | ||||||
|  |         js  LeaveNow | ||||||
|  |  | ||||||
|  | LoopEntry4: | ||||||
|  |  | ||||||
|  |         cmp bx,word ptr [rsi + r8 - 1] | ||||||
|  |         jnz LookupLoop1 | ||||||
|  |         jmp LookupLoopIsZero | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; do { | ||||||
|  | ;;;     match = s->window + cur_match; | ||||||
|  | ;;;     if (*(ushf*)(match+best_len-1) != scan_end || | ||||||
|  | ;;;         *(ushf*)match != scan_start) continue; | ||||||
|  | ;;;     [...] | ||||||
|  | ;;; } while ((cur_match = prev[cur_match & wmask]) > limit | ||||||
|  | ;;;          && --chain_length != 0); | ||||||
|  | ;;; | ||||||
|  | ;;; Here is the inner loop of the function. The function will spend the | ||||||
|  | ;;; majority of its time in this loop, and majority of that time will | ||||||
|  | ;;; be spent in the first ten instructions. | ||||||
|  | ;;; | ||||||
|  | ;;; Within this loop: | ||||||
|  | ;;; ebx = scanend | ||||||
|  | ;;; r8d = curmatch | ||||||
|  | ;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) | ||||||
|  | ;;; esi = windowbestlen - i.e., (window + bestlen) | ||||||
|  | ;;; edi = prev | ||||||
|  | ;;; ebp = limit | ||||||
|  |  | ||||||
|  | LookupLoop: | ||||||
|  |         and r8d, edx | ||||||
|  |  | ||||||
|  |         movzx   r8d, word ptr [rdi + r8*2] | ||||||
|  |         cmp r8d, ebp | ||||||
|  |         jbe LeaveNow | ||||||
|  |         sub edx, 00010000h | ||||||
|  |         js  LeaveNow | ||||||
|  |  | ||||||
|  | LoopEntry: | ||||||
|  |  | ||||||
|  |         cmp bx,word ptr [rsi + r8 - 1] | ||||||
|  |         jnz LookupLoop1 | ||||||
|  | LookupLoopIsZero: | ||||||
|  |         cmp     r12w, word ptr [r10 + r8] | ||||||
|  |         jnz LookupLoop1 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; Store the current value of chainlen. | ||||||
|  |         mov [chainlenwmask], edx | ||||||
|  |  | ||||||
|  | ;;; Point edi to the string under scrutiny, and esi to the string we | ||||||
|  | ;;; are hoping to match it up with. In actuality, esi and edi are | ||||||
|  | ;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is | ||||||
|  | ;;; initialized to -(MAX_MATCH_8 - scanalign). | ||||||
|  |  | ||||||
|  |         lea rsi,[r8+r10] | ||||||
|  |         mov rdx, 0fffffffffffffef8h; -(MAX_MATCH_8) | ||||||
|  |         lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8] | ||||||
|  |         lea rdi, [r9 + r13 + 0108h] ;MAX_MATCH_8] | ||||||
|  |  | ||||||
|  |         prefetcht1 [rsi+rdx] | ||||||
|  |         prefetcht1 [rdi+rdx] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ;;; Test the strings for equality, 8 bytes at a time. At the end, | ||||||
|  | ;;; adjust rdx so that it is offset to the exact byte that mismatched. | ||||||
|  | ;;; | ||||||
|  | ;;; We already know at this point that the first three bytes of the | ||||||
|  | ;;; strings match each other, and they can be safely passed over before | ||||||
|  | ;;; starting the compare loop. So what this code does is skip over 0-3 | ||||||
|  | ;;; bytes, as much as necessary in order to dword-align the edi | ||||||
|  | ;;; pointer. (rsi will still be misaligned three times out of four.) | ||||||
|  | ;;; | ||||||
|  | ;;; It should be confessed that this loop usually does not represent | ||||||
|  | ;;; much of the total running time. Replacing it with a more | ||||||
|  | ;;; straightforward "rep cmpsb" would not drastically degrade | ||||||
|  | ;;; performance. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | LoopCmps: | ||||||
|  |         mov rax, [rsi + rdx] | ||||||
|  |         xor rax, [rdi + rdx] | ||||||
|  |         jnz LeaveLoopCmps | ||||||
|  |  | ||||||
|  |         mov rax, [rsi + rdx + 8] | ||||||
|  |         xor rax, [rdi + rdx + 8] | ||||||
|  |         jnz LeaveLoopCmps8 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         mov rax, [rsi + rdx + 8+8] | ||||||
|  |         xor rax, [rdi + rdx + 8+8] | ||||||
|  |         jnz LeaveLoopCmps16 | ||||||
|  |  | ||||||
|  |         add rdx,8+8+8 | ||||||
|  |  | ||||||
|  |         jmp short LoopCmps | ||||||
|  | LeaveLoopCmps16: add rdx,8 | ||||||
|  | LeaveLoopCmps8: add rdx,8 | ||||||
|  | LeaveLoopCmps: | ||||||
|  |  | ||||||
|  |         test    eax, 0000FFFFh | ||||||
|  |         jnz LenLower | ||||||
|  |  | ||||||
|  |         test eax,0ffffffffh | ||||||
|  |  | ||||||
|  |         jnz LenLower32 | ||||||
|  |  | ||||||
|  |         add rdx,4 | ||||||
|  |         shr rax,32 | ||||||
|  |         or ax,ax | ||||||
|  |         jnz LenLower | ||||||
|  |  | ||||||
|  | LenLower32: | ||||||
|  |         shr eax,16 | ||||||
|  |         add rdx,2 | ||||||
|  | LenLower:   sub al, 1 | ||||||
|  |         adc rdx, 0 | ||||||
|  | ;;; Calculate the length of the match. If it is longer than MAX_MATCH, | ||||||
|  | ;;; then automatically accept it as the best possible match and leave. | ||||||
|  |  | ||||||
|  |         lea rax, [rdi + rdx] | ||||||
|  |         sub rax, r9 | ||||||
|  |         cmp eax, MAX_MATCH | ||||||
|  |         jge LenMaximum | ||||||
|  |  | ||||||
|  | ;;; If the length of the match is not longer than the best match we | ||||||
|  | ;;; have so far, then forget it and return to the lookup loop. | ||||||
|  | ;/////////////////////////////////// | ||||||
|  |  | ||||||
|  |         cmp eax, r11d | ||||||
|  |         jg  LongerMatch | ||||||
|  |  | ||||||
|  |         lea rsi,[r10+r11] | ||||||
|  |  | ||||||
|  |         mov rdi, prev_ad | ||||||
|  |         mov edx, [chainlenwmask] | ||||||
|  |         jmp LookupLoop | ||||||
|  |  | ||||||
|  | ;;;         s->match_start = cur_match; | ||||||
|  | ;;;         best_len = len; | ||||||
|  | ;;;         if (len >= nice_match) break; | ||||||
|  | ;;;         scan_end = *(ushf*)(scan+best_len-1); | ||||||
|  |  | ||||||
|  | LongerMatch: | ||||||
|  |         mov r11d, eax | ||||||
|  |         mov match_start, r8d | ||||||
|  |         cmp eax, [nicematch] | ||||||
|  |         jge LeaveNow | ||||||
|  |  | ||||||
|  |         lea rsi,[r10+rax] | ||||||
|  |  | ||||||
|  |         movzx   ebx, word ptr [r9 + rax - 1] | ||||||
|  |         mov rdi, prev_ad | ||||||
|  |         mov edx, [chainlenwmask] | ||||||
|  |         jmp LookupLoop | ||||||
|  |  | ||||||
|  | ;;; Accept the current string, with the maximum possible length. | ||||||
|  |  | ||||||
|  | LenMaximum: | ||||||
|  |         mov r11d,MAX_MATCH | ||||||
|  |         mov match_start, r8d | ||||||
|  |  | ||||||
|  | ;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; | ||||||
|  | ;;; return s->lookahead; | ||||||
|  |  | ||||||
|  | LeaveNow: | ||||||
|  | IFDEF INFOZIP | ||||||
|  |         mov eax,r11d | ||||||
|  | ELSE | ||||||
|  |         mov eax, Lookahead | ||||||
|  |         cmp r11d, eax | ||||||
|  |         cmovng eax, r11d | ||||||
|  | ENDIF | ||||||
|  |  | ||||||
|  | ;;; Restore the stack and return from whence we came. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         mov rsi,[save_rsi] | ||||||
|  |         mov rdi,[save_rdi] | ||||||
|  |         mov rbx,[save_rbx] | ||||||
|  |         mov rbp,[save_rbp] | ||||||
|  |         mov r12,[save_r12] | ||||||
|  |         mov r13,[save_r13] | ||||||
|  | ;        mov r14,[save_r14] | ||||||
|  | ;        mov r15,[save_r15] | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         ret 0 | ||||||
|  | ; please don't remove this string ! | ||||||
|  | ; Your can freely use gvmat64 in any free or commercial app | ||||||
|  | ; but it is far better don't remove the string in the binary! | ||||||
|  |     db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0 | ||||||
|  | longest_match   ENDP | ||||||
|  |  | ||||||
|  | match_init PROC | ||||||
|  |   ret 0 | ||||||
|  | match_init ENDP | ||||||
|  |  | ||||||
|  |  | ||||||
|  | END | ||||||
							
								
								
									
										
											BIN
										
									
								
								contrib/masmx64/gvmat64.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								contrib/masmx64/gvmat64.obj
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										186
									
								
								contrib/masmx64/inffas8664.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								contrib/masmx64/inffas8664.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,186 @@ | |||||||
|  | /* inffas8664.c is a hand tuned assembler version of inffast.c - fast decoding | ||||||
|  |  * version for AMD64 on Windows using Microsoft C compiler | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1995-2003 Mark Adler | ||||||
|  |  * For conditions of distribution and use, see copyright notice in zlib.h | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2003 Chris Anderson <christop@charm.net> | ||||||
|  |  * Please use the copyright conditions above. | ||||||
|  |  * | ||||||
|  |  * 2005 - Adaptation to Microsoft C Compiler for AMD64 by Gilles Vollant | ||||||
|  |  * | ||||||
|  |  * inffas8664.c call function inffas8664fnc in inffasx64.asm | ||||||
|  |  *  inffasx64.asm is automatically convert from AMD64 portion of inffas86.c | ||||||
|  |  * | ||||||
|  |  * Dec-29-2003 -- I added AMD64 inflate asm support.  This version is also | ||||||
|  |  * slightly quicker on x86 systems because, instead of using rep movsb to copy | ||||||
|  |  * data, it uses rep movsw, which moves data in 2-byte chunks instead of single | ||||||
|  |  * bytes.  I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates | ||||||
|  |  * from http://fedora.linux.duke.edu/fc1_x86_64 | ||||||
|  |  * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with | ||||||
|  |  * 1GB ram.  The 64-bit version is about 4% faster than the 32-bit version, | ||||||
|  |  * when decompressing mozilla-source-1.3.tar.gz. | ||||||
|  |  * | ||||||
|  |  * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from | ||||||
|  |  * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at | ||||||
|  |  * the moment.  I have successfully compiled and tested this code with gcc2.96, | ||||||
|  |  * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S | ||||||
|  |  * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX | ||||||
|  |  * enabled.  I will attempt to merge the MMX code into this version.  Newer | ||||||
|  |  * versions of this and inffast.S can be found at | ||||||
|  |  * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/ | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <stdio.h> | ||||||
|  | #include "zutil.h" | ||||||
|  | #include "inftrees.h" | ||||||
|  | #include "inflate.h" | ||||||
|  | #include "inffast.h" | ||||||
|  |  | ||||||
|  | /* Mark Adler's comments from inffast.c: */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |    Decode literal, length, and distance codes and write out the resulting | ||||||
|  |    literal and match bytes until either not enough input or output is | ||||||
|  |    available, an end-of-block is encountered, or a data error is encountered. | ||||||
|  |    When large enough input and output buffers are supplied to inflate(), for | ||||||
|  |    example, a 16K input buffer and a 64K output buffer, more than 95% of the | ||||||
|  |    inflate execution time is spent in this routine. | ||||||
|  |  | ||||||
|  |    Entry assumptions: | ||||||
|  |  | ||||||
|  |         state->mode == LEN | ||||||
|  |         strm->avail_in >= 6 | ||||||
|  |         strm->avail_out >= 258 | ||||||
|  |         start >= strm->avail_out | ||||||
|  |         state->bits < 8 | ||||||
|  |  | ||||||
|  |    On return, state->mode is one of: | ||||||
|  |  | ||||||
|  |         LEN -- ran out of enough output space or enough available input | ||||||
|  |         TYPE -- reached end of block code, inflate() to interpret next block | ||||||
|  |         BAD -- error in block data | ||||||
|  |  | ||||||
|  |    Notes: | ||||||
|  |  | ||||||
|  |     - The maximum input bits used by a length/distance pair is 15 bits for the | ||||||
|  |       length code, 5 bits for the length extra, 15 bits for the distance code, | ||||||
|  |       and 13 bits for the distance extra.  This totals 48 bits, or six bytes. | ||||||
|  |       Therefore if strm->avail_in >= 6, then there is enough input to avoid | ||||||
|  |       checking for available input while decoding. | ||||||
|  |  | ||||||
|  |     - The maximum bytes that a single length/distance pair can output is 258 | ||||||
|  |       bytes, which is the maximum length that can be coded.  inflate_fast() | ||||||
|  |       requires strm->avail_out >= 258 for each loop to avoid checking for | ||||||
|  |       output space. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     typedef struct inffast_ar { | ||||||
|  | /* 64   32                               x86  x86_64 */ | ||||||
|  | /* ar offset                              register */ | ||||||
|  | /*  0    0 */ void *esp;                /* esp save */ | ||||||
|  | /*  8    4 */ void *ebp;                /* ebp save */ | ||||||
|  | /* 16    8 */ unsigned char FAR *in;    /* esi rsi  local strm->next_in */ | ||||||
|  | /* 24   12 */ unsigned char FAR *last;  /*     r9   while in < last */ | ||||||
|  | /* 32   16 */ unsigned char FAR *out;   /* edi rdi  local strm->next_out */ | ||||||
|  | /* 40   20 */ unsigned char FAR *beg;   /*          inflate()'s init next_out */ | ||||||
|  | /* 48   24 */ unsigned char FAR *end;   /*     r10  while out < end */ | ||||||
|  | /* 56   28 */ unsigned char FAR *window;/*          size of window, wsize!=0 */ | ||||||
|  | /* 64   32 */ code const FAR *lcode;    /* ebp rbp  local strm->lencode */ | ||||||
|  | /* 72   36 */ code const FAR *dcode;    /*     r11  local strm->distcode */ | ||||||
|  | /* 80   40 */ size_t /*unsigned long */hold;       /* edx rdx  local strm->hold */ | ||||||
|  | /* 88   44 */ unsigned bits;            /* ebx rbx  local strm->bits */ | ||||||
|  | /* 92   48 */ unsigned wsize;           /*          window size */ | ||||||
|  | /* 96   52 */ unsigned write;           /*          window write index */ | ||||||
|  | /*100   56 */ unsigned lmask;           /*     r12  mask for lcode */ | ||||||
|  | /*104   60 */ unsigned dmask;           /*     r13  mask for dcode */ | ||||||
|  | /*108   64 */ unsigned len;             /*     r14  match length */ | ||||||
|  | /*112   68 */ unsigned dist;            /*     r15  match distance */ | ||||||
|  | /*116   72 */ unsigned status;          /*          set when state chng*/ | ||||||
|  |     } type_ar; | ||||||
|  | #ifdef ASMINF | ||||||
|  |  | ||||||
|  | void inflate_fast(strm, start) | ||||||
|  | z_streamp strm; | ||||||
|  | unsigned start;         /* inflate()'s starting value for strm->avail_out */ | ||||||
|  | { | ||||||
|  |     struct inflate_state FAR *state; | ||||||
|  |     type_ar ar; | ||||||
|  |     void inffas8664fnc(struct inffast_ar * par); | ||||||
|  |  | ||||||
|  |      | ||||||
|  |  | ||||||
|  | #if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64)) | ||||||
|  | #define PAD_AVAIL_IN 6 | ||||||
|  | #define PAD_AVAIL_OUT 258     | ||||||
|  | #else | ||||||
|  | #define PAD_AVAIL_IN 5 | ||||||
|  | #define PAD_AVAIL_OUT 257 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     /* copy state to local variables */ | ||||||
|  |     state = (struct inflate_state FAR *)strm->state; | ||||||
|  |  | ||||||
|  |     ar.in = strm->next_in; | ||||||
|  |     ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN); | ||||||
|  |     ar.out = strm->next_out; | ||||||
|  |     ar.beg = ar.out - (start - strm->avail_out); | ||||||
|  |     ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT); | ||||||
|  |     ar.wsize = state->wsize; | ||||||
|  |     ar.write = state->write; | ||||||
|  |     ar.window = state->window; | ||||||
|  |     ar.hold = state->hold; | ||||||
|  |     ar.bits = state->bits; | ||||||
|  |     ar.lcode = state->lencode; | ||||||
|  |     ar.dcode = state->distcode; | ||||||
|  |     ar.lmask = (1U << state->lenbits) - 1; | ||||||
|  |     ar.dmask = (1U << state->distbits) - 1; | ||||||
|  |  | ||||||
|  |     /* decode literals and length/distances until end-of-block or not enough | ||||||
|  |        input data or output space */ | ||||||
|  |  | ||||||
|  |     /* align in on 1/2 hold size boundary */ | ||||||
|  |     while (((size_t)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) { | ||||||
|  |         ar.hold += (unsigned long)*ar.in++ << ar.bits; | ||||||
|  |         ar.bits += 8; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     inffas8664fnc(&ar); | ||||||
|  |  | ||||||
|  |     if (ar.status > 1) { | ||||||
|  |         if (ar.status == 2) | ||||||
|  |             strm->msg = "invalid literal/length code"; | ||||||
|  |         else if (ar.status == 3) | ||||||
|  |             strm->msg = "invalid distance code"; | ||||||
|  |         else | ||||||
|  |             strm->msg = "invalid distance too far back"; | ||||||
|  |         state->mode = BAD; | ||||||
|  |     } | ||||||
|  |     else if ( ar.status == 1 ) { | ||||||
|  |         state->mode = TYPE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ | ||||||
|  |     ar.len = ar.bits >> 3; | ||||||
|  |     ar.in -= ar.len; | ||||||
|  |     ar.bits -= ar.len << 3; | ||||||
|  |     ar.hold &= (1U << ar.bits) - 1; | ||||||
|  |  | ||||||
|  |     /* update state and return */ | ||||||
|  |     strm->next_in = ar.in; | ||||||
|  |     strm->next_out = ar.out; | ||||||
|  |     strm->avail_in = (unsigned)(ar.in < ar.last ? | ||||||
|  |                                 PAD_AVAIL_IN + (ar.last - ar.in) : | ||||||
|  |                                 PAD_AVAIL_IN - (ar.in - ar.last)); | ||||||
|  |     strm->avail_out = (unsigned)(ar.out < ar.end ? | ||||||
|  |                                  PAD_AVAIL_OUT + (ar.end - ar.out) : | ||||||
|  |                                  PAD_AVAIL_OUT - (ar.out - ar.end)); | ||||||
|  |     state->hold = (unsigned long)ar.hold; | ||||||
|  |     state->bits = ar.bits; | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif | ||||||
							
								
								
									
										392
									
								
								contrib/masmx64/inffasx64.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										392
									
								
								contrib/masmx64/inffasx64.asm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,392 @@ | |||||||
|  | ; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding | ||||||
|  | ; version for AMD64 on Windows using Microsoft C compiler | ||||||
|  | ; | ||||||
|  | ; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c | ||||||
|  | ; inffasx64.asm is called by inffas8664.c, which contain more info. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ; to compile this file, I use option | ||||||
|  | ;   ml64.exe /Flinffasx64 /c /Zi inffasx64.asm | ||||||
|  | ;   with Microsoft Macro Assembler (x64) for AMD64 | ||||||
|  | ; | ||||||
|  | ;   ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK | ||||||
|  | ; | ||||||
|  | ;   (you can get Windows 2003 server DDK with ml64 and cl.exe for AMD64 from  | ||||||
|  | ;      http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price) | ||||||
|  | ; | ||||||
|  |  | ||||||
|  | .code | ||||||
|  | inffas8664fnc PROC | ||||||
|  |  | ||||||
|  | ; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and | ||||||
|  | ; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp | ||||||
|  | ; | ||||||
|  | ; All registers must be preserved across the call, except for | ||||||
|  | ;   rax, rcx, rdx, r8, r-9, r10, and r11, which are scratch. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	mov [rsp-8],rsi | ||||||
|  | 	mov [rsp-16],rdi | ||||||
|  | 	mov [rsp-24],r12 | ||||||
|  | 	mov [rsp-32],r13 | ||||||
|  | 	mov [rsp-40],r14 | ||||||
|  | 	mov [rsp-48],r15 | ||||||
|  | 	mov [rsp-56],rbx | ||||||
|  |  | ||||||
|  | 	mov rax,rcx | ||||||
|  |  | ||||||
|  | 	mov	[rax+8], rbp       ; /* save regs rbp and rsp */ | ||||||
|  | 	mov	[rax], rsp | ||||||
|  |  | ||||||
|  | 	mov	rsp, rax          ; /* make rsp point to &ar */ | ||||||
|  |  | ||||||
|  | 	mov	rsi, [rsp+16]      ; /* rsi  = in */ | ||||||
|  | 	mov	rdi, [rsp+32]      ; /* rdi  = out */ | ||||||
|  | 	mov	r9, [rsp+24]       ; /* r9   = last */ | ||||||
|  | 	mov	r10, [rsp+48]      ; /* r10  = end */ | ||||||
|  | 	mov	rbp, [rsp+64]      ; /* rbp  = lcode */ | ||||||
|  | 	mov	r11, [rsp+72]      ; /* r11  = dcode */ | ||||||
|  | 	mov	rdx, [rsp+80]      ; /* rdx  = hold */ | ||||||
|  | 	mov	ebx, [rsp+88]      ; /* ebx  = bits */ | ||||||
|  | 	mov	r12d, [rsp+100]    ; /* r12d = lmask */ | ||||||
|  | 	mov	r13d, [rsp+104]    ; /* r13d = dmask */ | ||||||
|  |                                           ; /* r14d = len */ | ||||||
|  |                                           ; /* r15d = dist */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	cld | ||||||
|  | 	cmp	r10, rdi | ||||||
|  | 	je	L_one_time           ; /* if only one decode left */ | ||||||
|  | 	cmp	r9, rsi | ||||||
|  |  | ||||||
|  |     jne L_do_loop | ||||||
|  |  | ||||||
|  |  | ||||||
|  | L_one_time: | ||||||
|  | 	mov	r8, r12           ; /* r8 = lmask */ | ||||||
|  | 	cmp	bl, 32 | ||||||
|  | 	ja	L_get_length_code_one_time | ||||||
|  |  | ||||||
|  | 	lodsd                         ; /* eax = *(uint *)in++ */ | ||||||
|  | 	mov	cl, bl            ; /* cl = bits, needs it for shifting */ | ||||||
|  | 	add	bl, 32             ; /* bits += 32 */ | ||||||
|  | 	shl	rax, cl | ||||||
|  | 	or	rdx, rax          ; /* hold |= *((uint *)in)++ << bits */ | ||||||
|  | 	jmp	L_get_length_code_one_time | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_while_test: | ||||||
|  | 	cmp	r10, rdi | ||||||
|  | 	jbe	L_break_loop | ||||||
|  | 	cmp	r9, rsi | ||||||
|  | 	jbe	L_break_loop | ||||||
|  |  | ||||||
|  | L_do_loop: | ||||||
|  | 	mov	r8, r12           ; /* r8 = lmask */ | ||||||
|  | 	cmp	bl, 32 | ||||||
|  | 	ja	L_get_length_code    ; /* if (32 < bits) */ | ||||||
|  |  | ||||||
|  | 	lodsd                         ; /* eax = *(uint *)in++ */ | ||||||
|  | 	mov	cl, bl            ; /* cl = bits, needs it for shifting */ | ||||||
|  | 	add	bl, 32             ; /* bits += 32 */ | ||||||
|  | 	shl	rax, cl | ||||||
|  | 	or	rdx, rax          ; /* hold |= *((uint *)in)++ << bits */ | ||||||
|  |  | ||||||
|  | L_get_length_code: | ||||||
|  | 	and	r8, rdx            ; /* r8 &= hold */ | ||||||
|  | 	mov	eax, [rbp+r8*4]  ; /* eax = lcode[hold & lmask] */ | ||||||
|  |  | ||||||
|  | 	mov	cl, ah            ; /* cl = this.bits */ | ||||||
|  | 	sub	bl, ah            ; /* bits -= this.bits */ | ||||||
|  | 	shr	rdx, cl           ; /* hold >>= this.bits */ | ||||||
|  |  | ||||||
|  | 	test	al, al | ||||||
|  | 	jnz	L_test_for_length_base ; /* if (op != 0) 45.7% */ | ||||||
|  |  | ||||||
|  | 	mov	r8, r12            ; /* r8 = lmask */ | ||||||
|  | 	shr	eax, 16            ; /* output this.val char */ | ||||||
|  | 	stosb | ||||||
|  |  | ||||||
|  | L_get_length_code_one_time: | ||||||
|  | 	and	r8, rdx            ; /* r8 &= hold */ | ||||||
|  | 	mov	eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */ | ||||||
|  |  | ||||||
|  | L_dolen: | ||||||
|  | 	mov	cl, ah            ; /* cl = this.bits */ | ||||||
|  | 	sub	bl, ah            ; /* bits -= this.bits */ | ||||||
|  | 	shr	rdx, cl           ; /* hold >>= this.bits */ | ||||||
|  |  | ||||||
|  | 	test	al, al | ||||||
|  | 	jnz	L_test_for_length_base ; /* if (op != 0) 45.7% */ | ||||||
|  |  | ||||||
|  | 	shr	eax, 16            ; /* output this.val char */ | ||||||
|  | 	stosb | ||||||
|  | 	jmp	L_while_test | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_test_for_length_base: | ||||||
|  | 	mov	r14d, eax         ; /* len = this */ | ||||||
|  | 	shr	r14d, 16           ; /* len = this.val */ | ||||||
|  | 	mov	cl, al | ||||||
|  |  | ||||||
|  | 	test	al, 16 | ||||||
|  | 	jz	L_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */ | ||||||
|  | 	and	cl, 15             ; /* op &= 15 */ | ||||||
|  | 	jz	L_decode_distance    ; /* if (!op) */ | ||||||
|  |  | ||||||
|  | L_add_bits_to_len: | ||||||
|  | 	sub	bl, cl | ||||||
|  | 	xor	eax, eax | ||||||
|  | 	inc	eax | ||||||
|  | 	shl	eax, cl | ||||||
|  | 	dec	eax | ||||||
|  | 	and	eax, edx          ; /* eax &= hold */ | ||||||
|  | 	shr	rdx, cl | ||||||
|  | 	add	r14d, eax         ; /* len += hold & mask[op] */ | ||||||
|  |  | ||||||
|  | L_decode_distance: | ||||||
|  | 	mov	r8, r13           ; /* r8 = dmask */ | ||||||
|  | 	cmp	bl, 32 | ||||||
|  | 	ja	L_get_distance_code  ; /* if (32 < bits) */ | ||||||
|  |  | ||||||
|  | 	lodsd                         ; /* eax = *(uint *)in++ */ | ||||||
|  | 	mov	cl, bl            ; /* cl = bits, needs it for shifting */ | ||||||
|  | 	add	bl, 32             ; /* bits += 32 */ | ||||||
|  | 	shl	rax, cl | ||||||
|  | 	or	rdx, rax          ; /* hold |= *((uint *)in)++ << bits */ | ||||||
|  |  | ||||||
|  | L_get_distance_code: | ||||||
|  | 	and	r8, rdx           ; /* r8 &= hold */ | ||||||
|  | 	mov	eax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */ | ||||||
|  |  | ||||||
|  | L_dodist: | ||||||
|  | 	mov	r15d, eax         ; /* dist = this */ | ||||||
|  | 	shr	r15d, 16           ; /* dist = this.val */ | ||||||
|  | 	mov	cl, ah | ||||||
|  | 	sub	bl, ah            ; /* bits -= this.bits */ | ||||||
|  | 	shr	rdx, cl           ; /* hold >>= this.bits */ | ||||||
|  | 	mov	cl, al            ; /* cl = this.op */ | ||||||
|  |  | ||||||
|  | 	test	al, 16             ; /* if ((op & 16) == 0) */ | ||||||
|  | 	jz	L_test_for_second_level_dist | ||||||
|  | 	and	cl, 15             ; /* op &= 15 */ | ||||||
|  | 	jz	L_check_dist_one | ||||||
|  |  | ||||||
|  | L_add_bits_to_dist: | ||||||
|  | 	sub	bl, cl | ||||||
|  | 	xor	eax, eax | ||||||
|  | 	inc	eax | ||||||
|  | 	shl	eax, cl | ||||||
|  | 	dec	eax                 ; /* (1 << op) - 1 */ | ||||||
|  | 	and	eax, edx          ; /* eax &= hold */ | ||||||
|  | 	shr	rdx, cl | ||||||
|  | 	add	r15d, eax         ; /* dist += hold & ((1 << op) - 1) */ | ||||||
|  |  | ||||||
|  | L_check_window: | ||||||
|  | 	mov	r8, rsi           ; /* save in so from can use it's reg */ | ||||||
|  | 	mov	rax, rdi | ||||||
|  | 	sub	rax, [rsp+40]      ; /* nbytes = out - beg */ | ||||||
|  |  | ||||||
|  | 	cmp	eax, r15d | ||||||
|  | 	jb	L_clip_window        ; /* if (dist > nbytes) 4.2% */ | ||||||
|  |  | ||||||
|  | 	mov	ecx, r14d         ; /* ecx = len */ | ||||||
|  | 	mov	rsi, rdi | ||||||
|  | 	sub	rsi, r15          ; /* from = out - dist */ | ||||||
|  |  | ||||||
|  | 	sar	ecx, 1 | ||||||
|  | 	jnc	L_copy_two           ; /* if len % 2 == 0 */ | ||||||
|  |  | ||||||
|  | 	rep     movsw | ||||||
|  | 	mov	al, [rsi] | ||||||
|  | 	mov	[rdi], al | ||||||
|  | 	inc	rdi | ||||||
|  |  | ||||||
|  | 	mov	rsi, r8           ; /* move in back to %rsi, toss from */ | ||||||
|  | 	jmp	L_while_test | ||||||
|  |  | ||||||
|  | L_copy_two: | ||||||
|  | 	rep     movsw | ||||||
|  | 	mov	rsi, r8           ; /* move in back to %rsi, toss from */ | ||||||
|  | 	jmp	L_while_test | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_check_dist_one: | ||||||
|  | 	cmp	r15d, 1            ; /* if dist 1, is a memset */ | ||||||
|  | 	jne	L_check_window | ||||||
|  | 	cmp	[rsp+40], rdi      ; /* if out == beg, outside window */ | ||||||
|  | 	je	L_check_window | ||||||
|  |  | ||||||
|  | 	mov	ecx, r14d         ; /* ecx = len */ | ||||||
|  | 	mov	al, [rdi-1] | ||||||
|  | 	mov	ah, al | ||||||
|  |  | ||||||
|  | 	sar	ecx, 1 | ||||||
|  | 	jnc	L_set_two | ||||||
|  | 	mov	[rdi], al | ||||||
|  | 	inc	rdi | ||||||
|  |  | ||||||
|  | L_set_two: | ||||||
|  | 	rep     stosw | ||||||
|  | 	jmp	L_while_test | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_test_for_second_level_length: | ||||||
|  | 	test	al, 64 | ||||||
|  | 	jnz	L_test_for_end_of_block ; /* if ((op & 64) != 0) */ | ||||||
|  |  | ||||||
|  | 	xor	eax, eax | ||||||
|  | 	inc	eax | ||||||
|  | 	shl	eax, cl | ||||||
|  | 	dec	eax | ||||||
|  | 	and	eax, edx         ; /* eax &= hold */ | ||||||
|  | 	add	eax, r14d        ; /* eax += len */ | ||||||
|  | 	mov	eax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/ | ||||||
|  | 	jmp	L_dolen | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_test_for_second_level_dist: | ||||||
|  | 	test	al, 64 | ||||||
|  | 	jnz	L_invalid_distance_code ; /* if ((op & 64) != 0) */ | ||||||
|  |  | ||||||
|  | 	xor	eax, eax | ||||||
|  | 	inc	eax | ||||||
|  | 	shl	eax, cl | ||||||
|  | 	dec	eax | ||||||
|  | 	and	eax, edx         ; /* eax &= hold */ | ||||||
|  | 	add	eax, r15d        ; /* eax += dist */ | ||||||
|  | 	mov	eax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/ | ||||||
|  | 	jmp	L_dodist | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_clip_window: | ||||||
|  | 	mov	ecx, eax         ; /* ecx = nbytes */ | ||||||
|  | 	mov	eax, [rsp+92]     ; /* eax = wsize, prepare for dist cmp */ | ||||||
|  | 	neg	ecx                ; /* nbytes = -nbytes */ | ||||||
|  |  | ||||||
|  | 	cmp	eax, r15d | ||||||
|  | 	jb	L_invalid_distance_too_far ; /* if (dist > wsize) */ | ||||||
|  |  | ||||||
|  | 	add	ecx, r15d         ; /* nbytes = dist - nbytes */ | ||||||
|  | 	cmp	dword ptr [rsp+96], 0 | ||||||
|  | 	jne	L_wrap_around_window ; /* if (write != 0) */ | ||||||
|  |  | ||||||
|  | 	mov	rsi, [rsp+56]     ; /* from  = window */ | ||||||
|  | 	sub	eax, ecx         ; /* eax  -= nbytes */ | ||||||
|  | 	add	rsi, rax         ; /* from += wsize - nbytes */ | ||||||
|  |  | ||||||
|  | 	mov	eax, r14d        ; /* eax = len */ | ||||||
|  | 	cmp	r14d, ecx | ||||||
|  | 	jbe	L_do_copy           ; /* if (nbytes >= len) */ | ||||||
|  |  | ||||||
|  | 	sub	eax, ecx         ; /* eax -= nbytes */ | ||||||
|  | 	rep     movsb | ||||||
|  | 	mov	rsi, rdi | ||||||
|  | 	sub	rsi, r15         ; /* from = &out[ -dist ] */ | ||||||
|  | 	jmp	L_do_copy | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_wrap_around_window: | ||||||
|  | 	mov	eax, [rsp+96]     ; /* eax = write */ | ||||||
|  | 	cmp	ecx, eax | ||||||
|  | 	jbe	L_contiguous_in_window ; /* if (write >= nbytes) */ | ||||||
|  |  | ||||||
|  | 	mov	esi, [rsp+92]     ; /* from  = wsize */ | ||||||
|  | 	add	rsi, [rsp+56]     ; /* from += window */ | ||||||
|  | 	add	rsi, rax         ; /* from += write */ | ||||||
|  | 	sub	rsi, rcx         ; /* from -= nbytes */ | ||||||
|  | 	sub	ecx, eax         ; /* nbytes -= write */ | ||||||
|  |  | ||||||
|  | 	mov	eax, r14d        ; /* eax = len */ | ||||||
|  | 	cmp	eax, ecx | ||||||
|  | 	jbe	L_do_copy           ; /* if (nbytes >= len) */ | ||||||
|  |  | ||||||
|  | 	sub	eax, ecx         ; /* len -= nbytes */ | ||||||
|  | 	rep     movsb | ||||||
|  | 	mov	rsi, [rsp+56]     ; /* from = window */ | ||||||
|  | 	mov	ecx, [rsp+96]     ; /* nbytes = write */ | ||||||
|  | 	cmp	eax, ecx | ||||||
|  | 	jbe	L_do_copy           ; /* if (nbytes >= len) */ | ||||||
|  |  | ||||||
|  | 	sub	eax, ecx         ; /* len -= nbytes */ | ||||||
|  | 	rep     movsb | ||||||
|  | 	mov	rsi, rdi | ||||||
|  | 	sub	rsi, r15         ; /* from = out - dist */ | ||||||
|  | 	jmp	L_do_copy | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_contiguous_in_window: | ||||||
|  | 	mov	rsi, [rsp+56]     ; /* rsi = window */ | ||||||
|  | 	add	rsi, rax | ||||||
|  | 	sub	rsi, rcx         ; /* from += write - nbytes */ | ||||||
|  |  | ||||||
|  | 	mov	eax, r14d        ; /* eax = len */ | ||||||
|  | 	cmp	eax, ecx | ||||||
|  | 	jbe	L_do_copy           ; /* if (nbytes >= len) */ | ||||||
|  |  | ||||||
|  | 	sub	eax, ecx         ; /* len -= nbytes */ | ||||||
|  | 	rep     movsb | ||||||
|  | 	mov	rsi, rdi | ||||||
|  | 	sub	rsi, r15         ; /* from = out - dist */ | ||||||
|  | 	jmp	L_do_copy           ; /* if (nbytes >= len) */ | ||||||
|  |  | ||||||
|  | ALIGN 4 | ||||||
|  | L_do_copy: | ||||||
|  | 	mov	ecx, eax         ; /* ecx = len */ | ||||||
|  | 	rep     movsb | ||||||
|  |  | ||||||
|  | 	mov	rsi, r8          ; /* move in back to %esi, toss from */ | ||||||
|  | 	jmp	L_while_test | ||||||
|  |  | ||||||
|  | L_test_for_end_of_block: | ||||||
|  | 	test	al, 32 | ||||||
|  | 	jz	L_invalid_literal_length_code | ||||||
|  | 	mov	dword ptr [rsp+116], 1 | ||||||
|  | 	jmp	L_break_loop_with_status | ||||||
|  |  | ||||||
|  | L_invalid_literal_length_code: | ||||||
|  | 	mov	dword ptr [rsp+116], 2 | ||||||
|  | 	jmp	L_break_loop_with_status | ||||||
|  |  | ||||||
|  | L_invalid_distance_code: | ||||||
|  | 	mov	dword ptr [rsp+116], 3 | ||||||
|  | 	jmp	L_break_loop_with_status | ||||||
|  |  | ||||||
|  | L_invalid_distance_too_far: | ||||||
|  | 	mov	dword ptr [rsp+116], 4 | ||||||
|  | 	jmp	L_break_loop_with_status | ||||||
|  |  | ||||||
|  | L_break_loop: | ||||||
|  | 	mov	dword ptr [rsp+116], 0 | ||||||
|  |  | ||||||
|  | L_break_loop_with_status: | ||||||
|  | ; /* put in, out, bits, and hold back into ar and pop esp */ | ||||||
|  | 	mov	[rsp+16], rsi     ; /* in */ | ||||||
|  | 	mov	[rsp+32], rdi     ; /* out */ | ||||||
|  | 	mov	[rsp+88], ebx     ; /* bits */ | ||||||
|  | 	mov	[rsp+80], rdx     ; /* hold */ | ||||||
|  |  | ||||||
|  | 	mov	rax, [rsp]       ; /* restore rbp and rsp */ | ||||||
|  | 	mov	rbp, [rsp+8] | ||||||
|  | 	mov	rsp, rax | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	mov rsi,[rsp-8] | ||||||
|  | 	mov rdi,[rsp-16] | ||||||
|  | 	mov r12,[rsp-24] | ||||||
|  | 	mov r13,[rsp-32] | ||||||
|  | 	mov r14,[rsp-40] | ||||||
|  | 	mov r15,[rsp-48] | ||||||
|  | 	mov rbx,[rsp-56] | ||||||
|  | 	 | ||||||
|  |     ret 0 | ||||||
|  | ;          : | ||||||
|  | ;          : "m" (ar) | ||||||
|  | ;          : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi", | ||||||
|  | ;            "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15" | ||||||
|  | ;    ); | ||||||
|  |  | ||||||
|  | inffas8664fnc 	ENDP | ||||||
|  | ;_TEXT	ENDS | ||||||
|  | END | ||||||
							
								
								
									
										
											BIN
										
									
								
								contrib/masmx64/inffasx64.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								contrib/masmx64/inffasx64.obj
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										28
									
								
								contrib/masmx64/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								contrib/masmx64/readme.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | Summary | ||||||
|  | ------- | ||||||
|  | This directory contains ASM implementations of the functions | ||||||
|  | longest_match() and inflate_fast(), for 64 bits x86 (both AMD64 and Intel EM64t), | ||||||
|  | for use with Microsoft Macro Assembler (x64) for AMD64 and Microsoft C++ 64 bits. | ||||||
|  |  | ||||||
|  | gvmat64.asm is written by Gilles Vollant (2005), by using Brian Raiter 686/32 bits | ||||||
|  |    assembly optimized version from Jean-loup Gailly original longest_match function | ||||||
|  |  | ||||||
|  | inffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing | ||||||
|  |    original function from Mark Adler | ||||||
|  |  | ||||||
|  | Use instructions | ||||||
|  | ---------------- | ||||||
|  | Copy these files into the zlib source directory. | ||||||
|  |  | ||||||
|  | define ASMV and ASMINF in your project. Include inffas8664.c in your source tree, | ||||||
|  | and inffasx64.obj and gvmat64.obj as object to link. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Build instructions | ||||||
|  | ------------------ | ||||||
|  | run bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe) | ||||||
|  |  | ||||||
|  | ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK | ||||||
|  |  | ||||||
|  | You can get Windows 2003 server DDK with ml64 and cl for AMD64 from  | ||||||
|  |   http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price) | ||||||
							
								
								
									
										2
									
								
								contrib/masmx86/bld_ml32.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								contrib/masmx86/bld_ml32.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | ml /coff /Zi /c /Flgvmat32.lst  gvmat32.asm  | ||||||
|  | ml /coff /Zi /c /Flinffas32.lst inffas32.asm  | ||||||
| @@ -1,14 +1,52 @@ | |||||||
| ; |  | ||||||
| ; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86 | ; gvmat32.asm -- Asm portion of the optimized longest_match for 32 bits x86 | ||||||
| ; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant. | ; Copyright (C) 1995-1996 Jean-loup Gailly and Gilles Vollant. | ||||||
| ; File written by Gilles Vollant, by modifiying the longest_match | ; File written by Gilles Vollant, by modifiying the longest_match | ||||||
| ;  from Jean-loup Gailly in deflate.c | ;  from Jean-loup Gailly in deflate.c | ||||||
| ; It need wmask == 0x7fff |  | ||||||
| ;     (assembly code is faster with a fixed wmask) |  | ||||||
| ; | ; | ||||||
| ; For Visual C++ 4.2 and ML 6.11c (version in directory \MASM611C of Win95 DDK) | ;         http://www.zlib.net | ||||||
| ;   I compile with : "ml /coff /Zi /c gvmat32.asm" | ;         http://www.winimage.com/zLibDll | ||||||
|  | ;         http://www.muppetlabs.com/~breadbox/software/assembly.html | ||||||
| ; | ; | ||||||
|  | ; For Visual C++ 4.x and higher and ML 6.x and higher | ||||||
|  | ;   ml.exe is in directory \MASM611C of Win95 DDK | ||||||
|  | ;   ml.exe is also distributed in http://www.masm32.com/masmdl.htm | ||||||
|  | ;    and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/ | ||||||
|  | ; | ||||||
|  | ; this file contain two implementation of longest_match | ||||||
|  | ; | ||||||
|  | ;  longest_match_7fff : written 1996 by Gilles Vollant optimized for  | ||||||
|  | ;            first Pentium. Assume s->w_mask == 0x7fff | ||||||
|  | ;  longest_match_686 : written by Brian raiter (1998), optimized for Pentium Pro | ||||||
|  | ; | ||||||
|  | ;  for using an seembly version of longest_match, you need define ASMV in project | ||||||
|  | ;  There is two way in using gvmat32.asm | ||||||
|  | ; | ||||||
|  | ;  A) Suggested method | ||||||
|  | ;    if you want include both longest_match_7fff and longest_match_686 | ||||||
|  | ;    compile the asm file running | ||||||
|  | ;           ml /coff /Zi /Flgvmat32.lst /c gvmat32.asm | ||||||
|  | ;    and include gvmat32c.c in your project | ||||||
|  | ;    if you have an old cpu (386,486 or first Pentium) and s->w_mask==0x7fff, | ||||||
|  | ;        longest_match_7fff will be used | ||||||
|  | ;    if you have a more modern CPU (Pentium Pro, II and higher) | ||||||
|  | ;        longest_match_686 will be used | ||||||
|  | ;    on old cpu with s->w_mask!=0x7fff, longest_match_686 will be used, | ||||||
|  | ;        but this is not a sitation you'll find often | ||||||
|  | ; | ||||||
|  | ;  B) Alternative | ||||||
|  | ;    if you are not interresed in old cpu performance and want the smaller | ||||||
|  | ;       binaries possible | ||||||
|  | ; | ||||||
|  | ;    compile the asm file running | ||||||
|  | ;           ml /coff /Zi /c /Flgvmat32.lst /DNOOLDPENTIUMCODE gvmat32.asm | ||||||
|  | ;    and do not include gvmat32c.c in your project (ou define also  | ||||||
|  | ;              NOOLDPENTIUMCODE) | ||||||
|  | ; | ||||||
|  | ; note : as I known, longest_match_686 is very faster than longest_match_7fff | ||||||
|  | ;        on pentium Pro/II/III, faster (but less) in P4, but it seem | ||||||
|  | ;        longest_match_7fff can be faster (very very litte) on AMD Athlon64/K8 | ||||||
|  | ; | ||||||
|  | ; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2 | ||||||
|  |  | ||||||
| ;uInt longest_match_7fff(s, cur_match) | ;uInt longest_match_7fff(s, cur_match) | ||||||
| ;    deflate_state *s; | ;    deflate_state *s; | ||||||
| @@ -47,37 +85,48 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ;  all the +addstr offsets are due to the addition of pending_buf_size in zlib 1.04 | ;  all the +zlib1222add offsets are due to the addition of fields | ||||||
| ;  and adding gzhead and gzindex in zlib 1.2.2.1 | ;  in zlib in the deflate_state structure since the asm code was first written | ||||||
| ;  in the deflate_state structure since the asm code was first written | ;  (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). | ||||||
| ;  (if you compile with zlib 1.0.4 or older, set addstr to 0). | ;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). | ||||||
| ;  (if you compiler with zlib between 1.04 and 1.2.1, set addstr to 4) | ;  if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). | ||||||
| ;  Note : these value are good with a 8 bytes boundary pack structure |  | ||||||
|  |  | ||||||
|     addstr              equ     4+8 |     zlib1222add         equ     8 | ||||||
|     dep_chain_length    equ     70h+addstr |  | ||||||
|     dep_window          equ     2ch+addstr | ;  Note : these value are good with a 8 bytes boundary pack structure | ||||||
|     dep_strstart        equ     60h+addstr |     dep_chain_length    equ     74h+zlib1222add | ||||||
|     dep_prev_length     equ     6ch+addstr |     dep_window          equ     30h+zlib1222add | ||||||
|     dep_nice_match      equ     84h+addstr |     dep_strstart        equ     64h+zlib1222add | ||||||
|     dep_w_size          equ     20h+addstr |     dep_prev_length     equ     70h+zlib1222add | ||||||
|     dep_prev            equ     34h+addstr |     dep_nice_match      equ     88h+zlib1222add | ||||||
|     dep_w_mask          equ     28h+addstr |     dep_w_size          equ     24h+zlib1222add | ||||||
|     dep_good_match      equ     80h+addstr |     dep_prev            equ     38h+zlib1222add | ||||||
|     dep_match_start     equ     64h+addstr |     dep_w_mask          equ     2ch+zlib1222add | ||||||
|     dep_lookahead       equ     68h+addstr |     dep_good_match      equ     84h+zlib1222add | ||||||
|  |     dep_match_start     equ     68h+zlib1222add | ||||||
|  |     dep_lookahead       equ     6ch+zlib1222add | ||||||
|  |  | ||||||
|  |  | ||||||
| _TEXT                   segment | _TEXT                   segment | ||||||
|  |  | ||||||
| IFDEF NOUNDERLINE | IFDEF NOUNDERLINE | ||||||
|  |    IFDEF NOOLDPENTIUMCODE | ||||||
|  |             public  longest_match | ||||||
|  |             public  match_init | ||||||
|  |    ELSE             | ||||||
|             public  longest_match_7fff |             public  longest_match_7fff | ||||||
|  |             public  cpudetect32 | ||||||
|             public  longest_match_686 |             public  longest_match_686 | ||||||
| ;                        public  match_init |    ENDIF | ||||||
| ELSE | ELSE | ||||||
|  |    IFDEF NOOLDPENTIUMCODE | ||||||
|  |             public  _longest_match | ||||||
|  |             public  _match_init | ||||||
|  |    ELSE | ||||||
|             public  _longest_match_7fff |             public  _longest_match_7fff | ||||||
|  |             public  _cpudetect32 | ||||||
|             public  _longest_match_686 |             public  _longest_match_686 | ||||||
| ;                        public  _match_init |    ENDIF | ||||||
| ENDIF | ENDIF | ||||||
|  |  | ||||||
|     MAX_MATCH           equ     258 |     MAX_MATCH           equ     258 | ||||||
| @@ -86,17 +135,7 @@ ENDIF | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| IFDEF NOUNDERLINE | IFNDEF NOOLDPENTIUMCODE | ||||||
| ;match_init      proc near |  | ||||||
| ;                ret |  | ||||||
| ;match_init      endp |  | ||||||
| ELSE |  | ||||||
| ;_match_init     proc near |  | ||||||
| ;                ret |  | ||||||
| ;_match_init     endp |  | ||||||
| ENDIF |  | ||||||
|  |  | ||||||
|  |  | ||||||
| IFDEF NOUNDERLINE | IFDEF NOUNDERLINE | ||||||
| longest_match_7fff   proc near | longest_match_7fff   proc near | ||||||
| ELSE | ELSE | ||||||
| @@ -562,9 +601,7 @@ cpudetect32     endp | |||||||
| ELSE | ELSE | ||||||
| _cpudetect32    endp | _cpudetect32    endp | ||||||
| ENDIF | ENDIF | ||||||
|  | ENDIF | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| MAX_MATCH       equ     258 | MAX_MATCH       equ     258 | ||||||
| MIN_MATCH       equ     3 | MIN_MATCH       equ     3 | ||||||
| @@ -601,19 +638,19 @@ curmatch	equ  esp + 60 | |||||||
| ;;; program to crash horribly, without so much as a warning at | ;;; program to crash horribly, without so much as a warning at | ||||||
| ;;; compile time. Sigh.) | ;;; compile time. Sigh.) | ||||||
|  |  | ||||||
| dsWSize		equ 36+addstr-4 | dsWSize     equ 36+zlib1222add | ||||||
| dsWMask		equ 44+addstr-4 | dsWMask     equ 44+zlib1222add | ||||||
| dsWindow	equ 48+addstr-4 | dsWindow    equ 48+zlib1222add | ||||||
| dsPrev		equ 56+addstr-4 | dsPrev      equ 56+zlib1222add | ||||||
| dsMatchLen	equ 88+addstr-4 | dsMatchLen  equ 88+zlib1222add | ||||||
| dsPrevMatch	equ 92+addstr-4 | dsPrevMatch equ 92+zlib1222add | ||||||
| dsStrStart	equ 100+addstr-4 | dsStrStart  equ 100+zlib1222add | ||||||
| dsMatchStart	equ 104+addstr-4 | dsMatchStart    equ 104+zlib1222add | ||||||
| dsLookahead	equ 108+addstr-4 | dsLookahead equ 108+zlib1222add | ||||||
| dsPrevLen	equ 112+addstr-4 | dsPrevLen   equ 112+zlib1222add | ||||||
| dsMaxChainLen	equ 116+addstr-4 | dsMaxChainLen   equ 116+zlib1222add | ||||||
| dsGoodMatch	equ 132+addstr-4 | dsGoodMatch equ 132+zlib1222add | ||||||
| dsNiceMatch	equ 136+addstr-4 | dsNiceMatch equ 136+zlib1222add | ||||||
|  |  | ||||||
|  |  | ||||||
| ;;; match.asm -- Pentium-Pro-optimized version of longest_match() | ;;; match.asm -- Pentium-Pro-optimized version of longest_match() | ||||||
| @@ -632,13 +669,20 @@ dsNiceMatch	equ 136+addstr-4 | |||||||
| ;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch) | ;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch) | ||||||
|  |  | ||||||
| ;_longest_match: | ;_longest_match: | ||||||
| IFDEF NOUNDERLINE | IFDEF NOOLDPENTIUMCODE | ||||||
| longest_match_686   proc near |     IFDEF NOUNDERLINE | ||||||
|  |     longest_match       proc near | ||||||
|  |     ELSE | ||||||
|  |     _longest_match      proc near | ||||||
|  |     ENDIF | ||||||
| ELSE | ELSE | ||||||
| _longest_match_686  proc near |     IFDEF NOUNDERLINE | ||||||
|  |     longest_match_686   proc near | ||||||
|  |     ELSE | ||||||
|  |     _longest_match_686  proc near | ||||||
|  |     ENDIF | ||||||
| ENDIF | ENDIF | ||||||
|  |  | ||||||
|  |  | ||||||
| ;;; Save registers that the compiler may be using, and adjust esp to | ;;; Save registers that the compiler may be using, and adjust esp to | ||||||
| ;;; make room for our stack frame. | ;;; make room for our stack frame. | ||||||
|  |  | ||||||
| @@ -899,10 +943,29 @@ LookaheadRet: | |||||||
| ; Your can freely use gvmat32 in any free or commercial app if you don't remove the string in the binary! | ; Your can freely use gvmat32 in any free or commercial app if you don't remove the string in the binary! | ||||||
|     db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah |     db     0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah | ||||||
|  |  | ||||||
| IFDEF NOUNDERLINE |  | ||||||
| longest_match_686   endp | IFDEF NOOLDPENTIUMCODE | ||||||
|  |     IFDEF NOUNDERLINE | ||||||
|  |     longest_match       endp | ||||||
|  |     ELSE | ||||||
|  |     _longest_match      endp | ||||||
|  |     ENDIF | ||||||
|  |  | ||||||
|  |     IFDEF NOUNDERLINE | ||||||
|  |     match_init      proc near | ||||||
|  |                     ret | ||||||
|  |     match_init      endp | ||||||
|  |     ELSE | ||||||
|  |     _match_init     proc near | ||||||
|  |                     ret | ||||||
|  |     _match_init     endp | ||||||
|  |     ENDIF     | ||||||
| ELSE | ELSE | ||||||
| _longest_match_686  endp |     IFDEF NOUNDERLINE | ||||||
|  |     longest_match_686   endp | ||||||
|  |     ELSE | ||||||
|  |     _longest_match_686  endp | ||||||
|  |     ENDIF | ||||||
| ENDIF | ENDIF | ||||||
|  |  | ||||||
| _TEXT   ends | _TEXT   ends | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								contrib/masmx86/gvmat32.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								contrib/masmx86/gvmat32.obj
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -6,16 +6,12 @@ | |||||||
|  *  longest_match execute standard C code is wmask != 0x7fff |  *  longest_match execute standard C code is wmask != 0x7fff | ||||||
|  *     (assembly code is faster with a fixed wmask) |  *     (assembly code is faster with a fixed wmask) | ||||||
|  * |  * | ||||||
|  |  * Read comment at beginning of gvmat32.asm for more information | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #if defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) | ||||||
| #include "deflate.h" | #include "deflate.h" | ||||||
|  |  | ||||||
| #ifdef ASMV |  | ||||||
| #define NIL 0 |  | ||||||
|  |  | ||||||
| #define UNALIGNED_OK |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* if your C compiler don't add underline before function name, | /* if your C compiler don't add underline before function name, | ||||||
|         define ADD_UNDERLINE_ASMFUNC */ |         define ADD_UNDERLINE_ASMFUNC */ | ||||||
| #ifdef ADD_UNDERLINE_ASMFUNC | #ifdef ADD_UNDERLINE_ASMFUNC | ||||||
| @@ -25,11 +21,6 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void match_init() |  | ||||||
| { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| unsigned long cpudetect32(); | unsigned long cpudetect32(); | ||||||
|  |  | ||||||
| uInt longest_match_c( | uInt longest_match_c( | ||||||
| @@ -45,162 +36,27 @@ uInt longest_match_686( | |||||||
|     deflate_state *s, |     deflate_state *s, | ||||||
|     IPos cur_match);                             /* current match */ |     IPos cur_match);                             /* current match */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static uInt iIsPPro=2; | ||||||
|  |  | ||||||
|  | void match_init () | ||||||
|  | { | ||||||
|  |     iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0; | ||||||
|  | } | ||||||
|  |  | ||||||
| uInt longest_match( | uInt longest_match( | ||||||
|     deflate_state *s, |     deflate_state *s, | ||||||
|     IPos cur_match)                             /* current match */ |     IPos cur_match)                             /* current match */ | ||||||
| { | { | ||||||
|     static uInt iIsPPro=2; |     if (iIsPPro!=0) | ||||||
|  |  | ||||||
|     if ((s->w_mask == 0x7fff) && (iIsPPro==0)) |  | ||||||
|         return longest_match_7fff(s,cur_match); |  | ||||||
|  |  | ||||||
|     if (iIsPPro==1) |  | ||||||
|         return longest_match_686(s,cur_match); |         return longest_match_686(s,cur_match); | ||||||
|  |  | ||||||
|     if (iIsPPro==2) |     if (s->w_mask != 0x7fff) | ||||||
|         iIsPPro = (((cpudetect32()/0x100)&0xf)>=6) ? 1 : 0; |         return longest_match_686(s,cur_match); | ||||||
|  |  | ||||||
|     return longest_match_c(s,cur_match); |     /* now ((s->w_mask == 0x7fff) && (iIsPPro==0)) */ | ||||||
|  |         return longest_match_7fff(s,cur_match); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif /* defined(ASMV) && (!defined(NOOLDPENTIUMCODE)) */ | ||||||
| uInt longest_match_c(s, cur_match) |  | ||||||
|     deflate_state *s; |  | ||||||
|     IPos cur_match;                             /* current match */ |  | ||||||
| { |  | ||||||
|     unsigned chain_length = s->max_chain_length;/* max hash chain length */ |  | ||||||
|     register Bytef *scan = s->window + s->strstart; /* current string */ |  | ||||||
|     register Bytef *match;                       /* matched string */ |  | ||||||
|     register int len;                           /* length of current match */ |  | ||||||
|     int best_len = s->prev_length;              /* best match length so far */ |  | ||||||
|     int nice_match = s->nice_match;             /* stop if match long enough */ |  | ||||||
|     IPos limit = s->strstart > (IPos)MAX_DIST(s) ? |  | ||||||
|         s->strstart - (IPos)MAX_DIST(s) : NIL; |  | ||||||
|     /* Stop when cur_match becomes <= limit. To simplify the code, |  | ||||||
|      * we prevent matches with the string of window index 0. |  | ||||||
|      */ |  | ||||||
|     Posf *prev = s->prev; |  | ||||||
|     uInt wmask = s->w_mask; |  | ||||||
|  |  | ||||||
| #ifdef UNALIGNED_OK |  | ||||||
|     /* Compare two bytes at a time. Note: this is not always beneficial. |  | ||||||
|      * Try with and without -DUNALIGNED_OK to check. |  | ||||||
|      */ |  | ||||||
|     register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; |  | ||||||
|     register ush scan_start = *(ushf*)scan; |  | ||||||
|     register ush scan_end   = *(ushf*)(scan+best_len-1); |  | ||||||
| #else |  | ||||||
|     register Bytef *strend = s->window + s->strstart + MAX_MATCH; |  | ||||||
|     register Byte scan_end1  = scan[best_len-1]; |  | ||||||
|     register Byte scan_end   = scan[best_len]; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. |  | ||||||
|      * It is easy to get rid of this optimization if necessary. |  | ||||||
|      */ |  | ||||||
|     Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); |  | ||||||
|  |  | ||||||
|     /* Do not waste too much time if we already have a good match: */ |  | ||||||
|     if (s->prev_length >= s->good_match) { |  | ||||||
|         chain_length >>= 2; |  | ||||||
|     } |  | ||||||
|     /* Do not look for matches beyond the end of the input. This is necessary |  | ||||||
|      * to make deflate deterministic. |  | ||||||
|      */ |  | ||||||
|     if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; |  | ||||||
|  |  | ||||||
|     Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); |  | ||||||
|  |  | ||||||
|     do { |  | ||||||
|         Assert(cur_match < s->strstart, "no future"); |  | ||||||
|         match = s->window + cur_match; |  | ||||||
|  |  | ||||||
|         /* Skip to next match if the match length cannot increase |  | ||||||
|          * or if the match length is less than 2: |  | ||||||
|          */ |  | ||||||
| #if (defined(UNALIGNED_OK) && MAX_MATCH == 258) |  | ||||||
|         /* This code assumes sizeof(unsigned short) == 2. Do not use |  | ||||||
|          * UNALIGNED_OK if your compiler uses a different size. |  | ||||||
|          */ |  | ||||||
|         if (*(ushf*)(match+best_len-1) != scan_end || |  | ||||||
|             *(ushf*)match != scan_start) continue; |  | ||||||
|  |  | ||||||
|         /* It is not necessary to compare scan[2] and match[2] since they are |  | ||||||
|          * always equal when the other bytes match, given that the hash keys |  | ||||||
|          * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at |  | ||||||
|          * strstart+3, +5, ... up to strstart+257. We check for insufficient |  | ||||||
|          * lookahead only every 4th comparison; the 128th check will be made |  | ||||||
|          * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is |  | ||||||
|          * necessary to put more guard bytes at the end of the window, or |  | ||||||
|          * to check more often for insufficient lookahead. |  | ||||||
|          */ |  | ||||||
|         Assert(scan[2] == match[2], "scan[2]?"); |  | ||||||
|         scan++, match++; |  | ||||||
|         do { |  | ||||||
|         } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && |  | ||||||
|                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) && |  | ||||||
|                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) && |  | ||||||
|                  *(ushf*)(scan+=2) == *(ushf*)(match+=2) && |  | ||||||
|                  scan < strend); |  | ||||||
|         /* The funny "do {}" generates better code on most compilers */ |  | ||||||
|  |  | ||||||
|         /* Here, scan <= window+strstart+257 */ |  | ||||||
|         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); |  | ||||||
|         if (*scan == *match) scan++; |  | ||||||
|  |  | ||||||
|         len = (MAX_MATCH - 1) - (int)(strend-scan); |  | ||||||
|         scan = strend - (MAX_MATCH-1); |  | ||||||
|  |  | ||||||
| #else /* UNALIGNED_OK */ |  | ||||||
|  |  | ||||||
|         if (match[best_len]   != scan_end  || |  | ||||||
|             match[best_len-1] != scan_end1 || |  | ||||||
|             *match            != *scan     || |  | ||||||
|             *++match          != scan[1])      continue; |  | ||||||
|  |  | ||||||
|         /* The check at best_len-1 can be removed because it will be made |  | ||||||
|          * again later. (This heuristic is not always a win.) |  | ||||||
|          * It is not necessary to compare scan[2] and match[2] since they |  | ||||||
|          * are always equal when the other bytes match, given that |  | ||||||
|          * the hash keys are equal and that HASH_BITS >= 8. |  | ||||||
|          */ |  | ||||||
|         scan += 2, match++; |  | ||||||
|         Assert(*scan == *match, "match[2]?"); |  | ||||||
|  |  | ||||||
|         /* We check for insufficient lookahead only every 8th comparison; |  | ||||||
|          * the 256th check will be made at strstart+258. |  | ||||||
|          */ |  | ||||||
|         do { |  | ||||||
|         } while (*++scan == *++match && *++scan == *++match && |  | ||||||
|                  *++scan == *++match && *++scan == *++match && |  | ||||||
|                  *++scan == *++match && *++scan == *++match && |  | ||||||
|                  *++scan == *++match && *++scan == *++match && |  | ||||||
|                  scan < strend); |  | ||||||
|  |  | ||||||
|         Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); |  | ||||||
|  |  | ||||||
|         len = MAX_MATCH - (int)(strend - scan); |  | ||||||
|         scan = strend - MAX_MATCH; |  | ||||||
|  |  | ||||||
| #endif /* UNALIGNED_OK */ |  | ||||||
|  |  | ||||||
|         if (len > best_len) { |  | ||||||
|             s->match_start = cur_match; |  | ||||||
|             best_len = len; |  | ||||||
|             if (len >= nice_match) break; |  | ||||||
| #ifdef UNALIGNED_OK |  | ||||||
|             scan_end = *(ushf*)(scan+best_len-1); |  | ||||||
| #else |  | ||||||
|             scan_end1  = scan[best_len-1]; |  | ||||||
|             scan_end   = scan[best_len]; |  | ||||||
| #endif |  | ||||||
|         } |  | ||||||
|     } while ((cur_match = prev[cur_match & wmask]) > limit |  | ||||||
|              && --chain_length != 0); |  | ||||||
|  |  | ||||||
|     if ((uInt)best_len <= s->lookahead) return (uInt)best_len; |  | ||||||
|     return s->lookahead; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif /* ASMV */ |  | ||||||
|   | |||||||
| @@ -1,3 +1,57 @@ | |||||||
|  | ;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding | ||||||
|  | ; * | ||||||
|  | ; * inffas32.asm is derivated from inffas86.c, with translation of assembly code | ||||||
|  | ; * | ||||||
|  | ; * Copyright (C) 1995-2003 Mark Adler | ||||||
|  | ; * For conditions of distribution and use, see copyright notice in zlib.h | ||||||
|  | ; * | ||||||
|  | ; * Copyright (C) 2003 Chris Anderson <christop@charm.net> | ||||||
|  | ; * Please use the copyright conditions above. | ||||||
|  | ; * | ||||||
|  | ; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from | ||||||
|  | ; * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at | ||||||
|  | ; * the moment.  I have successfully compiled and tested this code with gcc2.96, | ||||||
|  | ; * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S | ||||||
|  | ; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX | ||||||
|  | ; * enabled.  I will attempt to merge the MMX code into this version.  Newer | ||||||
|  | ; * versions of this and inffast.S can be found at | ||||||
|  | ; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/ | ||||||
|  | ; *  | ||||||
|  | ; * 2005 : modification by Gilles Vollant | ||||||
|  | ; */ | ||||||
|  | ; For Visual C++ 4.x and higher and ML 6.x and higher | ||||||
|  | ;   ml.exe is in directory \MASM611C of Win95 DDK | ||||||
|  | ;   ml.exe is also distributed in http://www.masm32.com/masmdl.htm | ||||||
|  | ;    and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/ | ||||||
|  | ; | ||||||
|  | ; | ||||||
|  | ;   compile with command line option | ||||||
|  | ;   ml  /coff /Zi /c /Flinffas32.lst inffas32.asm | ||||||
|  |  | ||||||
|  | ;   if you define NO_GZIP (see inflate.h), compile with | ||||||
|  | ;   ml  /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ; zlib122sup is 0 fort zlib 1.2.2.1 and lower | ||||||
|  | ; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head  | ||||||
|  | ;        in inflate_state in inflate.h) | ||||||
|  | zlib1222sup      equ    8 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | IFDEF GUNZIP | ||||||
|  |   INFLATE_MODE_TYPE    equ 11 | ||||||
|  |   INFLATE_MODE_BAD     equ 26 | ||||||
|  | ELSE | ||||||
|  |   IFNDEF NO_GUNZIP | ||||||
|  |     INFLATE_MODE_TYPE    equ 11 | ||||||
|  |     INFLATE_MODE_BAD     equ 26 | ||||||
|  |   ELSE | ||||||
|  |     INFLATE_MODE_TYPE    equ 3 | ||||||
|  |     INFLATE_MODE_BAD     equ 17 | ||||||
|  |   ENDIF | ||||||
|  | ENDIF | ||||||
|  |  | ||||||
|  |  | ||||||
| ; 75 "inffast.S" | ; 75 "inffast.S" | ||||||
| ;FILE "inffast.S" | ;FILE "inffast.S" | ||||||
|  |  | ||||||
| @@ -84,20 +138,16 @@ dd	2147483647 | |||||||
| dd	4294967295 | dd	4294967295 | ||||||
|  |  | ||||||
|  |  | ||||||
| ; head was added in zlib 1.2.2.1, so we add addstr |  | ||||||
| ; set addstr to 0 with zlib 1.2.1 of below |  | ||||||
| addstr           equ    4 |  | ||||||
|  |  | ||||||
| mode_state	 equ	0	;/* state->mode	*/ | mode_state	 equ	0	;/* state->mode	*/ | ||||||
| wsize_state	 equ	32+addstr	;/* state->wsize */ | wsize_state	 equ	(32+zlib1222sup)	;/* state->wsize */ | ||||||
| write_state	 equ	(36+4+addstr)	;/* state->write */ | write_state	 equ	(36+4+zlib1222sup)	;/* state->write */ | ||||||
| window_state	 equ	(40+4+addstr)	;/* state->window */ | window_state	 equ	(40+4+zlib1222sup)	;/* state->window */ | ||||||
| hold_state	 equ	(44+4+addstr)	;/* state->hold	*/ | hold_state	 equ	(44+4+zlib1222sup)	;/* state->hold	*/ | ||||||
| bits_state	 equ	(48+4+addstr)	;/* state->bits	*/ | bits_state	 equ	(48+4+zlib1222sup)	;/* state->bits	*/ | ||||||
| lencode_state	 equ	(64+4+addstr)	;/* state->lencode */ | lencode_state	 equ	(64+4+zlib1222sup)	;/* state->lencode */ | ||||||
| distcode_state	 equ	(68+4+addstr)	;/* state->distcode */ | distcode_state	 equ	(68+4+zlib1222sup)	;/* state->distcode */ | ||||||
| lenbits_state	 equ	(72+4+addstr)	;/* state->lenbits */ | lenbits_state	 equ	(72+4+zlib1222sup)	;/* state->lenbits */ | ||||||
| distbits_state	 equ	(76+4+addstr)	;/* state->distbits */ | distbits_state	 equ	(76+4+zlib1222sup)	;/* state->distbits */ | ||||||
|  |  | ||||||
|  |  | ||||||
| ;;SECTION .text | ;;SECTION .text | ||||||
| @@ -594,9 +644,9 @@ L_init_mmx: | |||||||
| 	movd mm0,ebp | 	movd mm0,ebp | ||||||
| 	mov  ebp,ebx | 	mov  ebp,ebx | ||||||
| ; 896 "inffast.S" | ; 896 "inffast.S" | ||||||
| 	movd mm4,[esp+0] | 	movd mm4,dword ptr [esp+0] | ||||||
| 	movq mm3,mm4 | 	movq mm3,mm4 | ||||||
| 	movd mm5,[esp+4] | 	movd mm5,dword ptr [esp+4] | ||||||
| 	movq mm2,mm5 | 	movq mm2,mm5 | ||||||
| 	pxor mm1,mm1 | 	pxor mm1,mm1 | ||||||
| 	mov  ebx, [esp+8] | 	mov  ebx, [esp+8] | ||||||
| @@ -610,7 +660,7 @@ L_do_loop_mmx: | |||||||
| 	ja  L_get_length_code_mmx | 	ja  L_get_length_code_mmx | ||||||
|  |  | ||||||
| 	movd mm6,ebp | 	movd mm6,ebp | ||||||
| 	movd mm7,[esi] | 	movd mm7,dword ptr [esi] | ||||||
| 	add  esi,4 | 	add  esi,4 | ||||||
| 	psllq mm7,mm6 | 	psllq mm7,mm6 | ||||||
| 	add  ebp,32 | 	add  ebp,32 | ||||||
| @@ -667,7 +717,7 @@ L_decode_distance_mmx: | |||||||
| 	ja L_get_dist_code_mmx | 	ja L_get_dist_code_mmx | ||||||
|  |  | ||||||
| 	movd mm6,ebp | 	movd mm6,ebp | ||||||
| 	movd mm7,[esi] | 	movd mm7,dword ptr [esi] | ||||||
| 	add  esi,4 | 	add  esi,4 | ||||||
| 	psllq mm7,mm6 | 	psllq mm7,mm6 | ||||||
| 	add  ebp,32 | 	add  ebp,32 | ||||||
| @@ -871,7 +921,7 @@ L_invalid_distance_code: | |||||||
|  |  | ||||||
|  |  | ||||||
| 	mov  ecx, invalid_distance_code_msg | 	mov  ecx, invalid_distance_code_msg | ||||||
| 	mov  edx,26 | 	mov  edx,INFLATE_MODE_BAD | ||||||
| 	jmp  L_update_stream_state | 	jmp  L_update_stream_state | ||||||
|  |  | ||||||
| L_test_for_end_of_block: | L_test_for_end_of_block: | ||||||
| @@ -884,7 +934,7 @@ L_test_for_end_of_block: | |||||||
| 	jz  L_invalid_literal_length_code | 	jz  L_invalid_literal_length_code | ||||||
|  |  | ||||||
| 	mov  ecx,0 | 	mov  ecx,0 | ||||||
| 	mov  edx,11 | 	mov  edx,INFLATE_MODE_TYPE | ||||||
| 	jmp  L_update_stream_state | 	jmp  L_update_stream_state | ||||||
|  |  | ||||||
| L_invalid_literal_length_code: | L_invalid_literal_length_code: | ||||||
| @@ -894,7 +944,7 @@ L_invalid_literal_length_code: | |||||||
|  |  | ||||||
|  |  | ||||||
| 	mov  ecx, invalid_literal_length_code_msg | 	mov  ecx, invalid_literal_length_code_msg | ||||||
| 	mov  edx,26 | 	mov  edx,INFLATE_MODE_BAD | ||||||
| 	jmp  L_update_stream_state | 	jmp  L_update_stream_state | ||||||
|  |  | ||||||
| L_invalid_distance_too_far: | L_invalid_distance_too_far: | ||||||
| @@ -903,7 +953,7 @@ L_invalid_distance_too_far: | |||||||
|  |  | ||||||
| 	mov  esi, [esp+44] | 	mov  esi, [esp+44] | ||||||
| 	mov  ecx, invalid_distance_too_far_msg | 	mov  ecx, invalid_distance_too_far_msg | ||||||
| 	mov  edx,26 | 	mov  edx,INFLATE_MODE_BAD | ||||||
| 	jmp  L_update_stream_state | 	jmp  L_update_stream_state | ||||||
|  |  | ||||||
| L_update_stream_state: | L_update_stream_state: | ||||||
| @@ -1029,8 +1079,5 @@ L_done: | |||||||
| 	pop  edi | 	pop  edi | ||||||
| 	ret | 	ret | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| _TEXT	ends | _TEXT	ends | ||||||
| end | end | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -1,63 +0,0 @@ | |||||||
| Change in 1.01b (20 may 04) |  | ||||||
| - Integrate patch from Debian package (submited by Mark Brown) |  | ||||||
| - Add tools mztools from Xavier Roche |  | ||||||
|  |  | ||||||
| Change in 1.01 (8 may 04) |  | ||||||
| - fix buffer overrun risk in unzip.c (Xavier Roche) |  | ||||||
| - fix a minor buffer insecurity in minizip.c (Mike Whittaker) |  | ||||||
|  |  | ||||||
| Change in 1.00: (10 sept 03) |  | ||||||
| - rename to 1.00 |  | ||||||
| - cosmetic code change |  | ||||||
|  |  | ||||||
| Change in 0.22: (19 May 03) |  | ||||||
| - crypting support (unless you define NOCRYPT) |  | ||||||
| - append file in existing zipfile |  | ||||||
|  |  | ||||||
| Change in 0.21: (10 Mar 03) |  | ||||||
| - bug fixes |  | ||||||
|  |  | ||||||
| Change in 0.17: (27 Jan 02) |  | ||||||
| - bug fixes |  | ||||||
|  |  | ||||||
| Change in 0.16: (19 Jan 02) |  | ||||||
| - Support of ioapi for virtualize zip file access |  | ||||||
|  |  | ||||||
| Change in 0.15: (19 Mar 98) |  | ||||||
| - fix memory leak in minizip.c |  | ||||||
|  |  | ||||||
| Change in 0.14: (10 Mar 98) |  | ||||||
| - fix bugs in minizip.c sample for zipping big file |  | ||||||
| - fix problem in month in date handling |  | ||||||
| - fix bug in unzlocal_GetCurrentFileInfoInternal in unzip.c for |  | ||||||
|     comment handling |  | ||||||
|  |  | ||||||
| Change in 0.13: (6 Mar 98) |  | ||||||
| - fix bugs in zip.c |  | ||||||
| - add real minizip sample |  | ||||||
|  |  | ||||||
| Change in 0.12: (4 Mar 98) |  | ||||||
| - add zip.c and zip.h for creates .zip file |  | ||||||
| - fix change_file_date in miniunz.c for Unix (Jean-loup Gailly) |  | ||||||
| - fix miniunz.c for file without specific record for directory |  | ||||||
|  |  | ||||||
| Change in 0.11: (3 Mar 98) |  | ||||||
| - fix bug in unzGetCurrentFileInfo for get extra field and comment |  | ||||||
| - enhance miniunz sample, remove the bad unztst.c sample |  | ||||||
|  |  | ||||||
| Change in 0.10: (2 Mar 98) |  | ||||||
| - fix bug in unzReadCurrentFile |  | ||||||
| - rename unzip* to unz* function and structure |  | ||||||
| - remove Windows-like hungary notation variable name |  | ||||||
| - modify some structure in unzip.h |  | ||||||
| - add somes comment in source |  | ||||||
| - remove unzipGetcCurrentFile function |  | ||||||
| - replace ZUNZEXPORT by ZEXPORT |  | ||||||
| - add unzGetLocalExtrafield for get the local extrafield info |  | ||||||
| - add a new sample, miniunz.c |  | ||||||
|  |  | ||||||
| Change in 0.4: (25 Feb 98) |  | ||||||
| - suppress the type unzipFileInZip. |  | ||||||
|   Only on file in the zipfile can be open at the same time |  | ||||||
| - fix somes typo in code |  | ||||||
| - added tm_unz structure in unzip_file_info (date/time in readable format) |  | ||||||
							
								
								
									
										7
									
								
								contrib/minizip/MiniZip64_Changes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								contrib/minizip/MiniZip64_Changes.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  |  | ||||||
|  | MiniZip64 was derrived from MiniZip at version 1.01f | ||||||
|  |  | ||||||
|  | Change in 1.0 (Okt 2009) | ||||||
|  |  - **TODO - Add history** | ||||||
|  |   | ||||||
|  |   | ||||||
							
								
								
									
										79
									
								
								contrib/minizip/MiniZip64_info.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								contrib/minizip/MiniZip64_info.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | MiniZip64 - Copyright (c) 2009-2010 - Mathias Svensson - Built from MiniZip by Gilles Vollant | ||||||
|  |  | ||||||
|  | Introduction | ||||||
|  | --------------------- | ||||||
|  | MiniZip64 is built from MiniZip by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | When adding ZIP64 support into minizip it would result into breaking compatibility with current minizip. | ||||||
|  | And since breaking compatibility in minizip is not wanted. I decided to create a fork of minizip  | ||||||
|  | and create minizip64. | ||||||
|  |  | ||||||
|  | Even though MiniZip64 is build from MiniZip, all functions and struct's have changed name so that it  | ||||||
|  | would not collide with each other. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Background | ||||||
|  | --------------------- | ||||||
|  | When adding ZIP64 support I found that Even Rouault have added ZIP64 support for unzip.c into minizip  | ||||||
|  | for a open source project called gdal ( http://www.gdal.org/ ) | ||||||
|  |  | ||||||
|  | That was used as a starting point. And after that ZIP64 support was added to zip.c | ||||||
|  | some refactoring and code cleanup was also done. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Changed from MiniZip to MiniZip64 | ||||||
|  | ------------------------------------- | ||||||
|  | * Filenames has got a '64' at the end of them . eg unzip.c is now called unzip64.c | ||||||
|  | * Added ZIP64 support for unzip ( by Even Rouault ) | ||||||
|  | * Added ZIP64 support for zip ( by Mathias Svensson ) | ||||||
|  | * Reverted some changed that Even Rouault did. | ||||||
|  | * Bunch of patches received from Gulles Vollant that he received for MiniZip from various users. | ||||||
|  | * Added unzip patch for BZIP Compression method (patch create by Daniel Borca) | ||||||
|  | * Added BZIP Compress method for zip | ||||||
|  | * Did some refactoring and code cleanup | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Credits  | ||||||
|  |  | ||||||
|  |  Gilles Vollant    - Original MiniZip author | ||||||
|  |  Even Rouault      - ZIP64 unzip Support | ||||||
|  |  Daniel Borca      - BZip Compression method support in unzip | ||||||
|  |  Mathias Svensson  - ZIP64 zip support | ||||||
|  |  Mathias Svensson  - BZip Compression method support in zip | ||||||
|  |   | ||||||
|  |  Resources  | ||||||
|  |   | ||||||
|  |  ZipLayout   http://result42.com/projects/ZipFileLayout | ||||||
|  |              Command line tool for Windows that shows the layout and information of the headers in a zip archive. | ||||||
|  |              Used when debugging and validating the creation of zip files using MiniZip64 | ||||||
|  | 			  | ||||||
|  | 			  | ||||||
|  |  ZIP App Note  http://www.pkware.com/documents/casestudies/APPNOTE.TXT | ||||||
|  |                Zip File specification | ||||||
|  |          | ||||||
|  |  | ||||||
|  | Notes. | ||||||
|  |  * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined. | ||||||
|  |  | ||||||
|  | License | ||||||
|  | ---------------------------------------------------------- | ||||||
|  |    Condition of use and distribution are the same than zlib : | ||||||
|  |  | ||||||
|  |   This software is provided 'as-is', without any express or implied | ||||||
|  |   warranty.  In no event will the authors be held liable for any damages | ||||||
|  |   arising from the use of this software. | ||||||
|  |  | ||||||
|  |   Permission is granted to anyone to use this software for any purpose, | ||||||
|  |   including commercial applications, and to alter it and redistribute it | ||||||
|  |   freely, subject to the following restrictions: | ||||||
|  |  | ||||||
|  |   1. The origin of this software must not be misrepresented; you must not | ||||||
|  |      claim that you wrote the original software. If you use this software | ||||||
|  |      in a product, an acknowledgment in the product documentation would be | ||||||
|  |      appreciated but is not required. | ||||||
|  |   2. Altered source versions must be plainly marked as such, and must not be | ||||||
|  |      misrepresented as being the original software. | ||||||
|  |   3. This notice may not be removed or altered from any source distribution. | ||||||
|  |  | ||||||
|  | ---------------------------------------------------------- | ||||||
|  |  | ||||||
| @@ -1,9 +1,9 @@ | |||||||
| /* crypt.h -- base code for crypt/uncrypt ZIPfile | /* crypt.h -- base code for crypt/uncrypt ZIPfile | ||||||
|  |  | ||||||
|  |  | ||||||
|    Version 1.01, May 8th, 2004 |    Version 1.01e, February 12th, 2005 | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant |    Copyright (C) 1998-2005 Gilles Vollant | ||||||
|  |  | ||||||
|    This code is a modified version of crypting code in Infozip distribution |    This code is a modified version of crypting code in Infozip distribution | ||||||
|  |  | ||||||
| @@ -87,13 +87,12 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned lon | |||||||
| #    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */ | #    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */ | ||||||
| #  endif | #  endif | ||||||
|  |  | ||||||
| static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) | static int crypthead(const char* passwd,      /* password string */ | ||||||
|     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 unsigned long* pcrc_32_tab,  | ||||||
|     const unsigned long* pcrc_32_tab; |                      unsigned long crcForCrypting) | ||||||
|     unsigned long crcForCrypting; |  | ||||||
| { | { | ||||||
|     int n;                       /* index in random header */ |     int n;                       /* index in random header */ | ||||||
|     int t;                       /* temporary */ |     int t;                       /* temporary */ | ||||||
| @@ -124,8 +123,8 @@ static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) | |||||||
|     { |     { | ||||||
|         buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); |         buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); | ||||||
|     } |     } | ||||||
|     buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); |     buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); | ||||||
|     buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); |     buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); | ||||||
|     return n; |     return n; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,74 +1,86 @@ | |||||||
| /* ioapi.c -- IO base function header for compress/uncompress .zip | /* ioapi.h -- IO base function header for compress/uncompress .zip | ||||||
|    files using zlib + zip or unzip API |    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Version 1.01, May 8th, 2004 | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support  | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
|  |  | ||||||
|  | 	 For more info read MiniZip_info.txt | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #if (defined(_WIN32)) | ||||||
| #include <stdlib.h> | 	#define _CRT_SECURE_NO_WARNINGS | ||||||
| #include <string.h> | #endif | ||||||
|  |  | ||||||
| #include "zlib.h" |  | ||||||
| #include "ioapi.h" | #include "ioapi.h" | ||||||
|  |  | ||||||
|  | voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode) | ||||||
|  | { | ||||||
|  |     if (pfilefunc->zfile_func64.zopen64_file != NULL) | ||||||
|  |         return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) | ||||||
|  | { | ||||||
|  |     if (pfilefunc->zfile_func64.zseek64_file != NULL) | ||||||
|  |         return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         uLong offsetTruncated = (uLong)offset; | ||||||
|  |         if (offsetTruncated != offset) | ||||||
|  |             return -1; | ||||||
|  |         else | ||||||
|  |             return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream) | ||||||
|  | { | ||||||
|  |     if (pfilefunc->zfile_func64.zseek64_file != NULL) | ||||||
|  |         return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); | ||||||
|  |         if ((tell_uLong) == ((uLong)-1)) | ||||||
|  |             return (ZPOS64_T)-1; | ||||||
|  |         else | ||||||
|  |             return tell_uLong; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 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->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.zwrite_file = p_filefunc32->zwrite_file; | ||||||
|  |     p_filefunc64_32->zfile_func64.ztell64_file = NULL; | ||||||
|  |     p_filefunc64_32->zfile_func64.zseek64_file = NULL; | ||||||
|  |     p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; | ||||||
|  |     p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; | ||||||
|  |     p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; | ||||||
|  |     p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; | ||||||
|  |     p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ |  | ||||||
|  |  | ||||||
| #ifndef SEEK_CUR | static voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode)); | ||||||
| #define SEEK_CUR    1 | static uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); | ||||||
| #endif | 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)); | ||||||
|  |  | ||||||
| #ifndef SEEK_END | static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) | ||||||
| #define SEEK_END    2 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifndef SEEK_SET |  | ||||||
| #define SEEK_SET    0 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| voidpf ZCALLBACK fopen_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    const char* filename, |  | ||||||
|    int mode)); |  | ||||||
|  |  | ||||||
| uLong ZCALLBACK fread_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream, |  | ||||||
|    void* buf, |  | ||||||
|    uLong size)); |  | ||||||
|  |  | ||||||
| uLong ZCALLBACK fwrite_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream, |  | ||||||
|    const void* buf, |  | ||||||
|    uLong size)); |  | ||||||
|  |  | ||||||
| long ZCALLBACK ftell_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream)); |  | ||||||
|  |  | ||||||
| long ZCALLBACK fseek_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream, |  | ||||||
|    uLong offset, |  | ||||||
|    int origin)); |  | ||||||
|  |  | ||||||
| int ZCALLBACK fclose_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream)); |  | ||||||
|  |  | ||||||
| int ZCALLBACK ferror_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream)); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) |  | ||||||
|    voidpf opaque; |  | ||||||
|    const char* filename; |  | ||||||
|    int mode; |  | ||||||
| { | { | ||||||
|     FILE* file = NULL; |     FILE* file = NULL; | ||||||
|     const char* mode_fopen = NULL; |     const char* mode_fopen = NULL; | ||||||
| @@ -86,44 +98,55 @@ voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) | |||||||
|     return file; |     return file; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) | ||||||
|  | { | ||||||
|  |     FILE* file = NULL; | ||||||
|  |     const char* mode_fopen = NULL; | ||||||
|  |     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) | ||||||
|  |         mode_fopen = "rb"; | ||||||
|  |     else | ||||||
|  |     if (mode & ZLIB_FILEFUNC_MODE_EXISTING) | ||||||
|  |         mode_fopen = "r+b"; | ||||||
|  |     else | ||||||
|  |     if (mode & ZLIB_FILEFUNC_MODE_CREATE) | ||||||
|  |         mode_fopen = "wb"; | ||||||
|  |  | ||||||
| uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) |     if ((filename!=NULL) && (mode_fopen != NULL)) | ||||||
|    voidpf opaque; |         file = fopen64((const char*)filename, mode_fopen); | ||||||
|    voidpf stream; |     return file; | ||||||
|    void* buf; | } | ||||||
|    uLong size; |  | ||||||
|  |  | ||||||
|  | static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) | ||||||
| { | { | ||||||
|     uLong ret; |     uLong ret; | ||||||
|     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) | ||||||
| uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size) |  | ||||||
|    voidpf opaque; |  | ||||||
|    voidpf stream; |  | ||||||
|    const void* buf; |  | ||||||
|    uLong size; |  | ||||||
| { | { | ||||||
|     uLong ret; |     uLong ret; | ||||||
|     ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); |     ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| long ZCALLBACK ftell_file_func (opaque, stream) | static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) | ||||||
|    voidpf opaque; |  | ||||||
|    voidpf stream; |  | ||||||
| { | { | ||||||
|     long ret; |     long ret; | ||||||
|     ret = ftell((FILE *)stream); |     ret = ftell((FILE *)stream); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) |  | ||||||
|    voidpf opaque; | static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) | ||||||
|    voidpf stream; | { | ||||||
|    uLong offset; |     ZPOS64_T ret; | ||||||
|    int origin; |     ret = ftello64((FILE *)stream); | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 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; | ||||||
| @@ -141,22 +164,45 @@ long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) | |||||||
|     default: return -1; |     default: return -1; | ||||||
|     } |     } | ||||||
|     ret = 0; |     ret = 0; | ||||||
|     fseek((FILE *)stream, offset, fseek_origin); |     if (fseek((FILE *)stream, offset, fseek_origin) != 0) | ||||||
|  |         ret = -1; | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| int ZCALLBACK fclose_file_func (opaque, stream) | static long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin) | ||||||
|    voidpf opaque; | { | ||||||
|    voidpf stream; |     int fseek_origin=0; | ||||||
|  |     long ret; | ||||||
|  |     switch (origin) | ||||||
|  |     { | ||||||
|  |     case ZLIB_FILEFUNC_SEEK_CUR : | ||||||
|  |         fseek_origin = SEEK_CUR; | ||||||
|  |         break; | ||||||
|  |     case ZLIB_FILEFUNC_SEEK_END : | ||||||
|  |         fseek_origin = SEEK_END; | ||||||
|  |         break; | ||||||
|  |     case ZLIB_FILEFUNC_SEEK_SET : | ||||||
|  |         fseek_origin = SEEK_SET; | ||||||
|  |         break; | ||||||
|  |     default: return -1; | ||||||
|  |     } | ||||||
|  |     ret = 0; | ||||||
|  |  | ||||||
|  |     if(fseeko64((FILE *)stream, offset, fseek_origin) != 0) | ||||||
|  | 			ret = -1; | ||||||
|  |  | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) | ||||||
| { | { | ||||||
|     int ret; |     int ret; | ||||||
|     ret = fclose((FILE *)stream); |     ret = fclose((FILE *)stream); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| int ZCALLBACK ferror_file_func (opaque, stream) | static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) | ||||||
|    voidpf opaque; |  | ||||||
|    voidpf stream; |  | ||||||
| { | { | ||||||
|     int ret; |     int ret; | ||||||
|     ret = ferror((FILE *)stream); |     ret = ferror((FILE *)stream); | ||||||
| @@ -175,3 +221,15 @@ void fill_fopen_filefunc (pzlib_filefunc_def) | |||||||
|     pzlib_filefunc_def->zerror_file = ferror_file_func; |     pzlib_filefunc_def->zerror_file = ferror_file_func; | ||||||
|     pzlib_filefunc_def->opaque = NULL; |     pzlib_filefunc_def->opaque = NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def) | ||||||
|  | { | ||||||
|  |     pzlib_filefunc_def->zopen64_file = fopen64_file_func; | ||||||
|  |     pzlib_filefunc_def->zread_file = fread_file_func; | ||||||
|  |     pzlib_filefunc_def->zwrite_file = fwrite_file_func; | ||||||
|  |     pzlib_filefunc_def->ztell64_file = ftell64_file_func; | ||||||
|  |     pzlib_filefunc_def->zseek64_file = fseek64_file_func; | ||||||
|  |     pzlib_filefunc_def->zclose_file = fclose_file_func; | ||||||
|  |     pzlib_filefunc_def->zerror_file = ferror_file_func; | ||||||
|  |     pzlib_filefunc_def->opaque = NULL; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1,13 +1,98 @@ | |||||||
| /* ioapi.h -- IO base function header for compress/uncompress .zip | /* ioapi.h -- IO base function header for compress/uncompress .zip | ||||||
|    files using zlib + zip or unzip API |    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Version 1.01, May 8th, 2004 | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support  | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
|  |  | ||||||
|  | 	 For more info read MiniZip_info.txt | ||||||
|  |  | ||||||
|  | 	 Changes | ||||||
|  |  | ||||||
|  |     Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this) | ||||||
|  |     Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. | ||||||
|  |                More if/def section may be needed to support other platforms | ||||||
|  |     Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.  | ||||||
|  | 		          (but you should use iowin32.c for windows instead) | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
| #ifndef _ZLIBIOAPI_H | #ifndef _ZLIBIOAPI64_H | ||||||
| #define _ZLIBIOAPI_H | #define _ZLIBIOAPI64_H | ||||||
|  |  | ||||||
|  | #ifndef _WIN32  | ||||||
|  |  | ||||||
|  |   // Linux needs this to support file operation on files larger then 4+GB | ||||||
|  |   // But might need better if/def to select just the platforms that needs them. | ||||||
|  |  | ||||||
|  | 	#ifndef __USE_FILE_OFFSET64 | ||||||
|  | 		#define __USE_FILE_OFFSET64 | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef __USE_LARGEFILE64 | ||||||
|  | 		#define __USE_LARGEFILE64 | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef _LARGEFILE64_SOURCE | ||||||
|  | 		#define _LARGEFILE64_SOURCE | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef _FILE_OFFSET_BIT | ||||||
|  | 		#define _FILE_OFFSET_BIT 64 | ||||||
|  | 	#endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include "zlib.h" | ||||||
|  |  | ||||||
|  | #ifdef _MSC_VER | ||||||
|  |  #define fopen64 fopen | ||||||
|  |  #if _MSC_VER >= 1400 | ||||||
|  |   #define ftello64 _ftelli64 | ||||||
|  |   #define fseeko64 _fseeki64 | ||||||
|  |  #else // old MSC | ||||||
|  |   #define ftello64 ftell | ||||||
|  |   #define fseeko64 fseek | ||||||
|  |  #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | #ifndef ZPOS64_T | ||||||
|  |   #ifdef _WIN32 | ||||||
|  | 		#define ZPOS64_T fpos_t | ||||||
|  |   #else | ||||||
|  |     #include <stdint.h>       	 | ||||||
|  |     #define ZPOS64_T uint64_t | ||||||
|  |   #endif | ||||||
|  | #endif | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | #ifdef HAVE_MINIZIP64_CONF_H | ||||||
|  | #include "mz64conf.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* a type choosen by DEFINE */ | ||||||
|  | #ifdef HAVE_64BIT_INT_CUSTOM | ||||||
|  | typedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T; | ||||||
|  | #else | ||||||
|  | #ifdef HAS_STDINT_H | ||||||
|  | #include "stdint.h" | ||||||
|  | typedef uint64_t ZPOS64_T; | ||||||
|  | #else | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #if defined(_MSC_VER) || defined(__BORLANDC__) | ||||||
|  | typedef unsigned __int64 ZPOS64_T; | ||||||
|  | #else | ||||||
|  | typedef unsigned long long int ZPOS64_T; | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #define ZLIB_FILEFUNC_SEEK_CUR (1) | #define ZLIB_FILEFUNC_SEEK_CUR (1) | ||||||
| @@ -23,26 +108,27 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #ifndef ZCALLBACK | #ifndef ZCALLBACK | ||||||
|  |  #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) | ||||||
| #if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) |    #define ZCALLBACK CALLBACK | ||||||
| #define ZCALLBACK CALLBACK |  #else | ||||||
| #else |    #define ZCALLBACK | ||||||
| #define ZCALLBACK |  #endif | ||||||
| #endif |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| typedef voidpf   (ZCALLBACK *open_file_func)      OF((voidpf opaque, const char* filename, int mode)); | typedef voidpf   (ZCALLBACK *open_file_func)      OF((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)      OF((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)     OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); | ||||||
| typedef long   (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); |  | ||||||
| typedef long   (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); |  | ||||||
| typedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream)); | typedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream)); | ||||||
| typedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); | typedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); | ||||||
|  |  | ||||||
|  | typedef long     (ZCALLBACK *tell_file_func)      OF((voidpf opaque, voidpf stream)); | ||||||
|  | typedef long     (ZCALLBACK *seek_file_func)      OF((voidpf opaque, voidpf stream, uLong offset, int origin)); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* here is the "old" 32 bits structure structure */ | ||||||
| typedef struct zlib_filefunc_def_s | typedef struct zlib_filefunc_def_s | ||||||
| { | { | ||||||
|     open_file_func      zopen_file; |     open_file_func      zopen_file; | ||||||
| @@ -55,21 +141,54 @@ 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 long     (ZCALLBACK *seek64_file_func)    OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); | ||||||
|  | typedef voidpf   (ZCALLBACK *open64_file_func)    OF((voidpf opaque, const void* filename, int mode)); | ||||||
|  |  | ||||||
|  | typedef struct zlib_filefunc64_def_s | ||||||
|  | { | ||||||
|  |     open64_file_func    zopen64_file; | ||||||
|  |     read_file_func      zread_file; | ||||||
|  |     write_file_func     zwrite_file; | ||||||
|  |     tell64_file_func    ztell64_file; | ||||||
|  |     seek64_file_func    zseek64_file; | ||||||
|  |     close_file_func     zclose_file; | ||||||
|  |     testerror_file_func zerror_file; | ||||||
|  |     voidpf              opaque; | ||||||
|  | } zlib_filefunc64_def; | ||||||
|  |  | ||||||
|  | void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def)); | ||||||
| void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); | void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); | ||||||
|  |  | ||||||
| #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) | /* now internal definition, only for zip.c and unzip.h */ | ||||||
| #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) | typedef struct zlib_filefunc64_32_def_s | ||||||
| #define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) | { | ||||||
| #define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) |     zlib_filefunc64_def zfile_func64; | ||||||
| #define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) |     open_file_func      zopen32_file; | ||||||
| #define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) |     tell_file_func      ztell32_file; | ||||||
|  |     seek_file_func      zseek32_file; | ||||||
|  | } zlib_filefunc64_32_def; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #define ZREAD64(filefunc,filestream,buf,size)     ((*((filefunc).zfile_func64.zread_file))   ((filefunc).zfile_func64.opaque,filestream,buf,size)) | ||||||
|  | #define ZWRITE64(filefunc,filestream,buf,size)    ((*((filefunc).zfile_func64.zwrite_file))  ((filefunc).zfile_func64.opaque,filestream,buf,size)) | ||||||
|  | //#define ZTELL64(filefunc,filestream)            ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream)) | ||||||
|  | //#define ZSEEK64(filefunc,filestream,pos,mode)   ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode)) | ||||||
|  | #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)) | ||||||
|  |  | ||||||
|  | voidpf call_zopen64 OF((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)); | ||||||
|  | ZPOS64_T call_ztell64 OF((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); | ||||||
|  |  | ||||||
|  | #define ZOPEN64(filefunc,filename,mode)         (call_zopen64((&(filefunc)),(filename),(mode))) | ||||||
|  | #define ZTELL64(filefunc,filestream)            (call_ztell64((&(filefunc)),(filestream))) | ||||||
|  | #define ZSEEK64(filefunc,filestream,pos,mode)   (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,10 +1,14 @@ | |||||||
| /* iowin32.c -- IO base function header for compress/uncompress .zip | /* iowin32.c -- IO base function header for compress/uncompress .zip | ||||||
|    files using zlib + zip or unzip API |      Version 1.1, January 7th, 2010 | ||||||
|    This IO API version uses the Win32 API (for Microsoft Windows) |      part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Version 1.01, May 8th, 2004 | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support  | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
|  |  | ||||||
|  |      For more info read MiniZip_info.txt | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| @@ -21,40 +25,13 @@ | |||||||
| #define INVALID_SET_FILE_POINTER ((DWORD)-1) | #define INVALID_SET_FILE_POINTER ((DWORD)-1) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| voidpf ZCALLBACK win32_open_file_func OF(( | voidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode)); | ||||||
|    voidpf opaque, | uLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size)); | ||||||
|    const char* filename, | uLong   ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); | ||||||
|    int mode)); | 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)); | ||||||
| uLong ZCALLBACK win32_read_file_func OF(( | int     ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream)); | ||||||
|    voidpf opaque, | int     ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream)); | ||||||
|    voidpf stream, |  | ||||||
|    void* buf, |  | ||||||
|    uLong size)); |  | ||||||
|  |  | ||||||
| uLong ZCALLBACK win32_write_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream, |  | ||||||
|    const void* buf, |  | ||||||
|    uLong size)); |  | ||||||
|  |  | ||||||
| long ZCALLBACK win32_tell_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream)); |  | ||||||
|  |  | ||||||
| long ZCALLBACK win32_seek_file_func OF(( |  | ||||||
|    voidpf opaque, |  | ||||||
|    voidpf stream, |  | ||||||
|    uLong 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 | ||||||
| { | { | ||||||
| @@ -62,69 +39,121 @@ typedef struct | |||||||
|     int error; |     int error; | ||||||
| } WIN32FILE_IOWIN; | } WIN32FILE_IOWIN; | ||||||
|  |  | ||||||
| voidpf ZCALLBACK win32_open_file_func (opaque, filename, mode) |  | ||||||
|    voidpf opaque; |  | ||||||
|    const char* filename; |  | ||||||
|    int mode; |  | ||||||
| { |  | ||||||
|     const char* mode_fopen = NULL; |  | ||||||
|     DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; |  | ||||||
|     HANDLE hFile = 0; |  | ||||||
|     voidpf ret=NULL; |  | ||||||
|  |  | ||||||
|     dwDesiredAccess = dwShareMode = dwFlagsAndAttributes = 0; | static void win32_translate_open_mode(int mode, | ||||||
|  |                                       DWORD* lpdwDesiredAccess, | ||||||
|  |                                       DWORD* lpdwCreationDisposition, | ||||||
|  |                                       DWORD* lpdwShareMode, | ||||||
|  |                                       DWORD* lpdwFlagsAndAttributes) | ||||||
|  | { | ||||||
|  |     *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) | ||||||
|     { |     { | ||||||
|         dwDesiredAccess = GENERIC_READ; |         *lpdwDesiredAccess = GENERIC_READ; | ||||||
|         dwCreationDisposition = OPEN_EXISTING; |         *lpdwCreationDisposition = OPEN_EXISTING; | ||||||
|         dwShareMode = FILE_SHARE_READ; |         *lpdwShareMode = FILE_SHARE_READ; | ||||||
|     } |     } | ||||||
|     else |     else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) | ||||||
|     if (mode & ZLIB_FILEFUNC_MODE_EXISTING) |  | ||||||
|     { |     { | ||||||
|         dwDesiredAccess = GENERIC_WRITE | GENERIC_READ; |         *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; | ||||||
|         dwCreationDisposition = OPEN_EXISTING; |         *lpdwCreationDisposition = OPEN_EXISTING; | ||||||
|     } |     } | ||||||
|     else |     else if (mode & ZLIB_FILEFUNC_MODE_CREATE) | ||||||
|     if (mode & ZLIB_FILEFUNC_MODE_CREATE) |  | ||||||
|     { |     { | ||||||
|         dwDesiredAccess = GENERIC_WRITE | GENERIC_READ; |         *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; | ||||||
|         dwCreationDisposition = CREATE_ALWAYS; |         *lpdwCreationDisposition = CREATE_ALWAYS; | ||||||
|     } |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|     if ((filename!=NULL) && (dwDesiredAccess != 0)) | static voidpf win32_build_iowin(HANDLE hFile) | ||||||
|         hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, | { | ||||||
|                       dwCreationDisposition, dwFlagsAndAttributes, NULL); |     voidpf ret=NULL; | ||||||
|  |  | ||||||
|     if (hFile == INVALID_HANDLE_VALUE) |     if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) | ||||||
|         hFile = NULL; |  | ||||||
|  |  | ||||||
|     if (hFile != NULL) |  | ||||||
|     { |     { | ||||||
|         WIN32FILE_IOWIN w32fiow; |         WIN32FILE_IOWIN w32fiow; | ||||||
|         w32fiow.hf = hFile; |         w32fiow.hf = hFile; | ||||||
|         w32fiow.error = 0; |         w32fiow.error = 0; | ||||||
|         ret = malloc(sizeof(WIN32FILE_IOWIN)); |         ret = malloc(sizeof(WIN32FILE_IOWIN)); | ||||||
|  |  | ||||||
|         if (ret==NULL) |         if (ret==NULL) | ||||||
|             CloseHandle(hFile); |             CloseHandle(hFile); | ||||||
|         else *((WIN32FILE_IOWIN*)ret) = w32fiow; |         else | ||||||
|  |             *((WIN32FILE_IOWIN*)ret) = w32fiow; | ||||||
|     } |     } | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode) | ||||||
|  | { | ||||||
|  |     const char* mode_fopen = NULL; | ||||||
|  |     DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; | ||||||
|  |     HANDLE hFile = NULL; | ||||||
|  |  | ||||||
| uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size) |     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); | ||||||
|    voidpf opaque; |  | ||||||
|    voidpf stream; |     if ((filename!=NULL) && (dwDesiredAccess != 0)) | ||||||
|    void* buf; |         hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); | ||||||
|    uLong size; |  | ||||||
|  |     return win32_build_iowin(hFile); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode) | ||||||
|  | { | ||||||
|  |     const char* mode_fopen = NULL; | ||||||
|  |     DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; | ||||||
|  |     HANDLE hFile = NULL; | ||||||
|  |  | ||||||
|  |     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); | ||||||
|  |  | ||||||
|  |     if ((filename!=NULL) && (dwDesiredAccess != 0)) | ||||||
|  |         hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); | ||||||
|  |  | ||||||
|  |     return win32_build_iowin(hFile); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode) | ||||||
|  | { | ||||||
|  |     const char* mode_fopen = NULL; | ||||||
|  |     DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; | ||||||
|  |     HANDLE hFile = NULL; | ||||||
|  |  | ||||||
|  |     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); | ||||||
|  |  | ||||||
|  |     if ((filename!=NULL) && (dwDesiredAccess != 0)) | ||||||
|  |         hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); | ||||||
|  |  | ||||||
|  |     return win32_build_iowin(hFile); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode) | ||||||
|  | { | ||||||
|  |     const char* mode_fopen = NULL; | ||||||
|  |     DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; | ||||||
|  |     HANDLE hFile = NULL; | ||||||
|  |  | ||||||
|  |     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); | ||||||
|  |  | ||||||
|  |     if ((filename!=NULL) && (dwDesiredAccess != 0)) | ||||||
|  |         hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); | ||||||
|  |  | ||||||
|  |     return win32_build_iowin(hFile); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 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) | ||||||
|         hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |         hFile = ((WIN32FILE_IOWIN*)stream) -> hf; | ||||||
|  |  | ||||||
|     if (hFile != NULL) |     if (hFile != NULL) | ||||||
|  |     { | ||||||
|         if (!ReadFile(hFile, buf, size, &ret, NULL)) |         if (!ReadFile(hFile, buf, size, &ret, NULL)) | ||||||
|         { |         { | ||||||
|             DWORD dwErr = GetLastError(); |             DWORD dwErr = GetLastError(); | ||||||
| @@ -132,23 +161,21 @@ uLong ZCALLBACK win32_read_file_func (opaque, stream, buf, size) | |||||||
|                 dwErr = 0; |                 dwErr = 0; | ||||||
|             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; | ||||||
|         } |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size) | uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size) | ||||||
|    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) | ||||||
|         hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |         hFile = ((WIN32FILE_IOWIN*)stream) -> hf; | ||||||
|  |  | ||||||
|     if (hFile !=NULL) |     if (hFile != NULL) | ||||||
|  |     { | ||||||
|         if (!WriteFile(hFile, buf, size, &ret, NULL)) |         if (!WriteFile(hFile, buf, size, &ret, NULL)) | ||||||
|         { |         { | ||||||
|             DWORD dwErr = GetLastError(); |             DWORD dwErr = GetLastError(); | ||||||
| @@ -156,13 +183,12 @@ uLong ZCALLBACK win32_write_file_func (opaque, stream, buf, size) | |||||||
|                 dwErr = 0; |                 dwErr = 0; | ||||||
|             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; | ||||||
|         } |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| long ZCALLBACK win32_tell_file_func (opaque, stream) | long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream) | ||||||
|    voidpf opaque; |  | ||||||
|    voidpf stream; |  | ||||||
| { | { | ||||||
|     long ret=-1; |     long ret=-1; | ||||||
|     HANDLE hFile = NULL; |     HANDLE hFile = NULL; | ||||||
| @@ -183,11 +209,32 @@ long ZCALLBACK win32_tell_file_func (opaque, stream) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin) | ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream) | ||||||
|    voidpf opaque; | { | ||||||
|    voidpf stream; |     ZPOS64_T ret= (ZPOS64_T)-1; | ||||||
|    uLong offset; |     HANDLE hFile = NULL; | ||||||
|    int origin; |     if (stream!=NULL) | ||||||
|  |         hFile = ((WIN32FILE_IOWIN*)stream)->hf; | ||||||
|  |  | ||||||
|  |     if (hFile) | ||||||
|  |     { | ||||||
|  |         LARGE_INTEGER li; | ||||||
|  |         li.QuadPart = 0; | ||||||
|  |         li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT); | ||||||
|  |         if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR)) | ||||||
|  |         { | ||||||
|  |             DWORD dwErr = GetLastError(); | ||||||
|  |             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; | ||||||
|  |             ret = (ZPOS64_T)-1; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |             ret=li.QuadPart; | ||||||
|  |     } | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 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; | ||||||
| @@ -224,9 +271,46 @@ long ZCALLBACK win32_seek_file_func (opaque, stream, offset, origin) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| int ZCALLBACK win32_close_file_func (opaque, stream) | long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin) | ||||||
|    voidpf opaque; | { | ||||||
|    voidpf stream; |     DWORD dwMoveMethod=0xFFFFFFFF; | ||||||
|  |     HANDLE hFile = NULL; | ||||||
|  |     long ret=-1; | ||||||
|  |  | ||||||
|  |     if (stream!=NULL) | ||||||
|  |         hFile = ((WIN32FILE_IOWIN*)stream)->hf; | ||||||
|  |  | ||||||
|  |     switch (origin) | ||||||
|  |     { | ||||||
|  |         case ZLIB_FILEFUNC_SEEK_CUR : | ||||||
|  |             dwMoveMethod = FILE_CURRENT; | ||||||
|  |             break; | ||||||
|  |         case ZLIB_FILEFUNC_SEEK_END : | ||||||
|  |             dwMoveMethod = FILE_END; | ||||||
|  |             break; | ||||||
|  |         case ZLIB_FILEFUNC_SEEK_SET : | ||||||
|  |             dwMoveMethod = FILE_BEGIN; | ||||||
|  |             break; | ||||||
|  |         default: return -1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (hFile) | ||||||
|  |     { | ||||||
|  |         LARGE_INTEGER* li = (LARGE_INTEGER*)&offset; | ||||||
|  |         DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod); | ||||||
|  |         if (dwSet == INVALID_SET_FILE_POINTER) | ||||||
|  |         { | ||||||
|  |             DWORD dwErr = GetLastError(); | ||||||
|  |             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; | ||||||
|  |             ret = -1; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |             ret=0; | ||||||
|  |     } | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream) | ||||||
| { | { | ||||||
|     int ret=-1; |     int ret=-1; | ||||||
|  |  | ||||||
| @@ -244,9 +328,7 @@ int ZCALLBACK win32_close_file_func (opaque, stream) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| int ZCALLBACK win32_error_file_func (opaque, stream) | int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream) | ||||||
|    voidpf opaque; |  | ||||||
|    voidpf stream; |  | ||||||
| { | { | ||||||
|     int ret=-1; |     int ret=-1; | ||||||
|     if (stream!=NULL) |     if (stream!=NULL) | ||||||
| @@ -256,8 +338,7 @@ int ZCALLBACK win32_error_file_func (opaque, stream) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| void fill_win32_filefunc (pzlib_filefunc_def) | void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def) | ||||||
|   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; | ||||||
| @@ -266,5 +347,43 @@ void fill_win32_filefunc (pzlib_filefunc_def) | |||||||
|     pzlib_filefunc_def->zseek_file = win32_seek_file_func; |     pzlib_filefunc_def->zseek_file = win32_seek_file_func; | ||||||
|     pzlib_filefunc_def->zclose_file = win32_close_file_func; |     pzlib_filefunc_def->zclose_file = win32_close_file_func; | ||||||
|     pzlib_filefunc_def->zerror_file = win32_error_file_func; |     pzlib_filefunc_def->zerror_file = win32_error_file_func; | ||||||
|     pzlib_filefunc_def->opaque=NULL; |     pzlib_filefunc_def->opaque = NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) | ||||||
|  | { | ||||||
|  |     pzlib_filefunc_def->zopen64_file = win32_open64_file_func; | ||||||
|  |     pzlib_filefunc_def->zread_file = win32_read_file_func; | ||||||
|  |     pzlib_filefunc_def->zwrite_file = win32_write_file_func; | ||||||
|  |     pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; | ||||||
|  |     pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; | ||||||
|  |     pzlib_filefunc_def->zclose_file = win32_close_file_func; | ||||||
|  |     pzlib_filefunc_def->zerror_file = win32_error_file_func; | ||||||
|  |     pzlib_filefunc_def->opaque = NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) | ||||||
|  | { | ||||||
|  |     pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; | ||||||
|  |     pzlib_filefunc_def->zread_file = win32_read_file_func; | ||||||
|  |     pzlib_filefunc_def->zwrite_file = win32_write_file_func; | ||||||
|  |     pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; | ||||||
|  |     pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; | ||||||
|  |     pzlib_filefunc_def->zclose_file = win32_close_file_func; | ||||||
|  |     pzlib_filefunc_def->zerror_file = win32_error_file_func; | ||||||
|  |     pzlib_filefunc_def->opaque = NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) | ||||||
|  | { | ||||||
|  |     pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; | ||||||
|  |     pzlib_filefunc_def->zread_file = win32_read_file_func; | ||||||
|  |     pzlib_filefunc_def->zwrite_file = win32_write_file_func; | ||||||
|  |     pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; | ||||||
|  |     pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; | ||||||
|  |     pzlib_filefunc_def->zclose_file = win32_close_file_func; | ||||||
|  |     pzlib_filefunc_def->zerror_file = win32_error_file_func; | ||||||
|  |     pzlib_filefunc_def->opaque = NULL; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,10 +1,14 @@ | |||||||
| /* iowin32.h -- IO base function header for compress/uncompress .zip | /* iowin32.h -- IO base function header for compress/uncompress .zip | ||||||
|    files using zlib + zip or unzip API |      Version 1.1, January 7th, 2010 | ||||||
|    This IO API version uses the Win32 API (for Microsoft Windows) |      part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Version 1.01, May 8th, 2004 | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support  | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
|  |  | ||||||
|  | 	 For more info read MiniZip_info.txt | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| @@ -15,6 +19,9 @@ extern "C" { | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); | void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); | ||||||
|  | void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def)); | ||||||
|  | void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def)); | ||||||
|  | void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def)); | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,10 +1,31 @@ | |||||||
| /* | /* | ||||||
|    miniunz.c |    miniunz.c | ||||||
|    Version 1.01b, May 30th, 2004 |    Version 1.1, January 7th, 2010 | ||||||
|  |    sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | 	 Modifications of Unzip for Zip64 | ||||||
|  | 	 Copyright (C) 2007-2008 Even Rouault | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support on both zip and unzip | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  | #ifndef _WIN32  | ||||||
|  | 	#ifndef __USE_FILE_OFFSET64 | ||||||
|  | 		#define __USE_FILE_OFFSET64 | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef __USE_LARGEFILE64 | ||||||
|  | 		#define __USE_LARGEFILE64 | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef _LARGEFILE64_SOURCE | ||||||
|  | 		#define _LARGEFILE64_SOURCE | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef _FILE_OFFSET_BIT | ||||||
|  | 		#define _FILE_OFFSET_BIT 64 | ||||||
|  | 	#endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| @@ -27,7 +48,7 @@ | |||||||
| #define WRITEBUFFERSIZE (8192) | #define WRITEBUFFERSIZE (8192) | ||||||
| #define MAXFILENAME (256) | #define MAXFILENAME (256) | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef _WIN32 | ||||||
| #define USEWIN32IOAPI | #define USEWIN32IOAPI | ||||||
| #include "iowin32.h" | #include "iowin32.h" | ||||||
| #endif | #endif | ||||||
| @@ -51,11 +72,11 @@ void change_file_date(filename,dosdate,tmu_date) | |||||||
|     uLong dosdate; |     uLong dosdate; | ||||||
|     tm_unz tmu_date; |     tm_unz tmu_date; | ||||||
| { | { | ||||||
| #ifdef WIN32 | #ifdef _WIN32 | ||||||
|   HANDLE hFile; |   HANDLE hFile; | ||||||
|   FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; |   FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; | ||||||
|  |  | ||||||
|   hFile = CreateFile(filename,GENERIC_READ | GENERIC_WRITE, |   hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE, | ||||||
|                       0,NULL,OPEN_EXISTING,0,NULL); |                       0,NULL,OPEN_EXISTING,0,NULL); | ||||||
|   GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); |   GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); | ||||||
|   DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); |   DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); | ||||||
| @@ -91,8 +112,8 @@ int mymkdir(dirname) | |||||||
|     const char* dirname; |     const char* dirname; | ||||||
| { | { | ||||||
|     int ret=0; |     int ret=0; | ||||||
| #ifdef WIN32 | #ifdef _WIN32 | ||||||
|     ret = mkdir(dirname); |     ret = _mkdir(dirname); | ||||||
| #else | #else | ||||||
| #ifdef unix | #ifdef unix | ||||||
|     ret = mkdir (dirname,0775); |     ret = mkdir (dirname,0775); | ||||||
| @@ -112,6 +133,11 @@ int makedir (newdir) | |||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   buffer = (char*)malloc(len+1); |   buffer = (char*)malloc(len+1); | ||||||
|  | 	if (buffer==NULL) | ||||||
|  | 	{ | ||||||
|  | 		printf("Error allocating memory\n"); | ||||||
|  | 		return UNZ_INTERNALERROR; | ||||||
|  | 	} | ||||||
|   strcpy(buffer,newdir); |   strcpy(buffer,newdir); | ||||||
|  |  | ||||||
|   if (buffer[len-1] == '/') { |   if (buffer[len-1] == '/') { | ||||||
| @@ -164,15 +190,42 @@ void do_help() | |||||||
|            "  -p  extract crypted file using password\n\n"); |            "  -p  extract crypted file using password\n\n"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void Display64BitsSize(ZPOS64_T n, int size_char) | ||||||
|  | { | ||||||
|  |   /* to avoid compatibility problem , we do here the conversion */ | ||||||
|  |   char number[21]; | ||||||
|  |   int offset=19; | ||||||
|  |   int pos_string = 19; | ||||||
|  |   number[20]=0; | ||||||
|  |   for (;;) { | ||||||
|  |       number[offset]=(char)((n%10)+'0'); | ||||||
|  |       if (number[offset] != '0') | ||||||
|  |           pos_string=offset; | ||||||
|  |       n/=10; | ||||||
|  |       if (offset==0) | ||||||
|  |           break; | ||||||
|  |       offset--; | ||||||
|  |   } | ||||||
|  |   { | ||||||
|  |       int size_display_string = 19-pos_string; | ||||||
|  |       while (size_char > size_display_string) | ||||||
|  |       { | ||||||
|  |           size_char--; | ||||||
|  |           printf(" "); | ||||||
|  |       } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   printf("%s",&number[pos_string]); | ||||||
|  | } | ||||||
|  |  | ||||||
| int do_list(uf) | int do_list(uf) | ||||||
|     unzFile uf; |     unzFile uf; | ||||||
| { | { | ||||||
|     uLong i; |     uLong i; | ||||||
|     unz_global_info gi; |     unz_global_info64 gi; | ||||||
|     int err; |     int err; | ||||||
|  |  | ||||||
|     err = unzGetGlobalInfo (uf,&gi); |     err = unzGetGlobalInfo64(uf,&gi); | ||||||
|     if (err!=UNZ_OK) |     if (err!=UNZ_OK) | ||||||
|         printf("error %d with zipfile in unzGetGlobalInfo \n",err); |         printf("error %d with zipfile in unzGetGlobalInfo \n",err); | ||||||
|     printf("  Length  Method     Size Ratio   Date    Time   CRC-32     Name\n"); |     printf("  Length  Method     Size Ratio   Date    Time   CRC-32     Name\n"); | ||||||
| @@ -180,18 +233,18 @@ int do_list(uf) | |||||||
|     for (i=0;i<gi.number_entry;i++) |     for (i=0;i<gi.number_entry;i++) | ||||||
|     { |     { | ||||||
|         char filename_inzip[256]; |         char filename_inzip[256]; | ||||||
|         unz_file_info 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 = unzGetCurrentFileInfo(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) | ||||||
|         { |         { | ||||||
|             printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); |             printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         if (file_info.uncompressed_size>0) |         if (file_info.uncompressed_size>0) | ||||||
|             ratio = (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 crypted */ | ||||||
|         if ((file_info.flag & 1) != 0) |         if ((file_info.flag & 1) != 0) | ||||||
| @@ -210,13 +263,18 @@ int do_list(uf) | |||||||
|             else if ((iLevel==2) || (iLevel==3)) |             else if ((iLevel==2) || (iLevel==3)) | ||||||
|               string_method="Defl:F"; /* 2:fast , 3 : extra fast*/ |               string_method="Defl:F"; /* 2:fast , 3 : extra fast*/ | ||||||
|         } |         } | ||||||
|  |         else | ||||||
|  |         if (file_info.compression_method==Z_BZIP2ED) | ||||||
|  |         { | ||||||
|  |               string_method="BZip2 "; | ||||||
|  |         } | ||||||
|         else |         else | ||||||
|             string_method="Unkn. "; |             string_method="Unkn. "; | ||||||
|  |  | ||||||
|         printf("%7lu  %6s%c%7lu %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\n", |         Display64BitsSize(file_info.uncompressed_size,7); | ||||||
|                 file_info.uncompressed_size,string_method, |         printf("  %6s%c",string_method,charCrypt); | ||||||
|                 charCrypt, |         Display64BitsSize(file_info.compressed_size,7); | ||||||
|                 file_info.compressed_size, |         printf(" %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\n", | ||||||
|                 ratio, |                 ratio, | ||||||
|                 (uLong)file_info.tmu_date.tm_mon + 1, |                 (uLong)file_info.tmu_date.tm_mon + 1, | ||||||
|                 (uLong)file_info.tmu_date.tm_mday, |                 (uLong)file_info.tmu_date.tm_mday, | ||||||
| @@ -252,9 +310,9 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) | |||||||
|     void* buf; |     void* buf; | ||||||
|     uInt size_buf; |     uInt size_buf; | ||||||
|  |  | ||||||
|     unz_file_info file_info; |     unz_file_info64 file_info; | ||||||
|     uLong ratio=0; |     uLong ratio=0; | ||||||
|     err = unzGetCurrentFileInfo(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) | ||||||
|     { |     { | ||||||
| @@ -306,7 +364,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) | |||||||
|         { |         { | ||||||
|             char rep=0; |             char rep=0; | ||||||
|             FILE* ftestexist; |             FILE* ftestexist; | ||||||
|             ftestexist = fopen(write_filename,"rb"); |             ftestexist = fopen64(write_filename,"rb"); | ||||||
|             if (ftestexist!=NULL) |             if (ftestexist!=NULL) | ||||||
|             { |             { | ||||||
|                 fclose(ftestexist); |                 fclose(ftestexist); | ||||||
| @@ -337,7 +395,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) | |||||||
|  |  | ||||||
|         if ((skip==0) && (err==UNZ_OK)) |         if ((skip==0) && (err==UNZ_OK)) | ||||||
|         { |         { | ||||||
|             fout=fopen(write_filename,"wb"); |             fout=fopen64(write_filename,"wb"); | ||||||
|  |  | ||||||
|             /* some zipfile don't contain directory alone before file */ |             /* some zipfile don't contain directory alone before file */ | ||||||
|             if ((fout==NULL) && ((*popt_extract_without_path)==0) && |             if ((fout==NULL) && ((*popt_extract_without_path)==0) && | ||||||
| @@ -347,7 +405,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) | |||||||
|                 *(filename_withoutpath-1)='\0'; |                 *(filename_withoutpath-1)='\0'; | ||||||
|                 makedir(write_filename); |                 makedir(write_filename); | ||||||
|                 *(filename_withoutpath-1)=c; |                 *(filename_withoutpath-1)=c; | ||||||
|                 fout=fopen(write_filename,"wb"); |                 fout=fopen64(write_filename,"wb"); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (fout==NULL) |             if (fout==NULL) | ||||||
| @@ -409,11 +467,11 @@ int do_extract(uf,opt_extract_without_path,opt_overwrite,password) | |||||||
|     const char* password; |     const char* password; | ||||||
| { | { | ||||||
|     uLong i; |     uLong i; | ||||||
|     unz_global_info gi; |     unz_global_info64 gi; | ||||||
|     int err; |     int err; | ||||||
|     FILE* fout=NULL; |     FILE* fout=NULL; | ||||||
|  |  | ||||||
|     err = unzGetGlobalInfo (uf,&gi); |     err = unzGetGlobalInfo64(uf,&gi); | ||||||
|     if (err!=UNZ_OK) |     if (err!=UNZ_OK) | ||||||
|         printf("error %d with zipfile in unzGetGlobalInfo \n",err); |         printf("error %d with zipfile in unzGetGlobalInfo \n",err); | ||||||
|  |  | ||||||
| @@ -470,6 +528,7 @@ int main(argc,argv) | |||||||
|     const char *password=NULL; |     const char *password=NULL; | ||||||
|     char filename_try[MAXFILENAME+16] = ""; |     char filename_try[MAXFILENAME+16] = ""; | ||||||
|     int i; |     int i; | ||||||
|  |     int ret_value=0; | ||||||
|     int opt_do_list=0; |     int opt_do_list=0; | ||||||
|     int opt_do_extract=1; |     int opt_do_extract=1; | ||||||
|     int opt_do_extract_withoutpath=0; |     int opt_do_extract_withoutpath=0; | ||||||
| @@ -532,7 +591,7 @@ int main(argc,argv) | |||||||
|     { |     { | ||||||
|  |  | ||||||
| #        ifdef USEWIN32IOAPI | #        ifdef USEWIN32IOAPI | ||||||
|         zlib_filefunc_def ffunc; |         zlib_filefunc64_def ffunc; | ||||||
| #        endif | #        endif | ||||||
|  |  | ||||||
|         strncpy(filename_try, zipfilename,MAXFILENAME-1); |         strncpy(filename_try, zipfilename,MAXFILENAME-1); | ||||||
| @@ -540,18 +599,18 @@ int main(argc,argv) | |||||||
|         filename_try[ MAXFILENAME ] = '\0'; |         filename_try[ MAXFILENAME ] = '\0'; | ||||||
|  |  | ||||||
| #        ifdef USEWIN32IOAPI | #        ifdef USEWIN32IOAPI | ||||||
|         fill_win32_filefunc(&ffunc); |         fill_win32_filefunc64A(&ffunc); | ||||||
|         uf = unzOpen2(zipfilename,&ffunc); |         uf = unzOpen2_64(zipfilename,&ffunc); | ||||||
| #        else | #        else | ||||||
|         uf = unzOpen(zipfilename); |         uf = unzOpen64(zipfilename); | ||||||
| #        endif | #        endif | ||||||
|         if (uf==NULL) |         if (uf==NULL) | ||||||
|         { |         { | ||||||
|             strcat(filename_try,".zip"); |             strcat(filename_try,".zip"); | ||||||
| #            ifdef USEWIN32IOAPI | #            ifdef USEWIN32IOAPI | ||||||
|             uf = unzOpen2(filename_try,&ffunc); |             uf = unzOpen2_64(filename_try,&ffunc); | ||||||
| #            else | #            else | ||||||
|             uf = unzOpen(filename_try); |             uf = unzOpen64(filename_try); | ||||||
| #            endif | #            endif | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -564,22 +623,26 @@ int main(argc,argv) | |||||||
|     printf("%s opened\n",filename_try); |     printf("%s opened\n",filename_try); | ||||||
|  |  | ||||||
|     if (opt_do_list==1) |     if (opt_do_list==1) | ||||||
|         return do_list(uf); |         ret_value = do_list(uf); | ||||||
|     else if (opt_do_extract==1) |     else if (opt_do_extract==1) | ||||||
|     { |     { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |         if (opt_extractdir && _chdir(dirname))  | ||||||
|  | #else | ||||||
|         if (opt_extractdir && chdir(dirname))  |         if (opt_extractdir && chdir(dirname))  | ||||||
|  | #endif | ||||||
|         { |         { | ||||||
|           printf("Error changing into %s, aborting\n", dirname); |           printf("Error changing into %s, aborting\n", dirname); | ||||||
|           exit(-1); |           exit(-1); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (filename_to_extract == NULL) |         if (filename_to_extract == NULL) | ||||||
|             return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password); |             ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password); | ||||||
|         else |         else | ||||||
|             return do_extract_onefile(uf,filename_to_extract, |             ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password); | ||||||
|                                       opt_do_extract_withoutpath,opt_overwrite,password); |  | ||||||
|     } |     } | ||||||
|     unzCloseCurrentFile(uf); |  | ||||||
|  |  | ||||||
|     return 0; |     unzClose(uf); | ||||||
|  |  | ||||||
|  |     return ret_value; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,10 +1,33 @@ | |||||||
| /* | /* | ||||||
|    minizip.c |    minizip.c | ||||||
|    Version 1.01b, May 30th, 2004 |    Version 1.1, January 7th, 2010 | ||||||
|  |    sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|  | 	 Modifications of Unzip for Zip64 | ||||||
|  | 	 Copyright (C) 2007-2008 Even Rouault | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support on both zip and unzip | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef _WIN32  | ||||||
|  | 	#ifndef __USE_FILE_OFFSET64 | ||||||
|  | 		#define __USE_FILE_OFFSET64 | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef __USE_LARGEFILE64 | ||||||
|  | 		#define __USE_LARGEFILE64 | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef _LARGEFILE64_SOURCE | ||||||
|  | 		#define _LARGEFILE64_SOURCE | ||||||
|  | 	#endif | ||||||
|  | 	#ifndef _FILE_OFFSET_BIT | ||||||
|  | 		#define _FILE_OFFSET_BIT 64 | ||||||
|  | 	#endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| @@ -24,9 +47,9 @@ | |||||||
|  |  | ||||||
| #include "zip.h" | #include "zip.h" | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef _WIN32 | ||||||
| #define USEWIN32IOAPI | 	#define USEWIN32IOAPI | ||||||
| #include "iowin32.h" | 	#include "iowin32.h" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -34,7 +57,7 @@ | |||||||
| #define WRITEBUFFERSIZE (16384) | #define WRITEBUFFERSIZE (16384) | ||||||
| #define MAXFILENAME (256) | #define MAXFILENAME (256) | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef _WIN32 | ||||||
| uLong filetime(f, tmzip, dt) | uLong filetime(f, tmzip, dt) | ||||||
|     char *f;                /* name of file to get info on */ |     char *f;                /* name of file to get info on */ | ||||||
|     tm_zip *tmzip;             /* return value: access, modific. and creation times */ |     tm_zip *tmzip;             /* return value: access, modific. and creation times */ | ||||||
| @@ -44,9 +67,9 @@ uLong filetime(f, tmzip, dt) | |||||||
|   { |   { | ||||||
|       FILETIME ftLocal; |       FILETIME ftLocal; | ||||||
|       HANDLE hFind; |       HANDLE hFind; | ||||||
|       WIN32_FIND_DATA  ff32; |       WIN32_FIND_DATAA ff32; | ||||||
|  |  | ||||||
|       hFind = FindFirstFile(f,&ff32); |       hFind = FindFirstFileA(f,&ff32); | ||||||
|       if (hFind != INVALID_HANDLE_VALUE) |       if (hFind != INVALID_HANDLE_VALUE) | ||||||
|       { |       { | ||||||
|         FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); |         FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); | ||||||
| @@ -119,7 +142,7 @@ int check_exist_file(filename) | |||||||
| { | { | ||||||
|     FILE* ftestexist; |     FILE* ftestexist; | ||||||
|     int ret = 1; |     int ret = 1; | ||||||
|     ftestexist = fopen(filename,"rb"); |     ftestexist = fopen64(filename,"rb"); | ||||||
|     if (ftestexist==NULL) |     if (ftestexist==NULL) | ||||||
|         ret = 0; |         ret = 0; | ||||||
|     else |     else | ||||||
| @@ -129,18 +152,20 @@ int check_exist_file(filename) | |||||||
|  |  | ||||||
| void do_banner() | void do_banner() | ||||||
| { | { | ||||||
|     printf("MiniZip 1.01b, demo of zLib + Zip package written by Gilles Vollant\n"); |     printf("MiniZip64 1.0, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); | ||||||
|     printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); |     printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); | ||||||
|  |     printf("more info on MiniZip64 at http://result42.com/projects/MiniZip64\n\n"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void do_help() | void do_help() | ||||||
| { | { | ||||||
|     printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] 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" \ | ||||||
|            "  -0  Store only\n" \ |            "  -0  Store only\n" \ | ||||||
|            "  -1  Compress faster\n" \ |            "  -1  Compress faster\n" \ | ||||||
|            "  -9  Compress better\n\n"); |            "  -9  Compress better\n\n" \ | ||||||
|  |            "  -j  exclude path. store only the file name.\n\n"); | ||||||
| } | } | ||||||
|  |  | ||||||
| /* calculate the CRC32 of a file, | /* calculate the CRC32 of a file, | ||||||
| @@ -149,7 +174,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne | |||||||
| { | { | ||||||
|    unsigned long calculate_crc=0; |    unsigned long calculate_crc=0; | ||||||
|    int err=ZIP_OK; |    int err=ZIP_OK; | ||||||
|    FILE * fin = fopen(filenameinzip,"rb"); |    FILE * fin = fopen64(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) | ||||||
| @@ -179,10 +204,33 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne | |||||||
|         fclose(fin); |         fclose(fin); | ||||||
|  |  | ||||||
|     *result_crc=calculate_crc; |     *result_crc=calculate_crc; | ||||||
|     printf("file %s crc %x\n",filenameinzip,calculate_crc); |     printf("file %s crc %lx\n", filenameinzip, calculate_crc); | ||||||
|     return err; |     return err; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int isLargeFile(const char* filename) | ||||||
|  | { | ||||||
|  |   int largeFile = 0; | ||||||
|  |   ZPOS64_T pos = 0; | ||||||
|  |   FILE* pFile = fopen64(filename, "rb"); | ||||||
|  |  | ||||||
|  |   if(pFile != NULL) | ||||||
|  |   { | ||||||
|  |     int n = fseeko64(pFile, 0, SEEK_END); | ||||||
|  |  | ||||||
|  |     pos = ftello64(pFile); | ||||||
|  |      | ||||||
|  | 		printf("File : %s is %lld bytes\n", filename, pos); | ||||||
|  |      | ||||||
|  |     if(pos >= 0xffffffff) | ||||||
|  |      largeFile = 1; | ||||||
|  |  | ||||||
|  | 		fclose(pFile); | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |  return largeFile; | ||||||
|  | } | ||||||
|  |  | ||||||
| int main(argc,argv) | int main(argc,argv) | ||||||
|     int argc; |     int argc; | ||||||
|     char *argv[]; |     char *argv[]; | ||||||
| @@ -190,6 +238,7 @@ int main(argc,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; | ||||||
|  |     int opt_exclude_path=0; | ||||||
|     int zipfilenamearg = 0; |     int zipfilenamearg = 0; | ||||||
|     char filename_try[MAXFILENAME+16]; |     char filename_try[MAXFILENAME+16]; | ||||||
|     int zipok; |     int zipok; | ||||||
| @@ -222,6 +271,8 @@ int main(argc,argv) | |||||||
|                         opt_overwrite = 2; |                         opt_overwrite = 2; | ||||||
|                     if ((c>='0') && (c<='9')) |                     if ((c>='0') && (c<='9')) | ||||||
|                         opt_compress_level = c-'0'; |                         opt_compress_level = c-'0'; | ||||||
|  |                     if ((c=='j') || (c=='J')) | ||||||
|  |                         opt_exclude_path = 1; | ||||||
|  |  | ||||||
|                     if (((c=='p') || (c=='P')) && (i+1<argc)) |                     if (((c=='p') || (c=='P')) && (i+1<argc)) | ||||||
|                     { |                     { | ||||||
| @@ -231,10 +282,14 @@ int main(argc,argv) | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             else |             else | ||||||
|  |             { | ||||||
|                 if (zipfilenamearg == 0) |                 if (zipfilenamearg == 0) | ||||||
|  |                 { | ||||||
|                     zipfilenamearg = i ; |                     zipfilenamearg = i ; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     size_buf = WRITEBUFFERSIZE; |     size_buf = WRITEBUFFERSIZE; | ||||||
|     buf = (void*)malloc(size_buf); |     buf = (void*)malloc(size_buf); | ||||||
| @@ -245,7 +300,9 @@ int main(argc,argv) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (zipfilenamearg==0) |     if (zipfilenamearg==0) | ||||||
|  |     { | ||||||
|         zipok=0; |         zipok=0; | ||||||
|  |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         int i,len; |         int i,len; | ||||||
| @@ -302,11 +359,11 @@ int main(argc,argv) | |||||||
|         zipFile zf; |         zipFile zf; | ||||||
|         int errclose; |         int errclose; | ||||||
| #        ifdef USEWIN32IOAPI | #        ifdef USEWIN32IOAPI | ||||||
|         zlib_filefunc_def ffunc; |         zlib_filefunc64_def ffunc; | ||||||
|         fill_win32_filefunc(&ffunc); |         fill_win32_filefunc64A(&ffunc); | ||||||
|         zf = zipOpen2(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); |         zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); | ||||||
| #        else | #        else | ||||||
|         zf = zipOpen(filename_try,(opt_overwrite==2) ? 2 : 0); |         zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0); | ||||||
| #        endif | #        endif | ||||||
|  |  | ||||||
|         if (zf == NULL) |         if (zf == NULL) | ||||||
| @@ -329,8 +386,10 @@ int main(argc,argv) | |||||||
|                 FILE * fin; |                 FILE * fin; | ||||||
|                 int size_read; |                 int size_read; | ||||||
|                 const char* filenameinzip = argv[i]; |                 const char* filenameinzip = argv[i]; | ||||||
|  |                 const char *savefilenameinzip; | ||||||
|                 zip_fileinfo zi; |                 zip_fileinfo zi; | ||||||
|                 unsigned long crcFile=0; |                 unsigned long crcFile=0; | ||||||
|  |                 int zip64 = 0; | ||||||
|  |  | ||||||
|                 zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = |                 zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = | ||||||
|                 zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; |                 zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; | ||||||
| @@ -348,19 +407,48 @@ int main(argc,argv) | |||||||
|                 if ((password != NULL) && (err==ZIP_OK)) |                 if ((password != NULL) && (err==ZIP_OK)) | ||||||
|                     err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); |                     err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); | ||||||
|   |   | ||||||
|                 err = zipOpenNewFileInZip3(zf,filenameinzip,&zi, |                 zip64 = isLargeFile(filenameinzip); | ||||||
|  |  | ||||||
|  | 							 /* The path name saved, should not include a leading slash. */ | ||||||
|  |                /*if it did, windows/xp and dynazip couldn't read the zip file. */ | ||||||
|  |                  savefilenameinzip = filenameinzip; | ||||||
|  |                  while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' ) | ||||||
|  |                  { | ||||||
|  |                      savefilenameinzip++; | ||||||
|  |                  } | ||||||
|  |  | ||||||
|  |                  /*should the zip file contain any path at all?*/ | ||||||
|  |                  if( opt_exclude_path ) | ||||||
|  |                  { | ||||||
|  |                      const char *tmpptr; | ||||||
|  |                      const char *lastslash = 0; | ||||||
|  |                      for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++) | ||||||
|  |                      { | ||||||
|  |                          if( *tmpptr == '\\' || *tmpptr == '/') | ||||||
|  |                          { | ||||||
|  |                              lastslash = tmpptr; | ||||||
|  |                          } | ||||||
|  |                      } | ||||||
|  |                      if( lastslash != NULL ) | ||||||
|  |                      { | ||||||
|  |                          savefilenameinzip = lastslash+1; // base filename follows last slash. | ||||||
|  |                      } | ||||||
|  |                  } | ||||||
|  |  | ||||||
|  |                  /**/ | ||||||
|  |                 err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi, | ||||||
|                                  NULL,0,NULL,0,NULL /* comment*/, |                                  NULL,0,NULL,0,NULL /* comment*/, | ||||||
|                                  (opt_compress_level != 0) ? Z_DEFLATED : 0, |                                  (opt_compress_level != 0) ? Z_DEFLATED : 0, | ||||||
|                                  opt_compress_level,0, |                                  opt_compress_level,0, | ||||||
|                                  /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ |                                  /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ | ||||||
|                                  -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, |                                  -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, | ||||||
|                                  password,crcFile); |                                  password,crcFile, zip64); | ||||||
|  |  | ||||||
|                 if (err != ZIP_OK) |                 if (err != ZIP_OK) | ||||||
|                     printf("error in opening %s in zipfile\n",filenameinzip); |                     printf("error in opening %s in zipfile\n",filenameinzip); | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     fin = fopen(filenameinzip,"rb"); |                     fin = fopen64(filenameinzip,"rb"); | ||||||
|                     if (fin==NULL) |                     if (fin==NULL) | ||||||
|                     { |                     { | ||||||
|                         err=ZIP_ERRNO; |                         err=ZIP_ERRNO; | ||||||
|   | |||||||
| @@ -248,7 +248,7 @@ uLong* bytesRecovered; | |||||||
|       if (fpOutCD != NULL) { |       if (fpOutCD != NULL) { | ||||||
|         int nRead; |         int nRead; | ||||||
|         char buffer[8192]; |         char buffer[8192]; | ||||||
|         while ( (nRead = fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) { |         while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) { | ||||||
|           if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) { |           if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) { | ||||||
|             err = Z_ERRNO; |             err = Z_ERRNO; | ||||||
|             break; |             break; | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,16 +1,18 @@ | |||||||
| /* unzip.h -- IO for uncompress .zip files using zlib | /* unzip.h -- IO for uncompress .zip files using zlib | ||||||
|    Version 1.01, May 8th, 2004 |    Version 1.1, January 7th, 2010 | ||||||
|  |    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g | 	 Modifications of Unzip for Zip64 | ||||||
|      WinZip, InfoZip tools and compatible. | 	 Copyright (C) 2007-2008 Even Rouault | ||||||
|    Encryption and multi volume ZipFile (span) are not supported. |  | ||||||
|    Old compressions used by old PKZip 1.x are not supported |  | ||||||
|  |  | ||||||
|  | 	 Modifications for Zip64 support on both zip and unzip | ||||||
|  | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
|  |  | ||||||
|    I WAIT FEEDBACK at mail info@winimage.com | 	 For more info read MiniZip_info.txt | ||||||
|    Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution |  | ||||||
|  | 	 --------------------------------------------------------------------------------- | ||||||
|   |   | ||||||
| 	Condition of use and distribution are the same than zlib : | 	Condition of use and distribution are the same than zlib : | ||||||
|  |  | ||||||
| @@ -30,18 +32,16 @@ | |||||||
|      misrepresented as being the original software. |      misrepresented as being the original software. | ||||||
|   3. This notice may not be removed or altered from any source distribution. |   3. This notice may not be removed or altered from any source distribution. | ||||||
|  |  | ||||||
|  |   --------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | 	Changes | ||||||
|  |  | ||||||
|  | 	See header of unzip64.c  | ||||||
|  |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
| /* for more info about .ZIP format, see | #ifndef _unz64_H | ||||||
|       http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip | #define _unz64_H | ||||||
|       http://www.info-zip.org/pub/infozip/doc/ |  | ||||||
|    PkWare has also a specification at : |  | ||||||
|       ftp://ftp.pkware.com/probdesc.zip |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef _unz_H |  | ||||||
| #define _unz_H |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| @@ -55,6 +55,12 @@ extern "C" { | |||||||
| #include "ioapi.h" | #include "ioapi.h" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #ifdef HAVE_BZIP2 | ||||||
|  | #include "bzlib.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define Z_BZIP2ED 12 | ||||||
|  |  | ||||||
| #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) | #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) | ||||||
| /* like the STRICT of WIN32, we define a pointer that cannot be converted | /* like the STRICT of WIN32, we define a pointer that cannot be converted | ||||||
|     from (void*) without cast */ |     from (void*) without cast */ | ||||||
| @@ -87,6 +93,13 @@ typedef struct tm_unz_s | |||||||
|  |  | ||||||
| /* unz_global_info structure contain global data about the ZIPfile | /* unz_global_info structure contain global data about the ZIPfile | ||||||
|    These data comes from the end of central dir */ |    These data comes from the end of central dir */ | ||||||
|  | typedef struct unz_global_info64_s | ||||||
|  | { | ||||||
|  |     ZPOS64_T number_entry;         /* total number of entries in | ||||||
|  |                                      the central dir on this disk */ | ||||||
|  |     uLong size_comment;         /* size of the global comment of the zipfile */ | ||||||
|  | } unz_global_info64; | ||||||
|  |  | ||||||
| typedef struct unz_global_info_s | typedef struct unz_global_info_s | ||||||
| { | { | ||||||
|     uLong number_entry;         /* total number of entries in |     uLong number_entry;         /* total number of entries in | ||||||
| @@ -94,8 +107,28 @@ typedef struct unz_global_info_s | |||||||
|     uLong size_comment;         /* size of the global comment of the zipfile */ |     uLong size_comment;         /* size of the global comment of the zipfile */ | ||||||
| } unz_global_info; | } unz_global_info; | ||||||
|  |  | ||||||
|  |  | ||||||
| /* unz_file_info contain information about a file in the zipfile */ | /* unz_file_info contain information about a file in the zipfile */ | ||||||
|  | typedef struct unz_file_info64_s | ||||||
|  | { | ||||||
|  |     uLong version;              /* version made by                 2 bytes */ | ||||||
|  |     uLong version_needed;       /* version needed to extract       2 bytes */ | ||||||
|  |     uLong flag;                 /* general purpose bit flag        2 bytes */ | ||||||
|  |     uLong compression_method;   /* compression method              2 bytes */ | ||||||
|  |     uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */ | ||||||
|  |     uLong crc;                  /* crc-32                          4 bytes */ | ||||||
|  |     ZPOS64_T compressed_size;   /* compressed size                 8 bytes */ | ||||||
|  |     ZPOS64_T uncompressed_size; /* uncompressed size               8 bytes */ | ||||||
|  |     uLong size_filename;        /* filename length                 2 bytes */ | ||||||
|  |     uLong size_file_extra;      /* extra field length              2 bytes */ | ||||||
|  |     uLong size_file_comment;    /* file comment length             2 bytes */ | ||||||
|  |  | ||||||
|  |     uLong disk_num_start;       /* disk number start               2 bytes */ | ||||||
|  |     uLong internal_fa;          /* internal file attributes        2 bytes */ | ||||||
|  |     uLong external_fa;          /* external file attributes        4 bytes */ | ||||||
|  |  | ||||||
|  |     tm_unz tmu_date; | ||||||
|  | } unz_file_info64; | ||||||
|  |  | ||||||
| typedef struct unz_file_info_s | typedef struct unz_file_info_s | ||||||
| { | { | ||||||
|     uLong version;              /* version made by                 2 bytes */ |     uLong version;              /* version made by                 2 bytes */ | ||||||
| @@ -131,6 +164,7 @@ extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, | |||||||
|  |  | ||||||
|  |  | ||||||
| extern unzFile ZEXPORT unzOpen OF((const char *path)); | extern unzFile ZEXPORT unzOpen OF((const char *path)); | ||||||
|  | extern unzFile ZEXPORT unzOpen64 OF((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 | ||||||
| @@ -139,8 +173,14 @@ extern unzFile ZEXPORT unzOpen OF((const char *path)); | |||||||
|        return value is NULL. |        return value is NULL. | ||||||
|      Else, the return value is a unzFile Handle, usable with other function |      Else, the return value is a unzFile Handle, usable with other function | ||||||
|        of this unzip package. |        of this unzip package. | ||||||
|  |      the "64" function take a const void* pointer, because the path is just the | ||||||
|  |        value passed to the open64_file_func callback. | ||||||
|  |      Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path | ||||||
|  |        is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* | ||||||
|  |        does not describe the reality | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
| extern unzFile ZEXPORT unzOpen2 OF((const char *path, | extern unzFile ZEXPORT unzOpen2 OF((const char *path, | ||||||
|                                     zlib_filefunc_def* pzlib_filefunc_def)); |                                     zlib_filefunc_def* pzlib_filefunc_def)); | ||||||
| /* | /* | ||||||
| @@ -148,6 +188,13 @@ extern unzFile ZEXPORT unzOpen2 OF((const char *path, | |||||||
|       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, | ||||||
|  |                                     zlib_filefunc64_def* pzlib_filefunc_def)); | ||||||
|  | /* | ||||||
|  |    Open a Zip file, like unz64Open, but provide a set of file low level API | ||||||
|  |       for read/write the zip file (see ioapi.h) | ||||||
|  | */ | ||||||
|  |  | ||||||
| extern int ZEXPORT unzClose OF((unzFile file)); | extern int ZEXPORT unzClose OF((unzFile file)); | ||||||
| /* | /* | ||||||
|   Close a ZipFile opened with unzipOpen. |   Close a ZipFile opened with unzipOpen. | ||||||
| @@ -157,6 +204,9 @@ extern int ZEXPORT unzClose OF((unzFile file)); | |||||||
|  |  | ||||||
| extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, | extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, | ||||||
|                                         unz_global_info *pglobal_info)); |                                         unz_global_info *pglobal_info)); | ||||||
|  |  | ||||||
|  | extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, | ||||||
|  |                                         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 | ||||||
| @@ -219,8 +269,31 @@ extern int ZEXPORT unzGoToFilePos( | |||||||
|     unzFile file, |     unzFile file, | ||||||
|     unz_file_pos* file_pos); |     unz_file_pos* file_pos); | ||||||
|  |  | ||||||
|  | typedef struct unz64_file_pos_s | ||||||
|  | { | ||||||
|  |     ZPOS64_T pos_in_zip_directory;   /* offset in zip file directory */ | ||||||
|  |     ZPOS64_T num_of_file;            /* # of file */ | ||||||
|  | } unz64_file_pos; | ||||||
|  |  | ||||||
|  | extern int ZEXPORT unzGetFilePos64( | ||||||
|  |     unzFile file, | ||||||
|  |     unz64_file_pos* file_pos); | ||||||
|  |  | ||||||
|  | extern int ZEXPORT unzGoToFilePos64( | ||||||
|  |     unzFile file, | ||||||
|  |     const unz64_file_pos* file_pos); | ||||||
|  |  | ||||||
| /* ****************************************** */ | /* ****************************************** */ | ||||||
|  |  | ||||||
|  | extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, | ||||||
|  |                          unz_file_info64 *pfile_info, | ||||||
|  |                          char *szFileName, | ||||||
|  |                          uLong fileNameBufferSize, | ||||||
|  |                          void *extraField, | ||||||
|  |                          uLong extraFieldBufferSize, | ||||||
|  |                          char *szComment, | ||||||
|  |                          uLong commentBufferSize)); | ||||||
|  |  | ||||||
| extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, | extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, | ||||||
|                          unz_file_info *pfile_info, |                          unz_file_info *pfile_info, | ||||||
|                          char *szFileName, |                          char *szFileName, | ||||||
| @@ -242,6 +315,14 @@ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, | |||||||
|             (commentBufferSize is the size of the buffer) |             (commentBufferSize is the size of the buffer) | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** Addition for GDAL : START */ | ||||||
|  |  | ||||||
|  | extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); | ||||||
|  |  | ||||||
|  | /** Addition for GDAL : END */ | ||||||
|  |  | ||||||
|  |  | ||||||
| /***************************************************************************/ | /***************************************************************************/ | ||||||
| /* for reading the content of the current zipfile, you can open it, read data | /* for reading the content of the current zipfile, you can open it, read data | ||||||
|    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) | ||||||
| @@ -310,6 +391,8 @@ extern int ZEXPORT unzReadCurrentFile OF((unzFile file, | |||||||
| */ | */ | ||||||
|  |  | ||||||
| extern z_off_t ZEXPORT unztell OF((unzFile file)); | extern z_off_t ZEXPORT unztell OF((unzFile file)); | ||||||
|  |  | ||||||
|  | extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); | ||||||
| /* | /* | ||||||
|   Give the current position in uncompressed data |   Give the current position in uncompressed data | ||||||
| */ | */ | ||||||
| @@ -338,9 +421,11 @@ extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, | |||||||
| /***************************************************************************/ | /***************************************************************************/ | ||||||
|  |  | ||||||
| /* Get the current file offset */ | /* Get the current file offset */ | ||||||
|  | extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); | ||||||
| extern uLong ZEXPORT unzGetOffset (unzFile file); | extern uLong ZEXPORT unzGetOffset (unzFile file); | ||||||
|  |  | ||||||
| /* Set the current file offset */ | /* Set the current file offset */ | ||||||
|  | extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); | ||||||
| extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); | extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -349,4 +434,4 @@ extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #endif /* _unz_H */ | #endif /* _unz64_H */ | ||||||
|   | |||||||
							
								
								
									
										332
									
								
								contrib/minizip/zconf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										332
									
								
								contrib/minizip/zconf.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,332 @@ | |||||||
|  | /* zconf.h -- configuration of the zlib compression library | ||||||
|  |  * Copyright (C) 1995-2005 Jean-loup Gailly. | ||||||
|  |  * For conditions of distribution and use, see copyright notice in zlib.h | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* @(#) $Id$ */ | ||||||
|  |  | ||||||
|  | #ifndef ZCONF_H | ||||||
|  | #define ZCONF_H | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * If you *really* need a unique prefix for all types and library functions, | ||||||
|  |  * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. | ||||||
|  |  */ | ||||||
|  | #ifdef Z_PREFIX | ||||||
|  | #  define deflateInit_          z_deflateInit_ | ||||||
|  | #  define deflate               z_deflate | ||||||
|  | #  define deflateEnd            z_deflateEnd | ||||||
|  | #  define inflateInit_          z_inflateInit_ | ||||||
|  | #  define inflate               z_inflate | ||||||
|  | #  define inflateEnd            z_inflateEnd | ||||||
|  | #  define deflateInit2_         z_deflateInit2_ | ||||||
|  | #  define deflateSetDictionary  z_deflateSetDictionary | ||||||
|  | #  define deflateCopy           z_deflateCopy | ||||||
|  | #  define deflateReset          z_deflateReset | ||||||
|  | #  define deflateParams         z_deflateParams | ||||||
|  | #  define deflateBound          z_deflateBound | ||||||
|  | #  define deflatePrime          z_deflatePrime | ||||||
|  | #  define inflateInit2_         z_inflateInit2_ | ||||||
|  | #  define inflateSetDictionary  z_inflateSetDictionary | ||||||
|  | #  define inflateSync           z_inflateSync | ||||||
|  | #  define inflateSyncPoint      z_inflateSyncPoint | ||||||
|  | #  define inflateCopy           z_inflateCopy | ||||||
|  | #  define inflateReset          z_inflateReset | ||||||
|  | #  define inflateBack           z_inflateBack | ||||||
|  | #  define inflateBackEnd        z_inflateBackEnd | ||||||
|  | #  define compress              z_compress | ||||||
|  | #  define compress2             z_compress2 | ||||||
|  | #  define compressBound         z_compressBound | ||||||
|  | #  define uncompress            z_uncompress | ||||||
|  | #  define adler32               z_adler32 | ||||||
|  | #  define crc32                 z_crc32 | ||||||
|  | #  define get_crc_table         z_get_crc_table | ||||||
|  | #  define zError                z_zError | ||||||
|  |  | ||||||
|  | #  define alloc_func            z_alloc_func | ||||||
|  | #  define free_func             z_free_func | ||||||
|  | #  define in_func               z_in_func | ||||||
|  | #  define out_func              z_out_func | ||||||
|  | #  define Byte                  z_Byte | ||||||
|  | #  define uInt                  z_uInt | ||||||
|  | #  define uLong                 z_uLong | ||||||
|  | #  define Bytef                 z_Bytef | ||||||
|  | #  define charf                 z_charf | ||||||
|  | #  define intf                  z_intf | ||||||
|  | #  define uIntf                 z_uIntf | ||||||
|  | #  define uLongf                z_uLongf | ||||||
|  | #  define voidpf                z_voidpf | ||||||
|  | #  define voidp                 z_voidp | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(__MSDOS__) && !defined(MSDOS) | ||||||
|  | #  define MSDOS | ||||||
|  | #endif | ||||||
|  | #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) | ||||||
|  | #  define OS2 | ||||||
|  | #endif | ||||||
|  | #if defined(_WINDOWS) && !defined(WINDOWS) | ||||||
|  | #  define WINDOWS | ||||||
|  | #endif | ||||||
|  | #if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) | ||||||
|  | #  ifndef WIN32 | ||||||
|  | #    define WIN32 | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  | #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) | ||||||
|  | #  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) | ||||||
|  | #    ifndef SYS16BIT | ||||||
|  | #      define SYS16BIT | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Compile with -DMAXSEG_64K if the alloc function cannot allocate more | ||||||
|  |  * than 64k bytes at a time (needed on systems with 16-bit int). | ||||||
|  |  */ | ||||||
|  | #ifdef SYS16BIT | ||||||
|  | #  define MAXSEG_64K | ||||||
|  | #endif | ||||||
|  | #ifdef MSDOS | ||||||
|  | #  define UNALIGNED_OK | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef __STDC_VERSION__ | ||||||
|  | #  ifndef STDC | ||||||
|  | #    define STDC | ||||||
|  | #  endif | ||||||
|  | #  if __STDC_VERSION__ >= 199901L | ||||||
|  | #    ifndef STDC99 | ||||||
|  | #      define STDC99 | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  | #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) | ||||||
|  | #  define STDC | ||||||
|  | #endif | ||||||
|  | #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) | ||||||
|  | #  define STDC | ||||||
|  | #endif | ||||||
|  | #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) | ||||||
|  | #  define STDC | ||||||
|  | #endif | ||||||
|  | #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) | ||||||
|  | #  define STDC | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */ | ||||||
|  | #  define STDC | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifndef STDC | ||||||
|  | #  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ | ||||||
|  | #    define const       /* note: need a more gentle solution here */ | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* Some Mac compilers merge all .h files incorrectly: */ | ||||||
|  | #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) | ||||||
|  | #  define NO_DUMMY_DECL | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* Maximum value for memLevel in deflateInit2 */ | ||||||
|  | #ifndef MAX_MEM_LEVEL | ||||||
|  | #  ifdef MAXSEG_64K | ||||||
|  | #    define MAX_MEM_LEVEL 8 | ||||||
|  | #  else | ||||||
|  | #    define MAX_MEM_LEVEL 9 | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* Maximum value for windowBits in deflateInit2 and inflateInit2. | ||||||
|  |  * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files | ||||||
|  |  * created by gzip. (Files created by minigzip can still be extracted by | ||||||
|  |  * gzip.) | ||||||
|  |  */ | ||||||
|  | #ifndef MAX_WBITS | ||||||
|  | #  define MAX_WBITS   15 /* 32K LZ77 window */ | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* The memory requirements for deflate are (in bytes): | ||||||
|  |             (1 << (windowBits+2)) +  (1 << (memLevel+9)) | ||||||
|  |  that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values) | ||||||
|  |  plus a few kilobytes for small objects. For example, if you want to reduce | ||||||
|  |  the default memory requirements from 256K to 128K, compile with | ||||||
|  |      make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" | ||||||
|  |  Of course this will generally degrade compression (there's no free lunch). | ||||||
|  |  | ||||||
|  |    The memory requirements for inflate are (in bytes) 1 << windowBits | ||||||
|  |  that is, 32K for windowBits=15 (default value) plus a few kilobytes | ||||||
|  |  for small objects. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  |                         /* Type declarations */ | ||||||
|  |  | ||||||
|  | #ifndef OF /* function prototypes */ | ||||||
|  | #  ifdef STDC | ||||||
|  | #    define OF(args)  args | ||||||
|  | #  else | ||||||
|  | #    define OF(args)  () | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* The following definitions for FAR are needed only for MSDOS mixed | ||||||
|  |  * model programming (small or medium model with some far allocations). | ||||||
|  |  * This was tested only with MSC; for other MSDOS compilers you may have | ||||||
|  |  * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model, | ||||||
|  |  * just define FAR to be empty. | ||||||
|  |  */ | ||||||
|  | #ifdef SYS16BIT | ||||||
|  | #  if defined(M_I86SM) || defined(M_I86MM) | ||||||
|  |      /* MSC small or medium model */ | ||||||
|  | #    define SMALL_MEDIUM | ||||||
|  | #    ifdef _MSC_VER | ||||||
|  | #      define FAR _far | ||||||
|  | #    else | ||||||
|  | #      define FAR far | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #  if (defined(__SMALL__) || defined(__MEDIUM__)) | ||||||
|  |      /* Turbo C small or medium model */ | ||||||
|  | #    define SMALL_MEDIUM | ||||||
|  | #    ifdef __BORLANDC__ | ||||||
|  | #      define FAR _far | ||||||
|  | #    else | ||||||
|  | #      define FAR far | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(WINDOWS) || defined(WIN32) | ||||||
|  |    /* If building or using zlib as a DLL, define ZLIB_DLL. | ||||||
|  |     * This is not mandatory, but it offers a little performance increase. | ||||||
|  |     */ | ||||||
|  | #  ifdef ZLIB_DLL | ||||||
|  | #    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) | ||||||
|  | #      ifdef ZLIB_INTERNAL | ||||||
|  | #        define ZEXTERN extern __declspec(dllexport) | ||||||
|  | #      else | ||||||
|  | #        define ZEXTERN extern __declspec(dllimport) | ||||||
|  | #      endif | ||||||
|  | #    endif | ||||||
|  | #  endif  /* ZLIB_DLL */ | ||||||
|  |    /* If building or using zlib with the WINAPI/WINAPIV calling convention, | ||||||
|  |     * define ZLIB_WINAPI. | ||||||
|  |     * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. | ||||||
|  |     */ | ||||||
|  | #  ifdef ZLIB_WINAPI | ||||||
|  | #    ifdef FAR | ||||||
|  | #      undef FAR | ||||||
|  | #    endif | ||||||
|  | #    include <windows.h> | ||||||
|  |      /* No need for _export, use ZLIB.DEF instead. */ | ||||||
|  |      /* For complete Windows compatibility, use WINAPI, not __stdcall. */ | ||||||
|  | #    define ZEXPORT WINAPI | ||||||
|  | #    ifdef WIN32 | ||||||
|  | #      define ZEXPORTVA WINAPIV | ||||||
|  | #    else | ||||||
|  | #      define ZEXPORTVA FAR CDECL | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined (__BEOS__) | ||||||
|  | #  ifdef ZLIB_DLL | ||||||
|  | #    ifdef ZLIB_INTERNAL | ||||||
|  | #      define ZEXPORT   __declspec(dllexport) | ||||||
|  | #      define ZEXPORTVA __declspec(dllexport) | ||||||
|  | #    else | ||||||
|  | #      define ZEXPORT   __declspec(dllimport) | ||||||
|  | #      define ZEXPORTVA __declspec(dllimport) | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifndef ZEXTERN | ||||||
|  | #  define ZEXTERN extern | ||||||
|  | #endif | ||||||
|  | #ifndef ZEXPORT | ||||||
|  | #  define ZEXPORT | ||||||
|  | #endif | ||||||
|  | #ifndef ZEXPORTVA | ||||||
|  | #  define ZEXPORTVA | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifndef FAR | ||||||
|  | #  define FAR | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !defined(__MACTYPES__) | ||||||
|  | typedef unsigned char  Byte;  /* 8 bits */ | ||||||
|  | #endif | ||||||
|  | typedef unsigned int   uInt;  /* 16 bits or more */ | ||||||
|  | typedef unsigned long  uLong; /* 32 bits or more */ | ||||||
|  |  | ||||||
|  | #ifdef SMALL_MEDIUM | ||||||
|  |    /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ | ||||||
|  | #  define Bytef Byte FAR | ||||||
|  | #else | ||||||
|  |    typedef Byte  FAR Bytef; | ||||||
|  | #endif | ||||||
|  | typedef char  FAR charf; | ||||||
|  | typedef int   FAR intf; | ||||||
|  | typedef uInt  FAR uIntf; | ||||||
|  | typedef uLong FAR uLongf; | ||||||
|  |  | ||||||
|  | #ifdef STDC | ||||||
|  |    typedef void const *voidpc; | ||||||
|  |    typedef void FAR   *voidpf; | ||||||
|  |    typedef void       *voidp; | ||||||
|  | #else | ||||||
|  |    typedef Byte const *voidpc; | ||||||
|  |    typedef Byte FAR   *voidpf; | ||||||
|  |    typedef Byte       *voidp; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if 0           /* HAVE_UNISTD_H -- this line is updated by ./configure */ | ||||||
|  | #  include <sys/types.h> /* for off_t */ | ||||||
|  | #  include <unistd.h>    /* for SEEK_* and off_t */ | ||||||
|  | #  ifdef VMS | ||||||
|  | #    include <unixio.h>   /* for off_t */ | ||||||
|  | #  endif | ||||||
|  | #  define z_off_t off_t | ||||||
|  | #endif | ||||||
|  | #ifndef SEEK_SET | ||||||
|  | #  define SEEK_SET        0       /* Seek from beginning of file.  */ | ||||||
|  | #  define SEEK_CUR        1       /* Seek from current position.  */ | ||||||
|  | #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */ | ||||||
|  | #endif | ||||||
|  | #ifndef z_off_t | ||||||
|  | #  define z_off_t long | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(__OS400__) | ||||||
|  | #  define NO_vsnprintf | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(__MVS__) | ||||||
|  | #  define NO_vsnprintf | ||||||
|  | #  ifdef FAR | ||||||
|  | #    undef FAR | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* MVS linker does not support external names larger than 8 bytes */ | ||||||
|  | #if defined(__MVS__) | ||||||
|  | #   pragma map(deflateInit_,"DEIN") | ||||||
|  | #   pragma map(deflateInit2_,"DEIN2") | ||||||
|  | #   pragma map(deflateEnd,"DEEND") | ||||||
|  | #   pragma map(deflateBound,"DEBND") | ||||||
|  | #   pragma map(inflateInit_,"ININ") | ||||||
|  | #   pragma map(inflateInit2_,"ININ2") | ||||||
|  | #   pragma map(inflateEnd,"INEND") | ||||||
|  | #   pragma map(inflateSync,"INSY") | ||||||
|  | #   pragma map(inflateSetDictionary,"INSEDI") | ||||||
|  | #   pragma map(compressBound,"CMBND") | ||||||
|  | #   pragma map(inflate_table,"INTABL") | ||||||
|  | #   pragma map(inflate_fast,"INFA") | ||||||
|  | #   pragma map(inflate_copyright,"INCOPY") | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* ZCONF_H */ | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| /* zconf.h -- configuration of the zlib compression library
 | /* zconf.h -- configuration of the zlib compression library
 | ||||||
|  * Copyright (C) 1995-2004 Jean-loup Gailly. |  * Copyright (C) 1995-2005 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 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| @@ -68,8 +68,10 @@ | |||||||
| #if defined(_WINDOWS) && !defined(WINDOWS) | #if defined(_WINDOWS) && !defined(WINDOWS) | ||||||
| #  define WINDOWS | #  define WINDOWS | ||||||
| #endif | #endif | ||||||
| #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) | #if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) | ||||||
|  | #  ifndef WIN32 | ||||||
| #    define WIN32 | #    define WIN32 | ||||||
|  | #  endif | ||||||
| #endif | #endif | ||||||
| #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) | #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) | ||||||
| #  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) | #  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,18 +1,15 @@ | |||||||
| /* zip.h -- IO for compress .zip files using zlib | /* zip.h -- IO on .zip files using zlib | ||||||
|    Version 1.01, May 8th, 2004 |    Version 1.1, January 7th, 2010 | ||||||
|  |    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    Copyright (C) 1998-2004 Gilles Vollant | 	 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) | ||||||
|  |  | ||||||
|    This unzip package allow creates .ZIP file, compatible with PKZip 2.04g | 	 Modifications for Zip64 support | ||||||
|      WinZip, InfoZip tools and compatible. | 	 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) | ||||||
|    Encryption and multi volume ZipFile (span) are not supported. |  | ||||||
|    Old compressions used by old PKZip 1.x are not supported |  | ||||||
|  |  | ||||||
|   For uncompress .zip file, look at unzip.h | 	 For more info read MiniZip_info.txt | ||||||
|  |  | ||||||
|  | 	 --------------------------------------------------------------------------- | ||||||
|    I WAIT FEEDBACK at mail info@winimage.com |  | ||||||
|    Visit also http://www.winimage.com/zLibDll/unzip.html for evolution |  | ||||||
|  |  | ||||||
|    Condition of use and distribution are the same than zlib : |    Condition of use and distribution are the same than zlib : | ||||||
|  |  | ||||||
| @@ -32,23 +29,23 @@ | |||||||
|      misrepresented as being the original software. |      misrepresented as being the original software. | ||||||
|   3. This notice may not be removed or altered from any source distribution. |   3. This notice may not be removed or altered from any source distribution. | ||||||
|  |  | ||||||
|  | 	--------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | 	Changes  | ||||||
|  |  | ||||||
|  | 	See header of zip.h | ||||||
|  |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
| /* for more info about .ZIP format, see | #ifndef _zip12_H | ||||||
|       http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip | #define _zip12_H | ||||||
|       http://www.info-zip.org/pub/infozip/doc/ |  | ||||||
|    PkWare has also a specification at : |  | ||||||
|       ftp://ftp.pkware.com/probdesc.zip |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #ifndef _zip_H |  | ||||||
| #define _zip_H |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | //#define HAVE_BZIP2 | ||||||
|  |  | ||||||
| #ifndef _ZLIB_H | #ifndef _ZLIB_H | ||||||
| #include "zlib.h" | #include "zlib.h" | ||||||
| #endif | #endif | ||||||
| @@ -57,6 +54,12 @@ extern "C" { | |||||||
| #include "ioapi.h" | #include "ioapi.h" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #ifdef HAVE_BZIP2 | ||||||
|  | #include "bzlib.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define Z_BZIP2ED 12 | ||||||
|  |  | ||||||
| #if defined(STRICTZIP) || defined(STRICTZIPUNZIP) | #if defined(STRICTZIP) || defined(STRICTZIPUNZIP) | ||||||
| /* like the STRICT of WIN32, we define a pointer that cannot be converted | /* like the STRICT of WIN32, we define a pointer that cannot be converted | ||||||
|     from (void*) without cast */ |     from (void*) without cast */ | ||||||
| @@ -111,6 +114,7 @@ typedef const char* zipcharpc; | |||||||
| #define APPEND_STATUS_ADDINZIP      (2) | #define APPEND_STATUS_ADDINZIP      (2) | ||||||
|  |  | ||||||
| extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append)); | extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append)); | ||||||
|  | extern zipFile ZEXPORT zipOpen64 OF((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 | ||||||
| @@ -135,6 +139,11 @@ extern zipFile ZEXPORT zipOpen2 OF((const char *pathname, | |||||||
|                                    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, | ||||||
|  |                                    int append, | ||||||
|  |                                    zipcharpc* globalcomment, | ||||||
|  |                                    zlib_filefunc64_def* pzlib_filefunc_def)); | ||||||
|  |  | ||||||
| extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, | extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, | ||||||
|                        const char* filename, |                        const char* filename, | ||||||
|                        const zip_fileinfo* zipfi, |                        const zip_fileinfo* zipfi, | ||||||
| @@ -145,6 +154,19 @@ extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, | |||||||
|                        const char* comment, |                        const char* comment, | ||||||
|                        int method, |                        int method, | ||||||
|                        int level)); |                        int level)); | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file, | ||||||
|  |                        const char* filename, | ||||||
|  |                        const zip_fileinfo* zipfi, | ||||||
|  |                        const void* extrafield_local, | ||||||
|  |                        uInt size_extrafield_local, | ||||||
|  |                        const void* extrafield_global, | ||||||
|  |                        uInt size_extrafield_global, | ||||||
|  |                        const char* comment, | ||||||
|  |                        int method, | ||||||
|  |                        int level, | ||||||
|  |                        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 | ||||||
| @@ -156,6 +178,9 @@ extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, | |||||||
|   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) | ||||||
|  |   zip64 is set to 1 if a zip64 extended information block should be added to the local file header. | ||||||
|  |                     this MUST be '1' if the uncompressed size is >= 0xffffffff. | ||||||
|  |  | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -171,6 +196,19 @@ extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file, | |||||||
|                                             int level, |                                             int level, | ||||||
|                                             int raw)); |                                             int raw)); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file, | ||||||
|  |                                             const char* filename, | ||||||
|  |                                             const zip_fileinfo* zipfi, | ||||||
|  |                                             const void* extrafield_local, | ||||||
|  |                                             uInt size_extrafield_local, | ||||||
|  |                                             const void* extrafield_global, | ||||||
|  |                                             uInt size_extrafield_global, | ||||||
|  |                                             const char* comment, | ||||||
|  |                                             int method, | ||||||
|  |                                             int level, | ||||||
|  |                                             int raw, | ||||||
|  |                                             int zip64)); | ||||||
| /* | /* | ||||||
|   Same than zipOpenNewFileInZip, except if raw=1, we write raw file |   Same than zipOpenNewFileInZip, except if raw=1, we write raw file | ||||||
|  */ |  */ | ||||||
| @@ -190,13 +228,79 @@ extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file, | |||||||
|                                             int memLevel, |                                             int memLevel, | ||||||
|                                             int strategy, |                                             int strategy, | ||||||
|                                             const char* password, |                                             const char* password, | ||||||
|                                             uLong crcForCtypting)); |                                             uLong crcForCrypting)); | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file, | ||||||
|  |                                             const char* filename, | ||||||
|  |                                             const zip_fileinfo* zipfi, | ||||||
|  |                                             const void* extrafield_local, | ||||||
|  |                                             uInt size_extrafield_local, | ||||||
|  |                                             const void* extrafield_global, | ||||||
|  |                                             uInt size_extrafield_global, | ||||||
|  |                                             const char* comment, | ||||||
|  |                                             int method, | ||||||
|  |                                             int level, | ||||||
|  |                                             int raw, | ||||||
|  |                                             int windowBits, | ||||||
|  |                                             int memLevel, | ||||||
|  |                                             int strategy, | ||||||
|  |                                             const char* password, | ||||||
|  |                                             uLong crcForCrypting, | ||||||
|  |                                             int zip64 | ||||||
|  |                                             )); | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   Same than zipOpenNewFileInZip2, except |   Same than zipOpenNewFileInZip2, except | ||||||
|     windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 |     windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 | ||||||
|     password : crypting password (NULL for no crypting) |     password : crypting password (NULL for no crypting) | ||||||
|     crcForCtypting : crc of file to compress (needed for crypting) |     crcForCrypting : crc of file to compress (needed for crypting) | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file, | ||||||
|  |                                             const char* filename, | ||||||
|  |                                             const zip_fileinfo* zipfi, | ||||||
|  |                                             const void* extrafield_local, | ||||||
|  |                                             uInt size_extrafield_local, | ||||||
|  |                                             const void* extrafield_global, | ||||||
|  |                                             uInt size_extrafield_global, | ||||||
|  |                                             const char* comment, | ||||||
|  |                                             int method, | ||||||
|  |                                             int level, | ||||||
|  |                                             int raw, | ||||||
|  |                                             int windowBits, | ||||||
|  |                                             int memLevel, | ||||||
|  |                                             int strategy, | ||||||
|  |                                             const char* password, | ||||||
|  |                                             uLong crcForCrypting, | ||||||
|  |                                             uLong versionMadeBy, | ||||||
|  |                                             uLong flagBase | ||||||
|  |                                             )); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file, | ||||||
|  |                                             const char* filename, | ||||||
|  |                                             const zip_fileinfo* zipfi, | ||||||
|  |                                             const void* extrafield_local, | ||||||
|  |                                             uInt size_extrafield_local, | ||||||
|  |                                             const void* extrafield_global, | ||||||
|  |                                             uInt size_extrafield_global, | ||||||
|  |                                             const char* comment, | ||||||
|  |                                             int method, | ||||||
|  |                                             int level, | ||||||
|  |                                             int raw, | ||||||
|  |                                             int windowBits, | ||||||
|  |                                             int memLevel, | ||||||
|  |                                             int strategy, | ||||||
|  |                                             const char* password, | ||||||
|  |                                             uLong crcForCrypting, | ||||||
|  |                                             uLong versionMadeBy, | ||||||
|  |                                             uLong flagBase, | ||||||
|  |                                             int zip64 | ||||||
|  |                                             )); | ||||||
|  | /* | ||||||
|  |   Same than zipOpenNewFileInZip4, except | ||||||
|  |     versionMadeBy : value for Version made by field | ||||||
|  |     flag : value for flag field (compression level info will be added) | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -215,8 +319,13 @@ extern int ZEXPORT zipCloseFileInZip OF((zipFile file)); | |||||||
| extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file, | extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file, | ||||||
|                                             uLong uncompressed_size, |                                             uLong uncompressed_size, | ||||||
|                                             uLong crc32)); |                                             uLong crc32)); | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file, | ||||||
|  |                                             ZPOS64_T uncompressed_size, | ||||||
|  |                                             uLong crc32)); | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   Close the current file in the zipfile, for fiel opened with |   Close the current file in the zipfile, for file opened with | ||||||
|     parameter raw=1 in zipOpenNewFileInZip2 |     parameter raw=1 in zipOpenNewFileInZip2 | ||||||
|   uncompressed_size and crc32 are value for the uncompressed size |   uncompressed_size and crc32 are value for the uncompressed size | ||||||
| */ | */ | ||||||
| @@ -227,8 +336,27 @@ extern int ZEXPORT zipClose OF((zipFile file, | |||||||
|   Close the zipfile |   Close the zipfile | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader)); | ||||||
|  | /*  | ||||||
|  |   zipRemoveExtraInfoBlock -  Added by Mathias Svensson  | ||||||
|  |    | ||||||
|  |   Remove extra information block from a extra information data for the local file header or central directory header | ||||||
|  |  | ||||||
|  |   It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. | ||||||
|  |    | ||||||
|  |   0x0001 is the signature header for the ZIP64 extra information blocks | ||||||
|  |  | ||||||
|  |   usage. | ||||||
|  | 			Remove ZIP64 Extra information from a central director extra field data | ||||||
|  | 	      zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); | ||||||
|  |  | ||||||
|  | 			Remove ZIP64 Extra information from a Local File Header extra field data | ||||||
|  |         zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); | ||||||
|  | */ | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #endif /* _zip_H */ | #endif /* _zip64_H */ | ||||||
|   | |||||||
| @@ -18,10 +18,10 @@ LDFLAGS = | |||||||
| # variables | # variables | ||||||
| ZLIB_LIB = zlib.lib | ZLIB_LIB = zlib.lib | ||||||
|  |  | ||||||
| OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzio.obj infback.obj | OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzio.obj gzlib.obj gzread.obj | ||||||
| OBJ2 = inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj | ||||||
| OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzio.obj+infback.obj | OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzio.obj+gzlib.obj+gzread.obj | ||||||
| OBJP2 = +inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj | OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj | ||||||
|  |  | ||||||
|  |  | ||||||
| # targets | # targets | ||||||
| @@ -38,8 +38,16 @@ crc32.obj: crc32.c zlib.h zconf.h crc32.h | |||||||
|  |  | ||||||
| deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h | ||||||
|  |  | ||||||
|  | gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
| gzio.obj: gzio.c zutil.h zlib.h zconf.h | gzio.obj: gzio.c zutil.h zlib.h zconf.h | ||||||
|  |  | ||||||
|  | gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
|  | gzread.obj: gzread.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
|  | gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h | ||||||
|  |  | ||||||
| infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ | ||||||
|  inffast.h inffixed.h |  inffast.h inffixed.h | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ unit zlibpas; | |||||||
| interface | interface | ||||||
|  |  | ||||||
| const | const | ||||||
|   ZLIB_VERSION = '1.2.2'; |   ZLIB_VERSION = '1.2.3'; | ||||||
|  |  | ||||||
| type | type | ||||||
|   alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; |   alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								contrib/puff/puff
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								contrib/puff/puff
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,8 +1,8 @@ | |||||||
| /* | /* | ||||||
|  * puff.c |  * puff.c | ||||||
|  * Copyright (C) 2002-2004 Mark Adler |  * Copyright (C) 2002-2008 Mark Adler | ||||||
|  * For conditions of distribution and use, see copyright notice in puff.h |  * For conditions of distribution and use, see copyright notice in puff.h | ||||||
|  * version 1.8, 9 Jan 2004 |  * version 2.0, 25 Jul 2008 | ||||||
|  * |  * | ||||||
|  * puff.c is a simple inflate written to be an unambiguous way to specify the |  * puff.c is a simple inflate written to be an unambiguous way to specify the | ||||||
|  * deflate format.  It is not written for speed but rather simplicity.  As a |  * deflate format.  It is not written for speed but rather simplicity.  As a | ||||||
| @@ -61,6 +61,12 @@ | |||||||
|  * 1.7   3 Mar 2003     - Added test code for distribution |  * 1.7   3 Mar 2003     - Added test code for distribution | ||||||
|  *                      - Added zlib-like license |  *                      - Added zlib-like license | ||||||
|  * 1.8   9 Jan 2004     - Added some comments on no distance codes case |  * 1.8   9 Jan 2004     - Added some comments on no distance codes case | ||||||
|  |  * 1.9  21 Feb 2008     - Fix bug on 16-bit integer architectures [Pohland] | ||||||
|  |  *                      - Catch missing end-of-block symbol error | ||||||
|  |  * 2.0  25 Jul 2008     - Add #define to permit distance too far back | ||||||
|  |  *                      - Add option in TEST code for puff to write the data | ||||||
|  |  *                      - Add option in TEST code to skip input bytes | ||||||
|  |  *                      - Allow TEST code to read from piped stdin | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */ | #include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */ | ||||||
| @@ -194,7 +200,7 @@ struct huffman { | |||||||
|  * Decode a code from the stream s using huffman table h.  Return the symbol or |  * Decode a code from the stream s using huffman table h.  Return the symbol or | ||||||
|  * a negative value if there is an error.  If all of the lengths are zero, i.e. |  * a negative value if there is an error.  If all of the lengths are zero, i.e. | ||||||
|  * an empty code, or if the code is incomplete and an invalid code is received, |  * an empty code, or if the code is incomplete and an invalid code is received, | ||||||
|  * then -9 is returned after reading MAXBITS bits. |  * then -10 is returned after reading MAXBITS bits. | ||||||
|  * |  * | ||||||
|  * Format notes: |  * Format notes: | ||||||
|  * |  * | ||||||
| @@ -226,14 +232,14 @@ local int decode(struct state *s, struct huffman *h) | |||||||
|     for (len = 1; len <= MAXBITS; len++) { |     for (len = 1; len <= MAXBITS; len++) { | ||||||
|         code |= bits(s, 1);             /* get next bit */ |         code |= bits(s, 1);             /* get next bit */ | ||||||
|         count = h->count[len]; |         count = h->count[len]; | ||||||
|         if (code < first + count)       /* if length len, return symbol */ |         if (code - count < first)       /* if length len, return symbol */ | ||||||
|             return h->symbol[index + (code - first)]; |             return h->symbol[index + (code - first)]; | ||||||
|         index += count;                 /* else update for next length */ |         index += count;                 /* else update for next length */ | ||||||
|         first += count; |         first += count; | ||||||
|         first <<= 1; |         first <<= 1; | ||||||
|         code <<= 1; |         code <<= 1; | ||||||
|     } |     } | ||||||
|     return -9;                          /* ran out of codes */ |     return -10;                         /* ran out of codes */ | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -263,7 +269,7 @@ local int decode(struct state *s, struct huffman *h) | |||||||
|             code |= bitbuf & 1; |             code |= bitbuf & 1; | ||||||
|             bitbuf >>= 1; |             bitbuf >>= 1; | ||||||
|             count = *next++; |             count = *next++; | ||||||
|             if (code < first + count) { /* if length len, return symbol */ |             if (code - count < first) { /* if length len, return symbol */ | ||||||
|                 s->bitbuf = bitbuf; |                 s->bitbuf = bitbuf; | ||||||
|                 s->bitcnt = (s->bitcnt - len) & 7; |                 s->bitcnt = (s->bitcnt - len) & 7; | ||||||
|                 return h->symbol[index + (code - first)]; |                 return h->symbol[index + (code - first)]; | ||||||
| @@ -280,7 +286,7 @@ local int decode(struct state *s, struct huffman *h) | |||||||
|         bitbuf = s->in[s->incnt++]; |         bitbuf = s->in[s->incnt++]; | ||||||
|         if (left > 8) left = 8; |         if (left > 8) left = 8; | ||||||
|     } |     } | ||||||
|     return -9;                          /* ran out of codes */ |     return -10;                         /* ran out of codes */ | ||||||
| } | } | ||||||
| #endif /* SLOW */ | #endif /* SLOW */ | ||||||
|  |  | ||||||
| @@ -448,21 +454,27 @@ local int codes(struct state *s, | |||||||
|         else if (symbol > 256) {        /* length */ |         else if (symbol > 256) {        /* length */ | ||||||
|             /* get and compute length */ |             /* get and compute length */ | ||||||
|             symbol -= 257; |             symbol -= 257; | ||||||
|             if (symbol >= 29) return -9;        /* invalid fixed code */ |             if (symbol >= 29) return -10;       /* invalid fixed code */ | ||||||
|             len = lens[symbol] + bits(s, lext[symbol]); |             len = lens[symbol] + bits(s, lext[symbol]); | ||||||
|  |  | ||||||
|             /* get and check distance */ |             /* get and check distance */ | ||||||
|             symbol = decode(s, distcode); |             symbol = decode(s, distcode); | ||||||
|             if (symbol < 0) return symbol;      /* invalid symbol */ |             if (symbol < 0) return symbol;      /* invalid symbol */ | ||||||
|             dist = dists[symbol] + bits(s, dext[symbol]); |             dist = dists[symbol] + bits(s, dext[symbol]); | ||||||
|  | #ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR | ||||||
|             if (dist > s->outcnt) |             if (dist > s->outcnt) | ||||||
|                 return -10;     /* distance too far back */ |                 return -11;     /* distance too far back */ | ||||||
|  | #endif | ||||||
|  |  | ||||||
|             /* copy length bytes from distance bytes back */ |             /* copy length bytes from distance bytes back */ | ||||||
|             if (s->out != NIL) { |             if (s->out != NIL) { | ||||||
|                 if (s->outcnt + len > s->outlen) return 1; |                 if (s->outcnt + len > s->outlen) return 1; | ||||||
|                 while (len--) { |                 while (len--) { | ||||||
|                     s->out[s->outcnt] = s->out[s->outcnt - dist]; |                     s->out[s->outcnt] = | ||||||
|  | #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR | ||||||
|  |                         dist > s->outcnt ? 0 : | ||||||
|  | #endif | ||||||
|  |                         s->out[s->outcnt - dist]; | ||||||
|                     s->outcnt++; |                     s->outcnt++; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -680,6 +692,10 @@ local int dynamic(struct state *s) | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /* check for end-of-block code -- there better be one! */ | ||||||
|  |     if (lengths[256] == 0) | ||||||
|  |         return -9; | ||||||
|  |  | ||||||
|     /* build huffman table for literal/length codes */ |     /* build huffman table for literal/length codes */ | ||||||
|     err = construct(&lencode, lengths, nlen); |     err = construct(&lencode, lengths, nlen); | ||||||
|     if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) |     if (err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) | ||||||
| @@ -724,8 +740,9 @@ local int dynamic(struct state *s) | |||||||
|  *  -6:  dynamic block code description: repeat more than specified lengths |  *  -6:  dynamic block code description: repeat more than specified lengths | ||||||
|  *  -7:  dynamic block code description: invalid literal/length code lengths |  *  -7:  dynamic block code description: invalid literal/length code lengths | ||||||
|  *  -8:  dynamic block code description: invalid distance code lengths |  *  -8:  dynamic block code description: invalid distance code lengths | ||||||
|  *  -9:  invalid literal/length or distance code in fixed or dynamic block |  *  -9:  dynamic block code description: missing end-of-block code | ||||||
|  * -10:  distance is too far back in fixed or dynamic block |  * -10:  invalid literal/length or distance code in fixed or dynamic block | ||||||
|  |  * -11:  distance is too far back in fixed or dynamic block | ||||||
|  * |  * | ||||||
|  * Format notes: |  * Format notes: | ||||||
|  * |  * | ||||||
| @@ -783,54 +800,142 @@ int puff(unsigned char *dest,           /* pointer to destination pointer */ | |||||||
| } | } | ||||||
|  |  | ||||||
| #ifdef TEST | #ifdef TEST | ||||||
| /* Example of how to use puff() */ | /* Examples of how to use puff(). | ||||||
|  |  | ||||||
|  |    Usage: puff [-w] [-nnn] file | ||||||
|  |           ... | puff [-w] [-nnn] | ||||||
|  |  | ||||||
|  |    where file is the input file with deflate data, nnn is the number of bytes | ||||||
|  |    of input to skip before inflating (e.g. to skip a zlib or gzip header), and | ||||||
|  |    -w is used to write the decompressed data to stdout */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <sys/types.h> |  | ||||||
| #include <sys/stat.h> |  | ||||||
|  |  | ||||||
| local unsigned char *yank(char *name, unsigned long *len) | /* Return size times approximately the cube root of 2, keeping the result as 1, | ||||||
|  |    3, or 5 times a power of 2 -- the result is always > size, until the result | ||||||
|  |    is the maximum value of an unsigned long, where it remains.  This is useful | ||||||
|  |    to keep reallocations less than ~33% over the actual data. */ | ||||||
|  | local size_t bythirds(size_t size) | ||||||
| { | { | ||||||
|     unsigned long size; |     int n; | ||||||
|     unsigned char *buf; |     size_t m; | ||||||
|  |  | ||||||
|  |     m = size; | ||||||
|  |     for (n = 0; m; n++) | ||||||
|  |         m >>= 1; | ||||||
|  |     if (n < 3) | ||||||
|  |         return size + 1; | ||||||
|  |     n -= 3; | ||||||
|  |     m = size >> n; | ||||||
|  |     m += m == 6 ? 2 : 1; | ||||||
|  |     m <<= n; | ||||||
|  |     return m > size ? m : (size_t)(-1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Read the input file *name, or stdin if name is NULL, into allocated memory. | ||||||
|  |    Reallocate to larger buffers until the entire file is read in.  Return a | ||||||
|  |    pointer to the allocated data, or NULL if there was a memory allocation | ||||||
|  |    failure.  *len is the number of bytes of data read from the input file (even | ||||||
|  |    if load() returns NULL).  If the input file was empty or could not be opened | ||||||
|  |    or read, *len is zero. */ | ||||||
|  | local void *load(char *name, size_t *len) | ||||||
|  | { | ||||||
|  |     size_t size; | ||||||
|  |     void *buf, *swap; | ||||||
|     FILE *in; |     FILE *in; | ||||||
|     struct stat s; |  | ||||||
|  |  | ||||||
|     *len = 0; |     *len = 0; | ||||||
|     if (stat(name, &s)) return NULL; |     buf = malloc(size = 4096); | ||||||
|     if ((s.st_mode & S_IFMT) != S_IFREG) return NULL; |     if (buf == NULL) | ||||||
|     size = (unsigned long)(s.st_size); |         return NULL; | ||||||
|     if (size == 0 || (off_t)size != s.st_size) return NULL; |     in = name == NULL ? stdin : fopen(name, "rb"); | ||||||
|     in = fopen(name, "r"); |     if (in != NULL) { | ||||||
|     if (in == NULL) return NULL; |         for (;;) { | ||||||
|     buf = malloc(size); |             *len += fread((char *)buf + *len, 1, size - *len, in); | ||||||
|     if (buf != NULL && fread(buf, 1, size, in) != size) { |             if (*len < size) break; | ||||||
|  |             size = bythirds(size); | ||||||
|  |             if (size == *len || (swap = realloc(buf, size)) == NULL) { | ||||||
|                 free(buf); |                 free(buf); | ||||||
|                 buf = NULL; |                 buf = NULL; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |             buf = swap; | ||||||
|         } |         } | ||||||
|         fclose(in); |         fclose(in); | ||||||
|     *len = size; |     } | ||||||
|     return buf; |     return buf; | ||||||
| } | } | ||||||
|  |  | ||||||
| int main(int argc, char **argv) | int main(int argc, char **argv) | ||||||
| { | { | ||||||
|     int ret; |     int ret, skip = 0, put = 0; | ||||||
|     unsigned char *source; |     char *arg, *name = NULL; | ||||||
|     unsigned long len, sourcelen, destlen; |     unsigned char *source = NULL, *dest; | ||||||
|  |     size_t len = 0; | ||||||
|  |     unsigned long sourcelen, destlen; | ||||||
|  |  | ||||||
|     if (argc < 2) return 2; |     /* process arguments */ | ||||||
|     source = yank(argv[1], &len); |     while (arg = *++argv, --argc) | ||||||
|     if (source == NULL) return 2; |         if (arg[0] == '-') { | ||||||
|     sourcelen = len; |             if (arg[1] == 'w' && arg[2] == 0) | ||||||
|     ret = puff(NIL, &destlen, source, &sourcelen); |                 put = 1; | ||||||
|     if (ret) |             else if (arg[1] >= '0' && arg[1] <= '9') | ||||||
|         printf("puff() failed with return code %d\n", ret); |                 skip = atoi(arg + 1); | ||||||
|             else { |             else { | ||||||
|         printf("puff() succeeded uncompressing %lu bytes\n", destlen); |                 fprintf(stderr, "invalid option %s\n", arg); | ||||||
|         if (sourcelen < len) printf("%lu compressed bytes unused\n", |                 return 3; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         else if (name != NULL) { | ||||||
|  |             fprintf(stderr, "only one file name allowed\n"); | ||||||
|  |             return 3; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |             name = arg; | ||||||
|  |     source = load(name, &len); | ||||||
|  |     if (source == NULL) { | ||||||
|  |         fprintf(stderr, "memory allocation failure\n"); | ||||||
|  |         return 4; | ||||||
|  |     } | ||||||
|  |     if (len == 0) { | ||||||
|  |         fprintf(stderr, "could not read %s, or it was empty\n", | ||||||
|  |                 name == NULL ? "<stdin>" : name); | ||||||
|  |         free(source); | ||||||
|  |         return 3; | ||||||
|  |     } | ||||||
|  |     if (skip >= len) { | ||||||
|  |         fprintf(stderr, "skip request of %d leaves no input\n", skip); | ||||||
|  |         free(source); | ||||||
|  |         return 3; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* test inflate data with offset skip */ | ||||||
|  |     len -= skip; | ||||||
|  |     sourcelen = (unsigned long)len; | ||||||
|  |     ret = puff(NIL, &destlen, source + skip, &sourcelen); | ||||||
|  |     if (ret) | ||||||
|  |         fprintf(stderr, "puff() failed with return code %d\n", ret); | ||||||
|  |     else { | ||||||
|  |         fprintf(stderr, "puff() succeeded uncompressing %lu bytes\n", destlen); | ||||||
|  |         if (sourcelen < len) fprintf(stderr, "%lu compressed bytes unused\n", | ||||||
|                                      len - sourcelen); |                                      len - sourcelen); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /* if requested, inflate again and write decompressd data to stdout */ | ||||||
|  |     if (put) { | ||||||
|  |         dest = malloc(destlen); | ||||||
|  |         if (dest == NULL) { | ||||||
|  |             fprintf(stderr, "memory allocation failure\n"); | ||||||
|  |             free(source); | ||||||
|  |             return 4; | ||||||
|  |         } | ||||||
|  |         puff(dest, &destlen, source + skip, &sourcelen); | ||||||
|  |         fwrite(dest, 1, destlen, stdout); | ||||||
|  |         free(dest); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* clean up */ | ||||||
|     free(source); |     free(source); | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| /* puff.h | /* puff.h | ||||||
|   Copyright (C) 2002, 2003 Mark Adler, all rights reserved |   Copyright (C) 2002-2008 Mark Adler, all rights reserved | ||||||
|   version 1.7, 3 Mar 2002 |   version 1.9, 10 Jan 2008 | ||||||
|  |  | ||||||
|   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 author be held liable for any damages |   warranty.  In no event will the author be held liable for any damages | ||||||
|   | |||||||
| @@ -1,9 +1,121 @@ | |||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
|  |  | ||||||
| #include "zlib.h" | #include "zlib.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B) | ||||||
|  | { | ||||||
|  |     R->HighPart = A.HighPart - B.HighPart; | ||||||
|  |     if (A.LowPart >= B.LowPart) | ||||||
|  |         R->LowPart = A.LowPart - B.LowPart; | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         R->LowPart = A.LowPart - B.LowPart; | ||||||
|  |         R->HighPart --; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #ifdef _M_X64 | ||||||
|  | // see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc | ||||||
|  | unsigned __int64 __rdtsc(void); | ||||||
|  | void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) | ||||||
|  | { | ||||||
|  |  //   printf("rdtsc = %I64x\n",__rdtsc()); | ||||||
|  |    pbeginTime64->QuadPart=__rdtsc(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) | ||||||
|  | { | ||||||
|  |     LARGE_INTEGER LIres; | ||||||
|  |     unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart)); | ||||||
|  |     LIres.QuadPart=res; | ||||||
|  |    // printf("rdtsc = %I64x\n",__rdtsc()); | ||||||
|  |     return LIres; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | #ifdef _M_IX86 | ||||||
|  | void myGetRDTSC32(LARGE_INTEGER * pbeginTime64) | ||||||
|  | { | ||||||
|  |     DWORD dwEdx,dwEax; | ||||||
|  |     _asm | ||||||
|  |     { | ||||||
|  |         rdtsc | ||||||
|  |         mov dwEax,eax | ||||||
|  |         mov dwEdx,edx | ||||||
|  |     } | ||||||
|  |     pbeginTime64->LowPart=dwEax; | ||||||
|  |     pbeginTime64->HighPart=dwEdx; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) | ||||||
|  | { | ||||||
|  |     myGetRDTSC32(pbeginTime64); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) | ||||||
|  | { | ||||||
|  |     LARGE_INTEGER LIres,endTime64; | ||||||
|  |     myGetRDTSC32(&endTime64); | ||||||
|  |  | ||||||
|  |     LIres.LowPart=LIres.HighPart=0; | ||||||
|  |     MyDoMinus64(&LIres,endTime64,beginTime64); | ||||||
|  |     return LIres; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | void myGetRDTSC32(LARGE_INTEGER * pbeginTime64) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) | ||||||
|  | { | ||||||
|  |     LARGE_INTEGER lr; | ||||||
|  |     lr.QuadPart=0; | ||||||
|  |     return lr; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf) | ||||||
|  | { | ||||||
|  |     if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64))) | ||||||
|  |     { | ||||||
|  |         pbeginTime64->LowPart = GetTickCount(); | ||||||
|  |         pbeginTime64->HighPart = 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) | ||||||
|  | { | ||||||
|  |     LARGE_INTEGER endTime64,ticksPerSecond,ticks; | ||||||
|  |     DWORDLONG ticksShifted,tickSecShifted; | ||||||
|  |     DWORD dwLog=16+0; | ||||||
|  |     DWORD dwRet; | ||||||
|  |     if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64))) | ||||||
|  |         dwRet = (GetTickCount() - beginTime64.LowPart)*1; | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         MyDoMinus64(&ticks,endTime64,beginTime64); | ||||||
|  |         QueryPerformanceFrequency(&ticksPerSecond); | ||||||
|  |  | ||||||
|  |      | ||||||
|  |         { | ||||||
|  |             ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog); | ||||||
|  |             tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog); | ||||||
|  |          | ||||||
|  |         }  | ||||||
|  |  | ||||||
|  |         dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted)); | ||||||
|  |         dwRet *=1; | ||||||
|  |     } | ||||||
|  |     return dwRet; | ||||||
|  | } | ||||||
|  |  | ||||||
| int ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr) | int ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr) | ||||||
| { | { | ||||||
|     FILE* stream; |     FILE* stream; | ||||||
| @@ -43,7 +155,8 @@ int main(int argc, char *argv[]) | |||||||
|     unsigned char* CprPtr; |     unsigned char* CprPtr; | ||||||
|     unsigned char* UncprPtr; |     unsigned char* UncprPtr; | ||||||
|     long lSizeCpr,lSizeUncpr; |     long lSizeCpr,lSizeUncpr; | ||||||
|     DWORD dwGetTick; |     DWORD dwGetTick,dwMsecQP; | ||||||
|  |     LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc; | ||||||
|  |  | ||||||
|     if (argc<=1) |     if (argc<=1) | ||||||
|     { |     { | ||||||
| @@ -71,9 +184,10 @@ int main(int argc, char *argv[]) | |||||||
|     lBufferSizeUncpr = lBufferSizeCpr; |     lBufferSizeUncpr = lBufferSizeCpr; | ||||||
|  |  | ||||||
|     CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress); |     CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress); | ||||||
|     UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress); |  | ||||||
|  |  | ||||||
|  |     BeginCountPerfCounter(&li_qp,TRUE); | ||||||
|     dwGetTick=GetTickCount(); |     dwGetTick=GetTickCount(); | ||||||
|  |     BeginCountRdtsc(&li_rdtsc); | ||||||
|     { |     { | ||||||
|         z_stream zcpr; |         z_stream zcpr; | ||||||
|         int ret=Z_OK; |         int ret=Z_OK; | ||||||
| @@ -101,11 +215,20 @@ int main(int argc, char *argv[]) | |||||||
|         lSizeCpr=zcpr.total_out; |         lSizeCpr=zcpr.total_out; | ||||||
|         deflateEnd(&zcpr); |         deflateEnd(&zcpr); | ||||||
|         dwGetTick=GetTickCount()-dwGetTick; |         dwGetTick=GetTickCount()-dwGetTick; | ||||||
|  |         dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE); | ||||||
|  |         dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE); | ||||||
|         printf("total compress size = %u, in %u step\n",lSizeCpr,step); |         printf("total compress size = %u, in %u step\n",lSizeCpr,step); | ||||||
|         printf("time = %u msec = %f sec\n\n",dwGetTick,dwGetTick/(double)1000.); |         printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.); | ||||||
|  |         printf("defcpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.); | ||||||
|  |         printf("defcpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr); | ||||||
|  |     UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress); | ||||||
|  |  | ||||||
|  |     BeginCountPerfCounter(&li_qp,TRUE); | ||||||
|     dwGetTick=GetTickCount(); |     dwGetTick=GetTickCount(); | ||||||
|  |     BeginCountRdtsc(&li_rdtsc); | ||||||
|     { |     { | ||||||
|         z_stream zcpr; |         z_stream zcpr; | ||||||
|         int ret=Z_OK; |         int ret=Z_OK; | ||||||
| @@ -133,8 +256,12 @@ int main(int argc, char *argv[]) | |||||||
|         lSizeUncpr=zcpr.total_out; |         lSizeUncpr=zcpr.total_out; | ||||||
|         inflateEnd(&zcpr); |         inflateEnd(&zcpr); | ||||||
|         dwGetTick=GetTickCount()-dwGetTick; |         dwGetTick=GetTickCount()-dwGetTick; | ||||||
|  |         dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE); | ||||||
|  |         dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE); | ||||||
|         printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step); |         printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step); | ||||||
|         printf("time = %u msec = %f sec\n\n",dwGetTick,dwGetTick/(double)1000.); |         printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.); | ||||||
|  |         printf("uncpr  time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.); | ||||||
|  |         printf("uncpr  result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (lSizeUncpr==lFileSize) |     if (lSizeUncpr==lFileSize) | ||||||
| @@ -145,5 +272,4 @@ int main(int argc, char *argv[]) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,21 +0,0 @@ | |||||||
| Microsoft Visual Studio Solution File, Format Version 7.00 |  | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" |  | ||||||
| EndProject |  | ||||||
| Global |  | ||||||
| 	GlobalSection(SolutionConfiguration) = preSolution |  | ||||||
| 		ConfigName.0 = Debug |  | ||||||
| 		ConfigName.1 = Release |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(ProjectDependencies) = postSolution |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(ProjectConfiguration) = postSolution |  | ||||||
| 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug.ActiveCfg = Debug|Win32 |  | ||||||
| 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug.Build.0 = Debug|Win32 |  | ||||||
| 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release.ActiveCfg = Release|Win32 |  | ||||||
| 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release.Build.0 = Release|Win32 |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(ExtensibilityGlobals) = postSolution |  | ||||||
| 	EndGlobalSection |  | ||||||
| 	GlobalSection(ExtensibilityAddIns) = postSolution |  | ||||||
| 	EndGlobalSection |  | ||||||
| EndGlobal |  | ||||||
							
								
								
									
										10
									
								
								contrib/testzlib/testzlib.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								contrib/testzlib/testzlib.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | To build testzLib with Visual Studio 2005: | ||||||
|  |  | ||||||
|  | copy to a directory file from : | ||||||
|  | - root of zLib tree | ||||||
|  | - contrib/testzlib | ||||||
|  | - contrib/masmx86 | ||||||
|  | - contrib/masmx64 | ||||||
|  | - contrib/vstudio/vc7 | ||||||
|  |  | ||||||
|  | and open testzlib8.sln | ||||||
| @@ -1,8 +1,8 @@ | |||||||
| Building instructions for the DLL versions of Zlib 1.2.x | Building instructions for the DLL versions of Zlib 1.2.3 | ||||||
| ======================================================= | ======================================================== | ||||||
|  |  | ||||||
| This directory contains projects that build zlib and minizip using | This directory contains projects that build zlib and minizip using | ||||||
| Microsoft Visual C++ 7.0/7.1. | Microsoft Visual C++ 7.0/7.1, and Visual C++ . | ||||||
|  |  | ||||||
| You don't need to build these projects yourself. You can download the | You don't need to build these projects yourself. You can download the | ||||||
| binaries from: | binaries from: | ||||||
| @@ -11,18 +11,36 @@ binaries from: | |||||||
| More information can be found at this site. | More information can be found at this site. | ||||||
|  |  | ||||||
|  |  | ||||||
| Build instructions | Build instructions for Visual Studio 7.x (32 bits) | ||||||
| ------------------ | -------------------------------------------------- | ||||||
| - Unzip zlib*.zip and copy the files from contrib\vstudio\vc7, | - Uncompress current zlib, including all contrib/* files | ||||||
|   from contrib\vstudio\masmx86 and from contrib\minizip into the same |  | ||||||
|   directory. |  | ||||||
| - Download the crtdll library from | - Download the crtdll library from | ||||||
|     http://www.winimage.com/zLibDll/crtdll.zip |     http://www.winimage.com/zLibDll/crtdll.zip | ||||||
|   Unzip crtdll.zip to extract crtdll.lib. |   Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc7. | ||||||
| - If you are using x86, use the Release target. | - Open contrib\vstudio\vc7\zlibvc.sln with Microsoft Visual C++ 7.x | ||||||
| - Open zlibvc.sln with Microsoft Visual C++ 7.0 or 7.1 |  | ||||||
|   (Visual Studio .Net 2002 or 2003). |   (Visual Studio .Net 2002 or 2003). | ||||||
|  |  | ||||||
|  | Build instructions for Visual Studio 2005 (32 bits or 64 bits) | ||||||
|  | -------------------------------------------------------------- | ||||||
|  | - Uncompress current zlib, including all contrib/* files | ||||||
|  | - For 32 bits only: download the crtdll library from | ||||||
|  |     http://www.winimage.com/zLibDll/crtdll.zip | ||||||
|  |   Unzip crtdll.zip to extract crtdll.lib on contrib\vstudio\vc8. | ||||||
|  | - Open contrib\vstudio\vc8\zlibvc.sln with Microsoft Visual C++ 8.0 | ||||||
|  |  | ||||||
|  | Build instructions for Visual Studio 2005 64 bits, PSDK compiler | ||||||
|  | ---------------------------------------------------------------- | ||||||
|  | at the time of writing this text file, Visual Studio 2005 (and  | ||||||
|  |   Microsoft Visual C++ 8.0) is on the beta 2 stage. | ||||||
|  | Using you can get the free 64 bits compiler from Platform SDK,  | ||||||
|  |   which is NOT a beta, and compile using the Visual studio 2005 IDE | ||||||
|  | see http://www.winimage.com/misc/sdk64onvs2005/ for instruction | ||||||
|  |  | ||||||
|  | - Uncompress current zlib, including all contrib/* files | ||||||
|  | - start Visual Studio 2005 from a platform SDK command prompt, using | ||||||
|  |   the /useenv switch | ||||||
|  | - Open contrib\vstudio\vc8\zlibvc.sln with Microsoft Visual C++ 8.0 | ||||||
|  |  | ||||||
|  |  | ||||||
| Important | Important | ||||||
| --------- | --------- | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -19,6 +19,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				Optimization="0" | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||||
| 				MinimalRebuild="TRUE" | 				MinimalRebuild="TRUE" | ||||||
| 				BasicRuntimeChecks="3" | 				BasicRuntimeChecks="3" | ||||||
| @@ -63,6 +64,7 @@ | |||||||
| 				Optimization="2" | 				Optimization="2" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
| 				OmitFramePointers="TRUE" | 				OmitFramePointers="TRUE" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				RuntimeLibrary="4" | 				RuntimeLibrary="4" | ||||||
| @@ -104,7 +106,7 @@ | |||||||
| 			Name="Source Files" | 			Name="Source Files" | ||||||
| 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"> | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath="miniunz.c"> | 				RelativePath="..\..\minizip\miniunz.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<Filter | 		<Filter | ||||||
| @@ -116,7 +118,7 @@ | |||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<File | 		<File | ||||||
| 			RelativePath="zlibwapi.lib"> | 			RelativePath="ReleaseDll\zlibwapi.lib"> | ||||||
| 		</File> | 		</File> | ||||||
| 	</Files> | 	</Files> | ||||||
| 	<Globals> | 	<Globals> | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				Optimization="0" | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||||
| 				MinimalRebuild="TRUE" | 				MinimalRebuild="TRUE" | ||||||
| 				BasicRuntimeChecks="3" | 				BasicRuntimeChecks="3" | ||||||
| @@ -63,6 +64,7 @@ | |||||||
| 				Optimization="2" | 				Optimization="2" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
| 				OmitFramePointers="TRUE" | 				OmitFramePointers="TRUE" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				RuntimeLibrary="4" | 				RuntimeLibrary="4" | ||||||
| @@ -104,7 +106,7 @@ | |||||||
| 			Name="Source Files" | 			Name="Source Files" | ||||||
| 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"> | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath="minizip.c"> | 				RelativePath="..\..\minizip\minizip.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<Filter | 		<Filter | ||||||
| @@ -116,7 +118,7 @@ | |||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<File | 		<File | ||||||
| 			RelativePath="zlibwapi.lib"> | 			RelativePath="ReleaseDll\zlibwapi.lib"> | ||||||
| 		</File> | 		</File> | ||||||
| 	</Files> | 	</Files> | ||||||
| 	<Globals> | 	<Globals> | ||||||
|   | |||||||
| @@ -2,8 +2,8 @@ | |||||||
| <VisualStudioProject | <VisualStudioProject | ||||||
| 	ProjectType="Visual C++" | 	ProjectType="Visual C++" | ||||||
| 	Version="7.00" | 	Version="7.00" | ||||||
| 	Name="testzlib" | 	Name="testZlibDll" | ||||||
| 	ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" | 	ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}" | ||||||
| 	Keyword="Win32Proj"> | 	Keyword="Win32Proj"> | ||||||
| 	<Platforms> | 	<Platforms> | ||||||
| 		<Platform | 		<Platform | ||||||
| @@ -19,6 +19,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				Optimization="0" | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||||
| 				MinimalRebuild="TRUE" | 				MinimalRebuild="TRUE" | ||||||
| 				BasicRuntimeChecks="3" | 				BasicRuntimeChecks="3" | ||||||
| @@ -63,6 +64,7 @@ | |||||||
| 				Optimization="2" | 				Optimization="2" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
| 				OmitFramePointers="TRUE" | 				OmitFramePointers="TRUE" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				RuntimeLibrary="4" | 				RuntimeLibrary="4" | ||||||
| @@ -104,7 +106,7 @@ | |||||||
| 			Name="Source Files" | 			Name="Source Files" | ||||||
| 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"> | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath="testzlib.c"> | 				RelativePath="..\..\testzlib\testzlib.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<Filter | 		<Filter | ||||||
| @@ -116,7 +118,7 @@ | |||||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<File | 		<File | ||||||
| 			RelativePath="zlibwapi.lib"> | 			RelativePath="ReleaseDll\zlibwapi.lib"> | ||||||
| 		</File> | 		</File> | ||||||
| 	</Files> | 	</Files> | ||||||
| 	<Globals> | 	<Globals> | ||||||
| @@ -2,8 +2,8 @@ | |||||||
|  |  | ||||||
| #define IDR_VERSION1  1 | #define IDR_VERSION1  1 | ||||||
| IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE | IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE | ||||||
|   FILEVERSION	 1,2,2,2 |   FILEVERSION	 1,2,3,5 | ||||||
|   PRODUCTVERSION 1,2,2,2 |   PRODUCTVERSION 1,2,3,5 | ||||||
|   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK |   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK | ||||||
|   FILEFLAGS	0 |   FILEFLAGS	0 | ||||||
|   FILEOS	VOS_DOS_WINDOWS32 |   FILEOS	VOS_DOS_WINDOWS32 | ||||||
| @@ -17,12 +17,12 @@ BEGIN | |||||||
|  |  | ||||||
|     BEGIN |     BEGIN | ||||||
|       VALUE "FileDescription", "zlib data compression library\0" |       VALUE "FileDescription", "zlib data compression library\0" | ||||||
|       VALUE "FileVersion",	"1.2.2.2\0" |       VALUE "FileVersion",	"1.2.3.5\0" | ||||||
|       VALUE "InternalName",	"zlib\0" |       VALUE "InternalName",	"zlib\0" | ||||||
|       VALUE "OriginalFilename",	"zlib.dll\0" |       VALUE "OriginalFilename",	"zlib.dll\0" | ||||||
|       VALUE "ProductName",	"ZLib.DLL\0" |       VALUE "ProductName",	"ZLib.DLL\0" | ||||||
|       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" | ||||||
|       VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0" |       VALUE "LegalCopyright", "(C) 1995-2006 Jean-loup Gailly & Mark Adler\0" | ||||||
|     END |     END | ||||||
|   END |   END | ||||||
|   BLOCK "VarFileInfo" |   BLOCK "VarFileInfo" | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				Optimization="0" | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| 				RuntimeLibrary="5" | 				RuntimeLibrary="5" | ||||||
| @@ -61,6 +62,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -102,6 +104,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;ASMV;ASMINF" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;ASMV;ASMINF" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -117,7 +120,7 @@ | |||||||
| 				Name="VCCustomBuildTool"/> | 				Name="VCCustomBuildTool"/> | ||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCLibrarianTool" | 				Name="VCLibrarianTool" | ||||||
| 				AdditionalOptions="gvmat32.obj inffas32.obj /NODEFAULTLIB " | 				AdditionalOptions="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj /NODEFAULTLIB " | ||||||
| 				OutputFile=".\zlibstat\zlibstat.lib" | 				OutputFile=".\zlibstat\zlibstat.lib" | ||||||
| 				SuppressStartupBanner="TRUE"/> | 				SuppressStartupBanner="TRUE"/> | ||||||
| 			<Tool | 			<Tool | ||||||
| @@ -144,6 +147,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -182,49 +186,61 @@ | |||||||
| 			Name="Source Files" | 			Name="Source Files" | ||||||
| 			Filter=""> | 			Filter=""> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\adler32.c"> | 				RelativePath="..\..\..\adler32.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\compress.c"> | 				RelativePath="..\..\..\compress.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\crc32.c"> | 				RelativePath="..\..\..\crc32.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\deflate.c"> | 				RelativePath="..\..\..\deflate.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\gvmat32c.c"> | 				RelativePath="..\..\masmx86\gvmat32c.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\gzio.c"> | 				RelativePath="..\..\..\gzclose.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\infback.c"> | 				RelativePath="..\..\..\gzio.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inffast.c"> | 				RelativePath="..\..\..\gzlib.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inflate.c"> | 				RelativePath="..\..\..\gzread.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inftrees.c"> | 				RelativePath="..\..\..\gzwrite.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\ioapi.c"> | 				RelativePath="..\..\..\infback.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\trees.c"> | 				RelativePath="..\..\..\inffast.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\uncompr.c"> | 				RelativePath="..\..\..\inflate.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\unzip.c"> | 				RelativePath="..\..\..\inftrees.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zip.c"> | 				RelativePath="..\..\minizip\ioapi.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\trees.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\uncompr.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\unzip.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\zip.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zlib.rc"> | 				RelativePath=".\zlib.rc"> | ||||||
| @@ -233,7 +249,7 @@ | |||||||
| 				RelativePath=".\zlibvc.def"> | 				RelativePath=".\zlibvc.def"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zutil.c"> | 				RelativePath="..\..\..\zutil.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 	</Files> | 	</Files> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
|  |  | ||||||
| VERSION		1.21 | VERSION		1.23 | ||||||
|  |  | ||||||
| HEAPSIZE	1048576,8192 | HEAPSIZE	1048576,8192 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,6 +7,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", | |||||||
| EndProject | EndProject | ||||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" | ||||||
| EndProject | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testZlibDll", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}" | ||||||
|  | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfiguration) = preSolution | 	GlobalSection(SolutionConfiguration) = preSolution | ||||||
| 		ConfigName.0 = Debug | 		ConfigName.0 = Debug | ||||||
| @@ -58,6 +60,16 @@ Global | |||||||
| 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm.Build.0 = Release|Win32 | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm.Build.0 = Release|Win32 | ||||||
| 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32 | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32 | ||||||
| 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.Build.0 = Release|Win32 | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutCrtdll.Build.0 = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Debug.ActiveCfg = Debug|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Debug.Build.0 = Debug|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Release.ActiveCfg = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.Release.Build.0 = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseAxp.ActiveCfg = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseAxp.Build.0 = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutAsm.ActiveCfg = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutAsm.Build.0 = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutCrtdll.ActiveCfg = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654C}.ReleaseWithoutCrtdll.Build.0 = Release|Win32 | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(ExtensibilityGlobals) = postSolution | 	GlobalSection(ExtensibilityGlobals) = postSolution | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				Optimization="0" | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| 				RuntimeLibrary="1" | 				RuntimeLibrary="1" | ||||||
| @@ -35,7 +36,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCLinkerTool" | 				Name="VCLinkerTool" | ||||||
| 				AdditionalOptions="/MACHINE:I386" | 				AdditionalOptions="/MACHINE:I386" | ||||||
| 				AdditionalDependencies="gvmat32.obj inffas32.obj" | 				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj" | ||||||
| 				OutputFile=".\DebugDll\zlibwapi.dll" | 				OutputFile=".\DebugDll\zlibwapi.dll" | ||||||
| 				LinkIncremental="2" | 				LinkIncremental="2" | ||||||
| 				SuppressStartupBanner="TRUE" | 				SuppressStartupBanner="TRUE" | ||||||
| @@ -72,10 +73,12 @@ | |||||||
| 			IntermediateDirectory=".\zlibDllWithoutAsm" | 			IntermediateDirectory=".\zlibDllWithoutAsm" | ||||||
| 			ConfigurationType="2" | 			ConfigurationType="2" | ||||||
| 			UseOfMFC="0" | 			UseOfMFC="0" | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="FALSE"> | 			ATLMinimizesCRunTimeLibraryUsage="FALSE" | ||||||
|  | 			WholeProgramOptimization="TRUE"> | ||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI" | 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -134,10 +137,12 @@ | |||||||
| 			IntermediateDirectory=".\zlibDllWithoutCrtDll" | 			IntermediateDirectory=".\zlibDllWithoutCrtDll" | ||||||
| 			ConfigurationType="2" | 			ConfigurationType="2" | ||||||
| 			UseOfMFC="0" | 			UseOfMFC="0" | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="FALSE"> | 			ATLMinimizesCRunTimeLibraryUsage="FALSE" | ||||||
|  | 			WholeProgramOptimization="TRUE"> | ||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -156,7 +161,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCLinkerTool" | 				Name="VCLinkerTool" | ||||||
| 				AdditionalOptions="/MACHINE:I386" | 				AdditionalOptions="/MACHINE:I386" | ||||||
| 				AdditionalDependencies="gvmat32.obj inffas32.obj " | 				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj " | ||||||
| 				OutputFile=".\zlibDllWithoutCrtDll\zlibwapi.dll" | 				OutputFile=".\zlibDllWithoutCrtDll\zlibwapi.dll" | ||||||
| 				LinkIncremental="1" | 				LinkIncremental="1" | ||||||
| 				SuppressStartupBanner="TRUE" | 				SuppressStartupBanner="TRUE" | ||||||
| @@ -196,10 +201,12 @@ | |||||||
| 			IntermediateDirectory=".\zlibvc__" | 			IntermediateDirectory=".\zlibvc__" | ||||||
| 			ConfigurationType="2" | 			ConfigurationType="2" | ||||||
| 			UseOfMFC="0" | 			UseOfMFC="0" | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="FALSE"> | 			ATLMinimizesCRunTimeLibraryUsage="FALSE" | ||||||
|  | 			WholeProgramOptimization="TRUE"> | ||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI" | 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -256,10 +263,12 @@ | |||||||
| 			IntermediateDirectory=".\ReleaseDll" | 			IntermediateDirectory=".\ReleaseDll" | ||||||
| 			ConfigurationType="2" | 			ConfigurationType="2" | ||||||
| 			UseOfMFC="0" | 			UseOfMFC="0" | ||||||
| 			ATLMinimizesCRunTimeLibraryUsage="FALSE"> | 			ATLMinimizesCRunTimeLibraryUsage="FALSE" | ||||||
|  | 			WholeProgramOptimization="TRUE"> | ||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCCLCompilerTool" | 				Name="VCCLCompilerTool" | ||||||
| 				InlineFunctionExpansion="1" | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
| 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | 				PreprocessorDefinitions="WIN32,ZLIB_WINAPI,ASMV,ASMINF" | ||||||
| 				StringPooling="TRUE" | 				StringPooling="TRUE" | ||||||
| 				ExceptionHandling="FALSE" | 				ExceptionHandling="FALSE" | ||||||
| @@ -278,7 +287,7 @@ | |||||||
| 			<Tool | 			<Tool | ||||||
| 				Name="VCLinkerTool" | 				Name="VCLinkerTool" | ||||||
| 				AdditionalOptions="/MACHINE:I386" | 				AdditionalOptions="/MACHINE:I386" | ||||||
| 				AdditionalDependencies="gvmat32.obj inffas32.obj crtdll.lib" | 				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj crtdll.lib" | ||||||
| 				OutputFile=".\ReleaseDll\zlibwapi.dll" | 				OutputFile=".\ReleaseDll\zlibwapi.dll" | ||||||
| 				LinkIncremental="1" | 				LinkIncremental="1" | ||||||
| 				SuppressStartupBanner="TRUE" | 				SuppressStartupBanner="TRUE" | ||||||
| @@ -318,19 +327,19 @@ | |||||||
| 			Name="Source Files" | 			Name="Source Files" | ||||||
| 			Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"> | 			Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\adler32.c"> | 				RelativePath="..\..\..\adler32.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\compress.c"> | 				RelativePath="..\..\..\compress.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\crc32.c"> | 				RelativePath="..\..\..\crc32.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\deflate.c"> | 				RelativePath="..\..\..\deflate.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\gvmat32c.c"> | 				RelativePath="..\..\masmx86\gvmat32c.c"> | ||||||
| 				<FileConfiguration | 				<FileConfiguration | ||||||
| 					Name="ReleaseWithoutAsm|Win32" | 					Name="ReleaseWithoutAsm|Win32" | ||||||
| 					ExcludedFromBuild="TRUE"> | 					ExcludedFromBuild="TRUE"> | ||||||
| @@ -339,34 +348,46 @@ | |||||||
| 				</FileConfiguration> | 				</FileConfiguration> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\gzio.c"> | 				RelativePath="..\..\..\gzclose.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\infback.c"> | 				RelativePath="..\..\..\gzio.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inffast.c"> | 				RelativePath="..\..\..\gzlib.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inflate.c"> | 				RelativePath="..\..\..\gzread.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inftrees.c"> | 				RelativePath="..\..\..\gzwrite.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\ioapi.c"> | 				RelativePath="..\..\..\infback.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\iowin32.c"> | 				RelativePath="..\..\..\inffast.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\trees.c"> | 				RelativePath="..\..\..\inflate.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\uncompr.c"> | 				RelativePath="..\..\..\inftrees.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\unzip.c"> | 				RelativePath="..\..\minizip\ioapi.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\iowin32.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\trees.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\uncompr.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\unzip.c"> | ||||||
| 				<FileConfiguration | 				<FileConfiguration | ||||||
| 					Name="Release|Win32"> | 					Name="Release|Win32"> | ||||||
| 					<Tool | 					<Tool | ||||||
| @@ -376,7 +397,7 @@ | |||||||
| 				</FileConfiguration> | 				</FileConfiguration> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zip.c"> | 				RelativePath="..\..\minizip\zip.c"> | ||||||
| 				<FileConfiguration | 				<FileConfiguration | ||||||
| 					Name="Release|Win32"> | 					Name="Release|Win32"> | ||||||
| 					<Tool | 					<Tool | ||||||
| @@ -392,38 +413,38 @@ | |||||||
| 				RelativePath=".\zlibvc.def"> | 				RelativePath=".\zlibvc.def"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zutil.c"> | 				RelativePath="..\..\..\zutil.c"> | ||||||
| 			</File> | 			</File> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<Filter | 		<Filter | ||||||
| 			Name="Header Files" | 			Name="Header Files" | ||||||
| 			Filter="h;hpp;hxx;hm;inl;fi;fd"> | 			Filter="h;hpp;hxx;hm;inl;fi;fd"> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\deflate.h"> | 				RelativePath="..\..\..\deflate.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\infblock.h"> | 				RelativePath="..\..\..\infblock.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\infcodes.h"> | 				RelativePath="..\..\..\infcodes.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inffast.h"> | 				RelativePath="..\..\..\inffast.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\inftrees.h"> | 				RelativePath="..\..\..\inftrees.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\infutil.h"> | 				RelativePath="..\..\..\infutil.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zconf.h"> | 				RelativePath="..\..\..\zconf.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zlib.h"> | 				RelativePath="..\..\..\zlib.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 			<File | 			<File | ||||||
| 				RelativePath=".\zutil.h"> | 				RelativePath="..\..\..\zutil.h"> | ||||||
| 			</File> | 			</File> | ||||||
| 		</Filter> | 		</Filter> | ||||||
| 		<Filter | 		<Filter | ||||||
|   | |||||||
							
								
								
									
										566
									
								
								contrib/vstudio/vc8/miniunz.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										566
									
								
								contrib/vstudio/vc8/miniunz.vcproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,566 @@ | |||||||
|  | <?xml version="1.0" encoding="Windows-1252"?> | ||||||
|  | <VisualStudioProject | ||||||
|  | 	ProjectType="Visual C++" | ||||||
|  | 	Version="8,00" | ||||||
|  | 	Name="miniunz" | ||||||
|  | 	ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}" | ||||||
|  | 	Keyword="Win32Proj" | ||||||
|  | 	> | ||||||
|  | 	<Platforms> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Win32" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="x64" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Itanium" | ||||||
|  | 		/> | ||||||
|  | 	</Platforms> | ||||||
|  | 	<ToolFiles> | ||||||
|  | 	</ToolFiles> | ||||||
|  | 	<Configurations> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Win32" | ||||||
|  | 			OutputDirectory="x86\MiniUnzip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="1" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="4" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/miniunz.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/miniunz.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|x64" | ||||||
|  | 			OutputDirectory="x64\MiniUnzip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/miniunz.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/miniunz.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="17" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Itanium" | ||||||
|  | 			OutputDirectory="ia64\MiniUnzip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/miniunz.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/miniunz.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Win32" | ||||||
|  | 			OutputDirectory="x86\MiniUnzip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/miniunz.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|x64" | ||||||
|  | 			OutputDirectory="x64\MiniUnzip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/miniunz.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="17" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Itanium" | ||||||
|  | 			OutputDirectory="ia64\MiniUnzip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/miniunz.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 	</Configurations> | ||||||
|  | 	<References> | ||||||
|  | 	</References> | ||||||
|  | 	<Files> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Source Files" | ||||||
|  | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm" | ||||||
|  | 			> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\miniunz.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Header Files" | ||||||
|  | 			Filter="h;hpp;hxx;hm;inl;inc" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Resource Files" | ||||||
|  | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 	</Files> | ||||||
|  | 	<Globals> | ||||||
|  | 	</Globals> | ||||||
|  | </VisualStudioProject> | ||||||
							
								
								
									
										563
									
								
								contrib/vstudio/vc8/minizip.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										563
									
								
								contrib/vstudio/vc8/minizip.vcproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,563 @@ | |||||||
|  | <?xml version="1.0" encoding="Windows-1252"?> | ||||||
|  | <VisualStudioProject | ||||||
|  | 	ProjectType="Visual C++" | ||||||
|  | 	Version="8,00" | ||||||
|  | 	Name="minizip" | ||||||
|  | 	ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" | ||||||
|  | 	Keyword="Win32Proj" | ||||||
|  | 	> | ||||||
|  | 	<Platforms> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Win32" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="x64" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Itanium" | ||||||
|  | 		/> | ||||||
|  | 	</Platforms> | ||||||
|  | 	<ToolFiles> | ||||||
|  | 	</ToolFiles> | ||||||
|  | 	<Configurations> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Win32" | ||||||
|  | 			OutputDirectory="x86\MiniZip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="1" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="4" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/minizip.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/minizip.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|x64" | ||||||
|  | 			OutputDirectory="x64\$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\$(ConfigurationName)" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/minizip.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/minizip.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="17" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Itanium" | ||||||
|  | 			OutputDirectory="ia64\$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\$(ConfigurationName)" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/minizip.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/minizip.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Win32" | ||||||
|  | 			OutputDirectory="x86\MiniZip$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/minizip.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|x64" | ||||||
|  | 			OutputDirectory="x64\$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\$(ConfigurationName)" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/minizip.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="17" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Itanium" | ||||||
|  | 			OutputDirectory="ia64\$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\$(ConfigurationName)" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/minizip.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 	</Configurations> | ||||||
|  | 	<References> | ||||||
|  | 	</References> | ||||||
|  | 	<Files> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Source Files" | ||||||
|  | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm" | ||||||
|  | 			> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\minizip.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Header Files" | ||||||
|  | 			Filter="h;hpp;hxx;hm;inl;inc" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Resource Files" | ||||||
|  | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 	</Files> | ||||||
|  | 	<Globals> | ||||||
|  | 	</Globals> | ||||||
|  | </VisualStudioProject> | ||||||
							
								
								
									
										948
									
								
								contrib/vstudio/vc8/testzlib.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										948
									
								
								contrib/vstudio/vc8/testzlib.vcproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,948 @@ | |||||||
|  | <?xml version="1.0" encoding="Windows-1252"?> | ||||||
|  | <VisualStudioProject | ||||||
|  | 	ProjectType="Visual C++" | ||||||
|  | 	Version="8,00" | ||||||
|  | 	Name="testzlib" | ||||||
|  | 	ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" | ||||||
|  | 	RootNamespace="testzlib" | ||||||
|  | 	Keyword="Win32Proj" | ||||||
|  | 	> | ||||||
|  | 	<Platforms> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Win32" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="x64" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Itanium" | ||||||
|  | 		/> | ||||||
|  | 	</Platforms> | ||||||
|  | 	<ToolFiles> | ||||||
|  | 	</ToolFiles> | ||||||
|  | 	<Configurations> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Win32" | ||||||
|  | 			OutputDirectory="x86\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="1" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerOutput="4" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="4" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/testzlib.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|x64" | ||||||
|  | 			OutputDirectory="x64\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Itanium" | ||||||
|  | 			OutputDirectory="ia64\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerOutput="4" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/testzlib.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="ReleaseWithoutAsm|Win32" | ||||||
|  | 			OutputDirectory="x86\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			WholeProgramOptimization="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="ReleaseWithoutAsm|x64" | ||||||
|  | 			OutputDirectory="x64\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			WholeProgramOptimization="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="ReleaseWithoutAsm|Itanium" | ||||||
|  | 			OutputDirectory="ia64\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			WholeProgramOptimization="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Win32" | ||||||
|  | 			OutputDirectory="x86\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			WholeProgramOptimization="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|x64" | ||||||
|  | 			OutputDirectory="x64\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			WholeProgramOptimization="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Itanium" | ||||||
|  | 			OutputDirectory="ia64\TestZlib$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			WholeProgramOptimization="1" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\.." | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 	</Configurations> | ||||||
|  | 	<References> | ||||||
|  | 	</References> | ||||||
|  | 	<Files> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Source Files" | ||||||
|  | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm" | ||||||
|  | 			> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\adler32.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\compress.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\crc32.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\deflate.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\masmx86\gvmat32c.c" | ||||||
|  | 				> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|x64" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|x64" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|x64" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Win64 (AMD64)" | ||||||
|  | 					ExcludedFromBuild="TRUE" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Win64 (AMD64)" | ||||||
|  | 					ExcludedFromBuild="TRUE" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseAsm|Win64 (AMD64)" | ||||||
|  | 					ExcludedFromBuild="TRUE" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\infback.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\masmx64\inffas8664.c" | ||||||
|  | 				> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Win32" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|Win32" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Win32" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\inffast.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\inflate.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\inftrees.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\testzlib\testzlib.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\trees.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\uncompr.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\zutil.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Header Files" | ||||||
|  | 			Filter="h;hpp;hxx;hm;inl;inc" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Resource Files" | ||||||
|  | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 	</Files> | ||||||
|  | 	<Globals> | ||||||
|  | 	</Globals> | ||||||
|  | </VisualStudioProject> | ||||||
							
								
								
									
										567
									
								
								contrib/vstudio/vc8/testzlibdll.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										567
									
								
								contrib/vstudio/vc8/testzlibdll.vcproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,567 @@ | |||||||
|  | <?xml version="1.0" encoding="Windows-1252"?> | ||||||
|  | <VisualStudioProject | ||||||
|  | 	ProjectType="Visual C++" | ||||||
|  | 	Version="8,00" | ||||||
|  | 	Name="TestZlibDll" | ||||||
|  | 	ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694366A}" | ||||||
|  | 	Keyword="Win32Proj" | ||||||
|  | 	SignManifests="true" | ||||||
|  | 	> | ||||||
|  | 	<Platforms> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Win32" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="x64" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Itanium" | ||||||
|  | 		/> | ||||||
|  | 	</Platforms> | ||||||
|  | 	<ToolFiles> | ||||||
|  | 	</ToolFiles> | ||||||
|  | 	<Configurations> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Win32" | ||||||
|  | 			OutputDirectory="x86\TestZlibDll$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="1" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="4" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/testzlib.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|x64" | ||||||
|  | 			OutputDirectory="x64\TestZlibDll$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/testzlib.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="17" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Itanium" | ||||||
|  | 			OutputDirectory="ia64\TestZlibDll$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64" | ||||||
|  | 				MinimalRebuild="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="2" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				ProgramDatabaseFile="$(OutDir)/testzlib.pdb" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Win32" | ||||||
|  | 			OutputDirectory="x86\TestZlibDll$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|x64" | ||||||
|  | 			OutputDirectory="x64\TestZlibDll$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="17" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Itanium" | ||||||
|  | 			OutputDirectory="ia64\TestZlibDll$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="1" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			CharacterSet="2" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="2" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				OmitFramePointers="true" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\minizip" | ||||||
|  | 				PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				BasicRuntimeChecks="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				UsePrecompiledHeader="0" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLinkerTool" | ||||||
|  | 				AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib" | ||||||
|  | 				OutputFile="$(OutDir)/testzlib.exe" | ||||||
|  | 				LinkIncremental="1" | ||||||
|  | 				GenerateManifest="false" | ||||||
|  | 				GenerateDebugInformation="true" | ||||||
|  | 				SubSystem="1" | ||||||
|  | 				OptimizeReferences="2" | ||||||
|  | 				EnableCOMDATFolding="2" | ||||||
|  | 				OptimizeForWindows98="1" | ||||||
|  | 				TargetMachine="5" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManifestTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCAppVerifierTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebDeploymentTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 	</Configurations> | ||||||
|  | 	<References> | ||||||
|  | 	</References> | ||||||
|  | 	<Files> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Source Files" | ||||||
|  | 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm" | ||||||
|  | 			> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\testzlib\testzlib.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Header Files" | ||||||
|  | 			Filter="h;hpp;hxx;hm;inl;inc" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Resource Files" | ||||||
|  | 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | ||||||
|  | 			> | ||||||
|  | 		</Filter> | ||||||
|  | 	</Files> | ||||||
|  | 	<Globals> | ||||||
|  | 	</Globals> | ||||||
|  | </VisualStudioProject> | ||||||
							
								
								
									
										32
									
								
								contrib/vstudio/vc8/zlib.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								contrib/vstudio/vc8/zlib.rc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | #include <windows.h> | ||||||
|  |  | ||||||
|  | #define IDR_VERSION1  1 | ||||||
|  | IDR_VERSION1	VERSIONINFO	MOVEABLE IMPURE LOADONCALL DISCARDABLE | ||||||
|  |   FILEVERSION	 1,2,3,0 | ||||||
|  |   PRODUCTVERSION 1,2,3,0 | ||||||
|  |   FILEFLAGSMASK	VS_FFI_FILEFLAGSMASK | ||||||
|  |   FILEFLAGS	0 | ||||||
|  |   FILEOS	VOS_DOS_WINDOWS32 | ||||||
|  |   FILETYPE	VFT_DLL | ||||||
|  |   FILESUBTYPE	0	// not used | ||||||
|  | BEGIN | ||||||
|  |   BLOCK "StringFileInfo" | ||||||
|  |   BEGIN | ||||||
|  |     BLOCK "040904E4" | ||||||
|  |     //language ID = U.S. English, char set = Windows, Multilingual | ||||||
|  |  | ||||||
|  |     BEGIN | ||||||
|  |       VALUE "FileDescription", "zlib data compression library\0" | ||||||
|  |       VALUE "FileVersion",	"1.2.3.0\0" | ||||||
|  |       VALUE "InternalName",	"zlib\0" | ||||||
|  |       VALUE "OriginalFilename",	"zlib.dll\0" | ||||||
|  |       VALUE "ProductName",	"ZLib.DLL\0" | ||||||
|  |       VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" | ||||||
|  |       VALUE "LegalCopyright", "(C) 1995-2003 Jean-loup Gailly & Mark Adler\0" | ||||||
|  |     END | ||||||
|  |   END | ||||||
|  |   BLOCK "VarFileInfo" | ||||||
|  |   BEGIN | ||||||
|  |     VALUE "Translation", 0x0409, 1252 | ||||||
|  |   END | ||||||
|  | END | ||||||
							
								
								
									
										881
									
								
								contrib/vstudio/vc8/zlibstat.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										881
									
								
								contrib/vstudio/vc8/zlibstat.vcproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,881 @@ | |||||||
|  | <?xml version="1.0" encoding="Windows-1252"?> | ||||||
|  | <VisualStudioProject | ||||||
|  | 	ProjectType="Visual C++" | ||||||
|  | 	Version="8,00" | ||||||
|  | 	Name="zlibstat" | ||||||
|  | 	ProjectGUID="{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" | ||||||
|  | 	> | ||||||
|  | 	<Platforms> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Win32" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="x64" | ||||||
|  | 		/> | ||||||
|  | 		<Platform | ||||||
|  | 			Name="Itanium" | ||||||
|  | 		/> | ||||||
|  | 	</Platforms> | ||||||
|  | 	<ToolFiles> | ||||||
|  | 	</ToolFiles> | ||||||
|  | 	<Configurations> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Win32" | ||||||
|  | 			OutputDirectory="x86\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="1" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|x64" | ||||||
|  | 			OutputDirectory="x64\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Debug|Itanium" | ||||||
|  | 			OutputDirectory="ia64\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				Optimization="0" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="3" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 				Detect64BitPortabilityProblems="true" | ||||||
|  | 				DebugInformationFormat="1" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Win32" | ||||||
|  | 			OutputDirectory="x86\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ASMV;ASMINF" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB" | ||||||
|  | 				AdditionalDependencies="..\..\masmx86\gvmat32.obj ..\..\masmx86\inffas32.obj " | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|x64" | ||||||
|  | 			OutputDirectory="x64\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ASMV;ASMINF;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB" | ||||||
|  | 				AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj " | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="Release|Itanium" | ||||||
|  | 			OutputDirectory="ia64\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="ReleaseWithoutAsm|Win32" | ||||||
|  | 			OutputDirectory="x86\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="0" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="ReleaseWithoutAsm|x64" | ||||||
|  | 			OutputDirectory="x64\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="3" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 		<Configuration | ||||||
|  | 			Name="ReleaseWithoutAsm|Itanium" | ||||||
|  | 			OutputDirectory="ia64\ZlibStat$(ConfigurationName)" | ||||||
|  | 			IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp" | ||||||
|  | 			ConfigurationType="4" | ||||||
|  | 			InheritedPropertySheets="UpgradeFromVC70.vsprops" | ||||||
|  | 			UseOfMFC="0" | ||||||
|  | 			ATLMinimizesCRunTimeLibraryUsage="false" | ||||||
|  | 			> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCustomBuildTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXMLDataGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCWebServiceProxyGeneratorTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCMIDLTool" | ||||||
|  | 				TargetEnvironment="2" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCCLCompilerTool" | ||||||
|  | 				InlineFunctionExpansion="1" | ||||||
|  | 				AdditionalIncludeDirectories="..\..\..;..\..\masmx86" | ||||||
|  | 				PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;WIN64" | ||||||
|  | 				StringPooling="true" | ||||||
|  | 				ExceptionHandling="0" | ||||||
|  | 				RuntimeLibrary="2" | ||||||
|  | 				BufferSecurityCheck="false" | ||||||
|  | 				EnableFunctionLevelLinking="true" | ||||||
|  | 				PrecompiledHeaderFile="$(IntDir)/zlibstat.pch" | ||||||
|  | 				AssemblerListingLocation="$(IntDir)\" | ||||||
|  | 				ObjectFile="$(IntDir)\" | ||||||
|  | 				ProgramDataBaseFileName="$(OutDir)\" | ||||||
|  | 				WarningLevel="3" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCManagedResourceCompilerTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCResourceCompilerTool" | ||||||
|  | 				Culture="1036" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPreLinkEventTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCLibrarianTool" | ||||||
|  | 				AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB" | ||||||
|  | 				OutputFile="$(OutDir)\zlibstat.lib" | ||||||
|  | 				SuppressStartupBanner="true" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCALinkTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCXDCMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCBscMakeTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCFxCopTool" | ||||||
|  | 			/> | ||||||
|  | 			<Tool | ||||||
|  | 				Name="VCPostBuildEventTool" | ||||||
|  | 			/> | ||||||
|  | 		</Configuration> | ||||||
|  | 	</Configurations> | ||||||
|  | 	<References> | ||||||
|  | 	</References> | ||||||
|  | 	<Files> | ||||||
|  | 		<Filter | ||||||
|  | 			Name="Source Files" | ||||||
|  | 			> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\adler32.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\compress.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\crc32.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\deflate.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\masmx86\gvmat32c.c" | ||||||
|  | 				> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|x64" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|x64" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|x64" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\gzclose.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\gzio.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\gzlib.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\gzread.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\gzwrite.c"> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\infback.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\masmx64\inffas8664.c" | ||||||
|  | 				> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Win32" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Debug|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Win32" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="Release|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|Win32" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 				<FileConfiguration | ||||||
|  | 					Name="ReleaseWithoutAsm|Itanium" | ||||||
|  | 					ExcludedFromBuild="true" | ||||||
|  | 					> | ||||||
|  | 					<Tool | ||||||
|  | 						Name="VCCLCompilerTool" | ||||||
|  | 					/> | ||||||
|  | 				</FileConfiguration> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\inffast.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\inflate.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\inftrees.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\ioapi.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\trees.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\uncompr.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\unzip.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\minizip\zip.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath=".\zlib.rc" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath=".\zlibvc.def" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 			<File | ||||||
|  | 				RelativePath="..\..\..\zutil.c" | ||||||
|  | 				> | ||||||
|  | 			</File> | ||||||
|  | 		</Filter> | ||||||
|  | 	</Files> | ||||||
|  | 	<Globals> | ||||||
|  | 	</Globals> | ||||||
|  | </VisualStudioProject> | ||||||
							
								
								
									
										92
									
								
								contrib/vstudio/vc8/zlibvc.def
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								contrib/vstudio/vc8/zlibvc.def
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | |||||||
|  |  | ||||||
|  | VERSION		1.23 | ||||||
|  |  | ||||||
|  | HEAPSIZE	1048576,8192 | ||||||
|  |  | ||||||
|  | EXPORTS | ||||||
|  |         adler32                                  @1 | ||||||
|  |         compress                                 @2 | ||||||
|  |         crc32                                    @3 | ||||||
|  |         deflate                                  @4 | ||||||
|  |         deflateCopy                              @5 | ||||||
|  |         deflateEnd                               @6 | ||||||
|  |         deflateInit2_                            @7 | ||||||
|  |         deflateInit_                             @8 | ||||||
|  |         deflateParams                            @9 | ||||||
|  |         deflateReset                             @10 | ||||||
|  |         deflateSetDictionary                     @11 | ||||||
|  |         gzclose                                  @12 | ||||||
|  |         gzdopen                                  @13 | ||||||
|  |         gzerror                                  @14 | ||||||
|  |         gzflush                                  @15 | ||||||
|  |         gzopen                                   @16 | ||||||
|  |         gzread                                   @17 | ||||||
|  |         gzwrite                                  @18 | ||||||
|  |         inflate                                  @19 | ||||||
|  |         inflateEnd                               @20 | ||||||
|  |         inflateInit2_                            @21 | ||||||
|  |         inflateInit_                             @22 | ||||||
|  |         inflateReset                             @23 | ||||||
|  |         inflateSetDictionary                     @24 | ||||||
|  |         inflateSync                              @25 | ||||||
|  |         uncompress                               @26 | ||||||
|  |         zlibVersion                              @27 | ||||||
|  |         gzprintf                                 @28 | ||||||
|  |         gzputc                                   @29 | ||||||
|  |         gzgetc                                   @30 | ||||||
|  |         gzseek                                   @31 | ||||||
|  |         gzrewind                                 @32 | ||||||
|  |         gztell                                   @33 | ||||||
|  |         gzeof                                    @34 | ||||||
|  |         gzsetparams                              @35 | ||||||
|  |         zError                                   @36 | ||||||
|  |         inflateSyncPoint                         @37 | ||||||
|  |         get_crc_table                            @38 | ||||||
|  |         compress2                                @39 | ||||||
|  |         gzputs                                   @40 | ||||||
|  |         gzgets                                   @41 | ||||||
|  |         inflateCopy                              @42 | ||||||
|  |         inflateBackInit_                         @43 | ||||||
|  |         inflateBack                              @44 | ||||||
|  |         inflateBackEnd                           @45 | ||||||
|  |         compressBound                            @46 | ||||||
|  |         deflateBound                             @47 | ||||||
|  |         gzclearerr                               @48 | ||||||
|  |         gzungetc                                 @49 | ||||||
|  |         zlibCompileFlags                         @50 | ||||||
|  |         deflatePrime                             @51 | ||||||
|  |  | ||||||
|  |         unzOpen                                  @61 | ||||||
|  |         unzClose                                 @62 | ||||||
|  |         unzGetGlobalInfo                         @63 | ||||||
|  |         unzGetCurrentFileInfo                    @64 | ||||||
|  |         unzGoToFirstFile                         @65 | ||||||
|  |         unzGoToNextFile                          @66 | ||||||
|  |         unzOpenCurrentFile                       @67 | ||||||
|  |         unzReadCurrentFile                       @68 | ||||||
|  |         unzOpenCurrentFile3                      @69 | ||||||
|  |         unztell                                  @70 | ||||||
|  |         unzeof                                   @71 | ||||||
|  |         unzCloseCurrentFile                      @72 | ||||||
|  |         unzGetGlobalComment                      @73 | ||||||
|  |         unzStringFileNameCompare                 @74 | ||||||
|  |         unzLocateFile                            @75 | ||||||
|  |         unzGetLocalExtrafield                    @76 | ||||||
|  |         unzOpen2                                 @77 | ||||||
|  |         unzOpenCurrentFile2                      @78 | ||||||
|  |         unzOpenCurrentFilePassword               @79 | ||||||
|  |  | ||||||
|  |         zipOpen                                  @80 | ||||||
|  |         zipOpenNewFileInZip                      @81 | ||||||
|  |         zipWriteInFileInZip                      @82 | ||||||
|  |         zipCloseFileInZip                        @83 | ||||||
|  |         zipClose                                 @84 | ||||||
|  |         zipOpenNewFileInZip2                     @86 | ||||||
|  |         zipCloseFileInZipRaw                     @87 | ||||||
|  |         zipOpen2                                 @88 | ||||||
|  |         zipOpenNewFileInZip3                     @89 | ||||||
|  |  | ||||||
|  |         unzGetFilePos                            @100 | ||||||
|  |         unzGoToFilePos                           @101 | ||||||
|  |  | ||||||
|  |         fill_win32_filefunc                      @110 | ||||||
							
								
								
									
										144
									
								
								contrib/vstudio/vc8/zlibvc.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								contrib/vstudio/vc8/zlibvc.sln
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | |||||||
|  |  | ||||||
|  | Microsoft Visual Studio Solution File, Format Version 9.00 | ||||||
|  | # Visual Studio 2005 | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestZlibDll", "testzlibdll.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" | ||||||
|  | 	ProjectSection(ProjectDependencies) = postProject | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} | ||||||
|  | 	EndProjectSection | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" | ||||||
|  | 	ProjectSection(ProjectDependencies) = postProject | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} | ||||||
|  | 	EndProjectSection | ||||||
|  | EndProject | ||||||
|  | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" | ||||||
|  | 	ProjectSection(ProjectDependencies) = postProject | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} | ||||||
|  | 	EndProjectSection | ||||||
|  | EndProject | ||||||
|  | Global | ||||||
|  | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
|  | 		Debug|Itanium = Debug|Itanium | ||||||
|  | 		Debug|Win32 = Debug|Win32 | ||||||
|  | 		Debug|x64 = Debug|x64 | ||||||
|  | 		Release|Itanium = Release|Itanium | ||||||
|  | 		Release|Win32 = Release|Win32 | ||||||
|  | 		Release|x64 = Release|x64 | ||||||
|  | 		ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium | ||||||
|  | 		ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 | ||||||
|  | 		ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = ReleaseWithoutAsm|x64 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = ReleaseWithoutAsm|x64 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 | ||||||
|  | 		{8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 | ||||||
|  | 		{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 | ||||||
|  | 		{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium | ||||||
|  | 		{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Itanium | ||||||
|  | 		{C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|Itanium | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(SolutionProperties) = preSolution | ||||||
|  | 		HideSolutionNode = FALSE | ||||||
|  | 	EndGlobalSection | ||||||
|  | EndGlobal | ||||||
							
								
								
									
										1230
									
								
								contrib/vstudio/vc8/zlibvc.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1230
									
								
								contrib/vstudio/vc8/zlibvc.vcproj
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										46
									
								
								crc32.c
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								crc32.c
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| /* crc32.c -- compute the CRC-32 of a data stream | /* crc32.c -- compute the CRC-32 of a data stream | ||||||
|  * Copyright (C) 1995-2004 Mark Adler |  * Copyright (C) 1995-2006 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 | ||||||
|  * |  * | ||||||
|  * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster |  * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster | ||||||
| @@ -53,7 +53,7 @@ | |||||||
|  |  | ||||||
| /* Definitions for doing the crc four data bytes at a time. */ | /* Definitions for doing the crc four data bytes at a time. */ | ||||||
| #ifdef BYFOUR | #ifdef BYFOUR | ||||||
| #  define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ | #  define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \ | ||||||
|                 (((w)&0xff00)<<8)+(((w)&0xff)<<24)) |                 (((w)&0xff00)<<8)+(((w)&0xff)<<24)) | ||||||
|    local unsigned long crc32_little OF((unsigned long, |    local unsigned long crc32_little OF((unsigned long, | ||||||
|                         const unsigned char FAR *, unsigned)); |                         const unsigned char FAR *, unsigned)); | ||||||
| @@ -64,6 +64,13 @@ | |||||||
| #  define TBLS 1 | #  define TBLS 1 | ||||||
| #endif /* BYFOUR */ | #endif /* BYFOUR */ | ||||||
|  |  | ||||||
|  | /* Local functions for crc concatenation */ | ||||||
|  | local unsigned long gf2_matrix_times OF((unsigned long *mat, | ||||||
|  |                                          unsigned long vec)); | ||||||
|  | local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); | ||||||
|  | local uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2); | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef DYNAMIC_CRC_TABLE | #ifdef DYNAMIC_CRC_TABLE | ||||||
|  |  | ||||||
| local volatile int crc_table_empty = 1; | local volatile int crc_table_empty = 1; | ||||||
| @@ -72,10 +79,6 @@ local void make_crc_table OF((void)); | |||||||
| #ifdef MAKECRCH | #ifdef MAKECRCH | ||||||
|    local void write_table OF((FILE *, const unsigned long FAR *)); |    local void write_table OF((FILE *, const unsigned long FAR *)); | ||||||
| #endif /* MAKECRCH */ | #endif /* MAKECRCH */ | ||||||
| local unsigned long gf2_matrix_times OF((unsigned long *mat, |  | ||||||
|                                          unsigned long vec)); |  | ||||||
| local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: |   Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: | ||||||
|   x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. |   x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. | ||||||
| @@ -273,7 +276,7 @@ local unsigned long crc32_little(crc, buf, len) | |||||||
|         len--; |         len--; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     buf4 = (const u4 FAR *)buf; |     buf4 = (const u4 FAR *)(const void FAR *)buf; | ||||||
|     while (len >= 32) { |     while (len >= 32) { | ||||||
|         DOLIT32; |         DOLIT32; | ||||||
|         len -= 32; |         len -= 32; | ||||||
| @@ -313,7 +316,7 @@ local unsigned long crc32_big(crc, buf, len) | |||||||
|         len--; |         len--; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     buf4 = (const u4 FAR *)buf; |     buf4 = (const u4 FAR *)(const void FAR *)buf; | ||||||
|     buf4--; |     buf4--; | ||||||
|     while (len >= 32) { |     while (len >= 32) { | ||||||
|         DOBIG32; |         DOBIG32; | ||||||
| @@ -366,22 +369,22 @@ local void gf2_matrix_square(square, mat) | |||||||
| } | } | ||||||
|  |  | ||||||
| /* ========================================================================= */ | /* ========================================================================= */ | ||||||
| uLong ZEXPORT crc32_combine(crc1, crc2, len2) | local uLong crc32_combine_(crc1, crc2, len2) | ||||||
|     uLong crc1; |     uLong crc1; | ||||||
|     uLong crc2; |     uLong crc2; | ||||||
|     z_off_t len2; |     z_off64_t len2; | ||||||
| { | { | ||||||
|     int n; |     int n; | ||||||
|     unsigned long row; |     unsigned long row; | ||||||
|     unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */ |     unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */ | ||||||
|     unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */ |     unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */ | ||||||
|  |  | ||||||
|     /* degenerate case */ |     /* degenerate case (also disallow negative lengths) */ | ||||||
|     if (len2 == 0) |     if (len2 <= 0) | ||||||
|         return crc1; |         return crc1; | ||||||
|  |  | ||||||
|     /* put operator for one zero bit in odd */ |     /* put operator for one zero bit in odd */ | ||||||
|     odd[0] = 0xedb88320L;           /* CRC-32 polynomial */ |     odd[0] = 0xedb88320UL;          /* CRC-32 polynomial */ | ||||||
|     row = 1; |     row = 1; | ||||||
|     for (n = 1; n < GF2_DIM; n++) { |     for (n = 1; n < GF2_DIM; n++) { | ||||||
|         odd[n] = row; |         odd[n] = row; | ||||||
| @@ -420,3 +423,20 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2) | |||||||
|     crc1 ^= crc2; |     crc1 ^= crc2; | ||||||
|     return crc1; |     return crc1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* ========================================================================= */ | ||||||
|  | uLong ZEXPORT crc32_combine(crc1, crc2, len2) | ||||||
|  |     uLong crc1; | ||||||
|  |     uLong crc2; | ||||||
|  |     z_off_t len2; | ||||||
|  | { | ||||||
|  |     return crc32_combine_(crc1, crc2, len2); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | uLong ZEXPORT crc32_combine64(crc1, crc2, len2) | ||||||
|  |     uLong crc1; | ||||||
|  |     uLong crc2; | ||||||
|  |     z_off64_t len2; | ||||||
|  | { | ||||||
|  |     return crc32_combine_(crc1, crc2, len2); | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										315
									
								
								deflate.c
									
									
									
									
									
								
							
							
						
						
									
										315
									
								
								deflate.c
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| /* deflate.c -- compress data using the deflation algorithm | /* deflate.c -- compress data using the deflation algorithm | ||||||
|  * Copyright (C) 1995-2004 Jean-loup Gailly. |  * Copyright (C) 1995-2010 Jean-loup Gailly and 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -52,7 +52,7 @@ | |||||||
| #include "deflate.h" | #include "deflate.h" | ||||||
|  |  | ||||||
| const char deflate_copyright[] = | const char deflate_copyright[] = | ||||||
|    " deflate 1.2.2.2 Copyright 1995-2004 Jean-loup Gailly "; |    " deflate 1.2.3.5 Copyright 1995-2010 Jean-loup Gailly and 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 | ||||||
| @@ -79,19 +79,18 @@ local block_state deflate_fast   OF((deflate_state *s, int flush)); | |||||||
| #ifndef FASTEST | #ifndef FASTEST | ||||||
| local block_state deflate_slow   OF((deflate_state *s, int flush)); | local block_state deflate_slow   OF((deflate_state *s, int flush)); | ||||||
| #endif | #endif | ||||||
|  | local block_state deflate_rle    OF((deflate_state *s, int flush)); | ||||||
|  | local block_state deflate_huff   OF((deflate_state *s, int flush)); | ||||||
| local void lm_init        OF((deflate_state *s)); | local void lm_init        OF((deflate_state *s)); | ||||||
| local void putShortMSB    OF((deflate_state *s, uInt b)); | local void putShortMSB    OF((deflate_state *s, uInt b)); | ||||||
| local void flush_pending  OF((z_streamp strm)); | local void flush_pending  OF((z_streamp strm)); | ||||||
| local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size)); | local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size)); | ||||||
| #ifndef FASTEST |  | ||||||
| #ifdef ASMV | #ifdef ASMV | ||||||
|       void match_init OF((void)); /* asm code initialization */ |       void match_init OF((void)); /* asm code initialization */ | ||||||
|       uInt longest_match  OF((deflate_state *s, IPos cur_match)); |       uInt longest_match  OF((deflate_state *s, IPos cur_match)); | ||||||
| #else | #else | ||||||
| local uInt longest_match  OF((deflate_state *s, IPos cur_match)); | local uInt longest_match  OF((deflate_state *s, IPos cur_match)); | ||||||
| #endif | #endif | ||||||
| #endif |  | ||||||
| local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); |  | ||||||
|  |  | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| local  void check_match OF((deflate_state *s, IPos start, IPos match, | local  void check_match OF((deflate_state *s, IPos start, IPos match, | ||||||
| @@ -110,11 +109,6 @@ local  void check_match OF((deflate_state *s, IPos start, IPos match, | |||||||
| #endif | #endif | ||||||
| /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ | /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ | ||||||
|  |  | ||||||
| #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) |  | ||||||
| /* Minimum amount of lookahead, except at the end of the input file. |  | ||||||
|  * See deflate.c for comments about the MIN_MATCH+1. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /* Values for max_lazy_match, good_match and max_chain_length, depending on | /* Values for max_lazy_match, good_match and max_chain_length, depending on | ||||||
|  * the desired pack level (0..9). The values given below have been tuned to |  * the desired pack level (0..9). The values given below have been tuned to | ||||||
|  * exclude worst case performance for pathological files. Better values may be |  * exclude worst case performance for pathological files. Better values may be | ||||||
| @@ -288,6 +282,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | |||||||
|     s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos)); |     s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos)); | ||||||
|     s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos)); |     s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos)); | ||||||
|  |  | ||||||
|  |     s->high_water = 0;      /* nothing written to s->window yet */ | ||||||
|  |  | ||||||
|     s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ |     s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ | ||||||
|  |  | ||||||
|     overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); |     overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); | ||||||
| @@ -332,11 +328,9 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) | |||||||
|         strm->adler = adler32(strm->adler, dictionary, dictLength); |         strm->adler = adler32(strm->adler, dictionary, dictLength); | ||||||
|  |  | ||||||
|     if (length < MIN_MATCH) return Z_OK; |     if (length < MIN_MATCH) return Z_OK; | ||||||
|     if (length > MAX_DIST(s)) { |     if (length > s->w_size) { | ||||||
|         length = MAX_DIST(s); |         length = s->w_size; | ||||||
| #ifndef USE_DICT_HEAD |  | ||||||
|         dictionary += dictLength - length; /* use the tail of the dictionary */ |         dictionary += dictLength - length; /* use the tail of the dictionary */ | ||||||
| #endif |  | ||||||
|     } |     } | ||||||
|     zmemcpy(s->window, dictionary, length); |     zmemcpy(s->window, dictionary, length); | ||||||
|     s->strstart = length; |     s->strstart = length; | ||||||
| @@ -437,9 +431,10 @@ int ZEXPORT deflateParams(strm, level, strategy) | |||||||
|     } |     } | ||||||
|     func = configuration_table[s->level].func; |     func = configuration_table[s->level].func; | ||||||
|  |  | ||||||
|     if (func != configuration_table[level].func && strm->total_in != 0) { |     if ((strategy != s->strategy || func != configuration_table[level].func) && | ||||||
|  |         strm->total_in != 0) { | ||||||
|         /* Flush the last buffer: */ |         /* Flush the last buffer: */ | ||||||
|         err = deflate(strm, Z_PARTIAL_FLUSH); |         err = deflate(strm, Z_BLOCK); | ||||||
|     } |     } | ||||||
|     if (s->level != level) { |     if (s->level != level) { | ||||||
|         s->level = level; |         s->level = level; | ||||||
| @@ -452,6 +447,25 @@ int ZEXPORT deflateParams(strm, level, strategy) | |||||||
|     return err; |     return err; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* ========================================================================= */ | ||||||
|  | int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) | ||||||
|  |     z_streamp strm; | ||||||
|  |     int good_length; | ||||||
|  |     int max_lazy; | ||||||
|  |     int nice_length; | ||||||
|  |     int max_chain; | ||||||
|  | { | ||||||
|  |     deflate_state *s; | ||||||
|  |  | ||||||
|  |     if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; | ||||||
|  |     s = strm->state; | ||||||
|  |     s->good_match = good_length; | ||||||
|  |     s->max_lazy_match = max_lazy; | ||||||
|  |     s->nice_match = nice_length; | ||||||
|  |     s->max_chain_length = max_chain; | ||||||
|  |     return Z_OK; | ||||||
|  | } | ||||||
|  |  | ||||||
| /* ========================================================================= | /* ========================================================================= | ||||||
|  * For the default windowBits of 15 and memLevel of 8, this function returns |  * For the default windowBits of 15 and memLevel of 8, this function returns | ||||||
|  * a close to exact, as well as small, upper bound on the compressed size. |  * a close to exact, as well as small, upper bound on the compressed size. | ||||||
| @@ -464,33 +478,66 @@ int ZEXPORT deflateParams(strm, level, strategy) | |||||||
|  * resulting from using fixed blocks instead of stored blocks, which deflate |  * resulting from using fixed blocks instead of stored blocks, which deflate | ||||||
|  * can emit on compressed data for some combinations of the parameters. |  * can emit on compressed data for some combinations of the parameters. | ||||||
|  * |  * | ||||||
|  * This function could be more sophisticated to provide closer upper bounds |  * This function could be more sophisticated to provide closer upper bounds for | ||||||
|  * for every combination of windowBits and memLevel, as well as wrap. |  * every combination of windowBits and memLevel.  But even the conservative | ||||||
|  * But even the conservative upper bound of about 14% expansion does not |  * upper bound of about 14% expansion does not seem onerous for output buffer | ||||||
|  * seem onerous for output buffer allocation. |  * allocation. | ||||||
|  */ |  */ | ||||||
| uLong ZEXPORT deflateBound(strm, sourceLen) | uLong ZEXPORT deflateBound(strm, sourceLen) | ||||||
|     z_streamp strm; |     z_streamp strm; | ||||||
|     uLong sourceLen; |     uLong sourceLen; | ||||||
| { | { | ||||||
|     deflate_state *s; |     deflate_state *s; | ||||||
|     uLong destLen; |     uLong complen, wraplen; | ||||||
|  |     Bytef *str; | ||||||
|  |  | ||||||
|     /* conservative upper bound */ |     /* conservative upper bound for compressed data */ | ||||||
|     destLen = sourceLen + |     complen = sourceLen + | ||||||
|               ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; |               ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; | ||||||
|  |  | ||||||
|     /* if can't get parameters, return conservative bound */ |     /* if can't get parameters, return conservative bound plus zlib wrapper */ | ||||||
|     if (strm == Z_NULL || strm->state == Z_NULL) |     if (strm == Z_NULL || strm->state == Z_NULL) | ||||||
|         return destLen; |         return complen + 6; | ||||||
|  |  | ||||||
|  |     /* compute wrapper length */ | ||||||
|  |     s = strm->state; | ||||||
|  |     switch (s->wrap) { | ||||||
|  |     case 0:                                 /* raw deflate */ | ||||||
|  |         wraplen = 0; | ||||||
|  |         break; | ||||||
|  |     case 1:                                 /* zlib wrapper */ | ||||||
|  |         wraplen = 6 + (s->strstart ? 4 : 0); | ||||||
|  |         break; | ||||||
|  |     case 2:                                 /* gzip wrapper */ | ||||||
|  |         wraplen = 18; | ||||||
|  |         if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */ | ||||||
|  |             if (s->gzhead->extra != Z_NULL) | ||||||
|  |                 wraplen += 2 + s->gzhead->extra_len; | ||||||
|  |             str = s->gzhead->name; | ||||||
|  |             if (str != Z_NULL) | ||||||
|  |                 do { | ||||||
|  |                     wraplen++; | ||||||
|  |                 } while (*str++); | ||||||
|  |             str = s->gzhead->comment; | ||||||
|  |             if (str != Z_NULL) | ||||||
|  |                 do { | ||||||
|  |                     wraplen++; | ||||||
|  |                 } while (*str++); | ||||||
|  |             if (s->gzhead->hcrc) | ||||||
|  |                 wraplen += 2; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |     default:                                /* for compiler happiness */ | ||||||
|  |         wraplen = 6; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /* if not default parameters, return conservative bound */ |     /* if not default parameters, return conservative bound */ | ||||||
|     s = strm->state; |  | ||||||
|     if (s->w_bits != 15 || s->hash_bits != 8 + 7) |     if (s->w_bits != 15 || s->hash_bits != 8 + 7) | ||||||
|         return destLen; |         return complen + wraplen; | ||||||
|  |  | ||||||
|     /* default settings: return tight bound for that case */ |     /* default settings: return tight bound for that case */ | ||||||
|     return compressBound(sourceLen); |     return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + | ||||||
|  |            (sourceLen >> 25) + 13 - 6 + wraplen; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* ========================================================================= | /* ========================================================================= | ||||||
| @@ -540,7 +587,7 @@ int ZEXPORT deflate (strm, flush) | |||||||
|     deflate_state *s; |     deflate_state *s; | ||||||
|  |  | ||||||
|     if (strm == Z_NULL || strm->state == Z_NULL || |     if (strm == Z_NULL || strm->state == Z_NULL || | ||||||
|         flush > Z_FINISH || flush < 0) { |         flush > Z_BLOCK || flush < 0) { | ||||||
|         return Z_STREAM_ERROR; |         return Z_STREAM_ERROR; | ||||||
|     } |     } | ||||||
|     s = strm->state; |     s = strm->state; | ||||||
| @@ -564,7 +611,7 @@ int ZEXPORT deflate (strm, flush) | |||||||
|             put_byte(s, 31); |             put_byte(s, 31); | ||||||
|             put_byte(s, 139); |             put_byte(s, 139); | ||||||
|             put_byte(s, 8); |             put_byte(s, 8); | ||||||
|             if (s->gzhead == NULL) { |             if (s->gzhead == Z_NULL) { | ||||||
|                 put_byte(s, 0); |                 put_byte(s, 0); | ||||||
|                 put_byte(s, 0); |                 put_byte(s, 0); | ||||||
|                 put_byte(s, 0); |                 put_byte(s, 0); | ||||||
| @@ -583,15 +630,15 @@ int ZEXPORT deflate (strm, flush) | |||||||
|                             (s->gzhead->name == Z_NULL ? 0 : 8) + |                             (s->gzhead->name == Z_NULL ? 0 : 8) + | ||||||
|                             (s->gzhead->comment == Z_NULL ? 0 : 16) |                             (s->gzhead->comment == Z_NULL ? 0 : 16) | ||||||
|                         ); |                         ); | ||||||
|                 put_byte(s, s->gzhead->time & 0xff); |                 put_byte(s, (Byte)(s->gzhead->time & 0xff)); | ||||||
|                 put_byte(s, (s->gzhead->time >> 8) & 0xff); |                 put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); | ||||||
|                 put_byte(s, (s->gzhead->time >> 16) & 0xff); |                 put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); | ||||||
|                 put_byte(s, (s->gzhead->time >> 24) & 0xff); |                 put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); | ||||||
|                 put_byte(s, s->level == 9 ? 2 : |                 put_byte(s, s->level == 9 ? 2 : | ||||||
|                             (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? |                             (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? | ||||||
|                              4 : 0)); |                              4 : 0)); | ||||||
|                 put_byte(s, s->gzhead->os & 0xff); |                 put_byte(s, s->gzhead->os & 0xff); | ||||||
|                 if (s->gzhead->extra != NULL) { |                 if (s->gzhead->extra != Z_NULL) { | ||||||
|                     put_byte(s, s->gzhead->extra_len & 0xff); |                     put_byte(s, s->gzhead->extra_len & 0xff); | ||||||
|                     put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); |                     put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); | ||||||
|                 } |                 } | ||||||
| @@ -633,8 +680,8 @@ int ZEXPORT deflate (strm, flush) | |||||||
|     } |     } | ||||||
| #ifdef GZIP | #ifdef GZIP | ||||||
|     if (s->status == EXTRA_STATE) { |     if (s->status == EXTRA_STATE) { | ||||||
|         if (s->gzhead->extra != NULL) { |         if (s->gzhead->extra != Z_NULL) { | ||||||
|             int beg = s->pending;   /* start of bytes to update crc */ |             uInt beg = s->pending;  /* start of bytes to update crc */ | ||||||
|  |  | ||||||
|             while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { |             while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { | ||||||
|                 if (s->pending == s->pending_buf_size) { |                 if (s->pending == s->pending_buf_size) { | ||||||
| @@ -661,8 +708,8 @@ int ZEXPORT deflate (strm, flush) | |||||||
|             s->status = NAME_STATE; |             s->status = NAME_STATE; | ||||||
|     } |     } | ||||||
|     if (s->status == NAME_STATE) { |     if (s->status == NAME_STATE) { | ||||||
|         if (s->gzhead->name != NULL) { |         if (s->gzhead->name != Z_NULL) { | ||||||
|             int beg = s->pending;   /* start of bytes to update crc */ |             uInt beg = s->pending;  /* start of bytes to update crc */ | ||||||
|             int val; |             int val; | ||||||
|  |  | ||||||
|             do { |             do { | ||||||
| @@ -692,8 +739,8 @@ int ZEXPORT deflate (strm, flush) | |||||||
|             s->status = COMMENT_STATE; |             s->status = COMMENT_STATE; | ||||||
|     } |     } | ||||||
|     if (s->status == COMMENT_STATE) { |     if (s->status == COMMENT_STATE) { | ||||||
|         if (s->gzhead->comment != NULL) { |         if (s->gzhead->comment != Z_NULL) { | ||||||
|             int beg = s->pending;   /* start of bytes to update crc */ |             uInt beg = s->pending;  /* start of bytes to update crc */ | ||||||
|             int val; |             int val; | ||||||
|  |  | ||||||
|             do { |             do { | ||||||
| @@ -725,8 +772,8 @@ int ZEXPORT deflate (strm, flush) | |||||||
|             if (s->pending + 2 > s->pending_buf_size) |             if (s->pending + 2 > s->pending_buf_size) | ||||||
|                 flush_pending(strm); |                 flush_pending(strm); | ||||||
|             if (s->pending + 2 <= s->pending_buf_size) { |             if (s->pending + 2 <= s->pending_buf_size) { | ||||||
|                 put_byte(s, strm->adler & 0xff); |                 put_byte(s, (Byte)(strm->adler & 0xff)); | ||||||
|                 put_byte(s, (strm->adler >> 8) & 0xff); |                 put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); | ||||||
|                 strm->adler = crc32(0L, Z_NULL, 0); |                 strm->adler = crc32(0L, Z_NULL, 0); | ||||||
|                 s->status = BUSY_STATE; |                 s->status = BUSY_STATE; | ||||||
|             } |             } | ||||||
| @@ -770,7 +817,9 @@ int ZEXPORT deflate (strm, flush) | |||||||
|         (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { |         (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { | ||||||
|         block_state bstate; |         block_state bstate; | ||||||
|  |  | ||||||
|         bstate = (*(configuration_table[s->level].func))(s, flush); |         bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : | ||||||
|  |                     (s->strategy == Z_RLE ? deflate_rle(s, flush) : | ||||||
|  |                         (*(configuration_table[s->level].func))(s, flush)); | ||||||
|  |  | ||||||
|         if (bstate == finish_started || bstate == finish_done) { |         if (bstate == finish_started || bstate == finish_done) { | ||||||
|             s->status = FINISH_STATE; |             s->status = FINISH_STATE; | ||||||
| @@ -791,13 +840,17 @@ int ZEXPORT deflate (strm, flush) | |||||||
|         if (bstate == block_done) { |         if (bstate == block_done) { | ||||||
|             if (flush == Z_PARTIAL_FLUSH) { |             if (flush == Z_PARTIAL_FLUSH) { | ||||||
|                 _tr_align(s); |                 _tr_align(s); | ||||||
|             } else { /* FULL_FLUSH or SYNC_FLUSH */ |             } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ | ||||||
|                 _tr_stored_block(s, (char*)0, 0L, 0); |                 _tr_stored_block(s, (char*)0, 0L, 0); | ||||||
|                 /* For a full flush, this empty block will be recognized |                 /* For a full flush, this empty block will be recognized | ||||||
|                  * as a special marker by inflate_sync(). |                  * as a special marker by inflate_sync(). | ||||||
|                  */ |                  */ | ||||||
|                 if (flush == Z_FULL_FLUSH) { |                 if (flush == Z_FULL_FLUSH) { | ||||||
|                     CLEAR_HASH(s);             /* forget history */ |                     CLEAR_HASH(s);             /* forget history */ | ||||||
|  |                     if (s->lookahead == 0) { | ||||||
|  |                         s->strstart = 0; | ||||||
|  |                         s->block_start = 0L; | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             flush_pending(strm); |             flush_pending(strm); | ||||||
| @@ -986,9 +1039,11 @@ local void lm_init (s) | |||||||
|     s->match_length = s->prev_length = MIN_MATCH-1; |     s->match_length = s->prev_length = MIN_MATCH-1; | ||||||
|     s->match_available = 0; |     s->match_available = 0; | ||||||
|     s->ins_h = 0; |     s->ins_h = 0; | ||||||
|  | #ifndef FASTEST | ||||||
| #ifdef ASMV | #ifdef ASMV | ||||||
|     match_init(); /* initialize the asm code */ |     match_init(); /* initialize the asm code */ | ||||||
| #endif | #endif | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| #ifndef FASTEST | #ifndef FASTEST | ||||||
| @@ -1148,12 +1203,13 @@ local uInt longest_match(s, cur_match) | |||||||
|     return s->lookahead; |     return s->lookahead; | ||||||
| } | } | ||||||
| #endif /* ASMV */ | #endif /* ASMV */ | ||||||
| #endif /* FASTEST */ |  | ||||||
|  | #else /* FASTEST */ | ||||||
|  |  | ||||||
| /* --------------------------------------------------------------------------- | /* --------------------------------------------------------------------------- | ||||||
|  * Optimized version for level == 1 or strategy == Z_RLE only |  * Optimized version for FASTEST only | ||||||
|  */ |  */ | ||||||
| local uInt longest_match_fast(s, cur_match) | local uInt longest_match(s, cur_match) | ||||||
|     deflate_state *s; |     deflate_state *s; | ||||||
|     IPos cur_match;                             /* current match */ |     IPos cur_match;                             /* current match */ | ||||||
| { | { | ||||||
| @@ -1206,6 +1262,8 @@ local uInt longest_match_fast(s, cur_match) | |||||||
|     return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; |     return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #endif /* FASTEST */ | ||||||
|  |  | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
|  * Check that the match at match_start is indeed a match. |  * Check that the match at match_start is indeed a match. | ||||||
| @@ -1335,6 +1393,40 @@ local void fill_window(s) | |||||||
|          */ |          */ | ||||||
|  |  | ||||||
|     } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); |     } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); | ||||||
|  |  | ||||||
|  |     /* If the WIN_INIT bytes after the end of the current data have never been | ||||||
|  |      * written, then zero those bytes in order to avoid memory check reports of | ||||||
|  |      * the use of uninitialized (or uninitialised as Julian writes) bytes by | ||||||
|  |      * the longest match routines.  Update the high water mark for the next | ||||||
|  |      * time through here.  WIN_INIT is set to MAX_MATCH since the longest match | ||||||
|  |      * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. | ||||||
|  |      */ | ||||||
|  |     if (s->high_water < s->window_size) { | ||||||
|  |         ulg curr = s->strstart + (ulg)(s->lookahead); | ||||||
|  |         ulg init; | ||||||
|  |  | ||||||
|  |         if (s->high_water < curr) { | ||||||
|  |             /* Previous high water mark below current data -- zero WIN_INIT | ||||||
|  |              * bytes or up to end of window, whichever is less. | ||||||
|  |              */ | ||||||
|  |             init = s->window_size - curr; | ||||||
|  |             if (init > WIN_INIT) | ||||||
|  |                 init = WIN_INIT; | ||||||
|  |             zmemzero(s->window + curr, (unsigned)init); | ||||||
|  |             s->high_water = curr + init; | ||||||
|  |         } | ||||||
|  |         else if (s->high_water < (ulg)curr + WIN_INIT) { | ||||||
|  |             /* High water mark at or above current data, but below current data | ||||||
|  |              * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up | ||||||
|  |              * to end of window, whichever is less. | ||||||
|  |              */ | ||||||
|  |             init = (ulg)curr + WIN_INIT - s->high_water; | ||||||
|  |             if (init > s->window_size - s->high_water) | ||||||
|  |                 init = s->window_size - s->high_water; | ||||||
|  |             zmemzero(s->window + s->high_water, (unsigned)init); | ||||||
|  |             s->high_water += init; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| /* =========================================================================== | /* =========================================================================== | ||||||
| @@ -1429,7 +1521,7 @@ local block_state deflate_fast(s, flush) | |||||||
|     deflate_state *s; |     deflate_state *s; | ||||||
|     int flush; |     int flush; | ||||||
| { | { | ||||||
|     IPos hash_head = NIL; /* head of the hash chain */ |     IPos hash_head;       /* head of the hash chain */ | ||||||
|     int bflush;           /* set if current block must be flushed */ |     int bflush;           /* set if current block must be flushed */ | ||||||
|  |  | ||||||
|     for (;;) { |     for (;;) { | ||||||
| @@ -1449,6 +1541,7 @@ local block_state deflate_fast(s, flush) | |||||||
|         /* Insert the string window[strstart .. strstart+2] in the |         /* Insert the string window[strstart .. strstart+2] in the | ||||||
|          * dictionary, and set hash_head to the head of the hash chain: |          * dictionary, and set hash_head to the head of the hash chain: | ||||||
|          */ |          */ | ||||||
|  |         hash_head = NIL; | ||||||
|         if (s->lookahead >= MIN_MATCH) { |         if (s->lookahead >= MIN_MATCH) { | ||||||
|             INSERT_STRING(s, s->strstart, hash_head); |             INSERT_STRING(s, s->strstart, hash_head); | ||||||
|         } |         } | ||||||
| @@ -1461,19 +1554,8 @@ local block_state deflate_fast(s, flush) | |||||||
|              * of window index 0 (in particular we have to avoid a match |              * of window index 0 (in particular we have to avoid a match | ||||||
|              * of the string with itself at the start of the input file). |              * of the string with itself at the start of the input file). | ||||||
|              */ |              */ | ||||||
| #ifdef FASTEST |  | ||||||
|             if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || |  | ||||||
|                 (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { |  | ||||||
|                 s->match_length = longest_match_fast (s, hash_head); |  | ||||||
|             } |  | ||||||
| #else |  | ||||||
|             if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { |  | ||||||
|             s->match_length = longest_match (s, hash_head); |             s->match_length = longest_match (s, hash_head); | ||||||
|             } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { |             /* longest_match() sets match_start */ | ||||||
|                 s->match_length = longest_match_fast (s, hash_head); |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
|             /* longest_match() or longest_match_fast() sets match_start */ |  | ||||||
|         } |         } | ||||||
|         if (s->match_length >= MIN_MATCH) { |         if (s->match_length >= MIN_MATCH) { | ||||||
|             check_match(s, s->strstart, s->match_start, s->match_length); |             check_match(s, s->strstart, s->match_start, s->match_length); | ||||||
| @@ -1535,7 +1617,7 @@ local block_state deflate_slow(s, flush) | |||||||
|     deflate_state *s; |     deflate_state *s; | ||||||
|     int flush; |     int flush; | ||||||
| { | { | ||||||
|     IPos hash_head = NIL;    /* head of hash chain */ |     IPos hash_head;          /* head of hash chain */ | ||||||
|     int bflush;              /* set if current block must be flushed */ |     int bflush;              /* set if current block must be flushed */ | ||||||
|  |  | ||||||
|     /* Process the input block. */ |     /* Process the input block. */ | ||||||
| @@ -1556,6 +1638,7 @@ local block_state deflate_slow(s, flush) | |||||||
|         /* Insert the string window[strstart .. strstart+2] in the |         /* Insert the string window[strstart .. strstart+2] in the | ||||||
|          * dictionary, and set hash_head to the head of the hash chain: |          * dictionary, and set hash_head to the head of the hash chain: | ||||||
|          */ |          */ | ||||||
|  |         hash_head = NIL; | ||||||
|         if (s->lookahead >= MIN_MATCH) { |         if (s->lookahead >= MIN_MATCH) { | ||||||
|             INSERT_STRING(s, s->strstart, hash_head); |             INSERT_STRING(s, s->strstart, hash_head); | ||||||
|         } |         } | ||||||
| @@ -1571,12 +1654,8 @@ local block_state deflate_slow(s, flush) | |||||||
|              * of window index 0 (in particular we have to avoid a match |              * of window index 0 (in particular we have to avoid a match | ||||||
|              * of the string with itself at the start of the input file). |              * of the string with itself at the start of the input file). | ||||||
|              */ |              */ | ||||||
|             if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { |  | ||||||
|             s->match_length = longest_match (s, hash_head); |             s->match_length = longest_match (s, hash_head); | ||||||
|             } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { |             /* longest_match() sets match_start */ | ||||||
|                 s->match_length = longest_match_fast (s, hash_head); |  | ||||||
|             } |  | ||||||
|             /* longest_match() or longest_match_fast() sets match_start */ |  | ||||||
|  |  | ||||||
|             if (s->match_length <= 5 && (s->strategy == Z_FILTERED |             if (s->match_length <= 5 && (s->strategy == Z_FILTERED | ||||||
| #if TOO_FAR <= 32767 | #if TOO_FAR <= 32767 | ||||||
| @@ -1653,3 +1732,103 @@ local block_state deflate_slow(s, flush) | |||||||
|     return flush == Z_FINISH ? finish_done : block_done; |     return flush == Z_FINISH ? finish_done : block_done; | ||||||
| } | } | ||||||
| #endif /* FASTEST */ | #endif /* FASTEST */ | ||||||
|  |  | ||||||
|  | /* =========================================================================== | ||||||
|  |  * For Z_RLE, simply look for runs of bytes, generate matches only of distance | ||||||
|  |  * one.  Do not maintain a hash table.  (It will be regenerated if this run of | ||||||
|  |  * deflate switches away from Z_RLE.) | ||||||
|  |  */ | ||||||
|  | local block_state deflate_rle(s, flush) | ||||||
|  |     deflate_state *s; | ||||||
|  |     int flush; | ||||||
|  | { | ||||||
|  |     int bflush;             /* set if current block must be flushed */ | ||||||
|  |     uInt prev;              /* byte at distance one to match */ | ||||||
|  |     Bytef *scan, *strend;   /* scan goes up to strend for length of run */ | ||||||
|  |  | ||||||
|  |     for (;;) { | ||||||
|  |         /* Make sure that we always have enough lookahead, except | ||||||
|  |          * at the end of the input file. We need MAX_MATCH bytes | ||||||
|  |          * for the longest encodable run. | ||||||
|  |          */ | ||||||
|  |         if (s->lookahead < MAX_MATCH) { | ||||||
|  |             fill_window(s); | ||||||
|  |             if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) { | ||||||
|  |                 return need_more; | ||||||
|  |             } | ||||||
|  |             if (s->lookahead == 0) break; /* flush the current block */ | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* See how many times the previous byte repeats */ | ||||||
|  |         s->match_length = 0; | ||||||
|  |         if (s->lookahead >= MIN_MATCH && s->strstart > 0) { | ||||||
|  |             scan = s->window + s->strstart - 1; | ||||||
|  |             prev = *scan; | ||||||
|  |             if (prev == *++scan && prev == *++scan && prev == *++scan) { | ||||||
|  |                 strend = s->window + s->strstart + MAX_MATCH; | ||||||
|  |                 do { | ||||||
|  |                 } while (prev == *++scan && prev == *++scan && | ||||||
|  |                          prev == *++scan && prev == *++scan && | ||||||
|  |                          prev == *++scan && prev == *++scan && | ||||||
|  |                          prev == *++scan && prev == *++scan && | ||||||
|  |                          scan < strend); | ||||||
|  |                 s->match_length = MAX_MATCH - (int)(strend - scan); | ||||||
|  |                 if (s->match_length > s->lookahead) | ||||||
|  |                     s->match_length = s->lookahead; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* Emit match if have run of MIN_MATCH or longer, else emit literal */ | ||||||
|  |         if (s->match_length >= MIN_MATCH) { | ||||||
|  |             check_match(s, s->strstart, s->strstart - 1, s->match_length); | ||||||
|  |  | ||||||
|  |             _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); | ||||||
|  |  | ||||||
|  |             s->lookahead -= s->match_length; | ||||||
|  |             s->strstart += s->match_length; | ||||||
|  |             s->match_length = 0; | ||||||
|  |         } else { | ||||||
|  |             /* No match, output a literal byte */ | ||||||
|  |             Tracevv((stderr,"%c", s->window[s->strstart])); | ||||||
|  |             _tr_tally_lit (s, s->window[s->strstart], bflush); | ||||||
|  |             s->lookahead--; | ||||||
|  |             s->strstart++; | ||||||
|  |         } | ||||||
|  |         if (bflush) FLUSH_BLOCK(s, 0); | ||||||
|  |     } | ||||||
|  |     FLUSH_BLOCK(s, flush == Z_FINISH); | ||||||
|  |     return flush == Z_FINISH ? finish_done : block_done; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* =========================================================================== | ||||||
|  |  * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table. | ||||||
|  |  * (It will be regenerated if this run of deflate switches away from Huffman.) | ||||||
|  |  */ | ||||||
|  | local block_state deflate_huff(s, flush) | ||||||
|  |     deflate_state *s; | ||||||
|  |     int flush; | ||||||
|  | { | ||||||
|  |     int bflush;             /* set if current block must be flushed */ | ||||||
|  |  | ||||||
|  |     for (;;) { | ||||||
|  |         /* Make sure that we have a literal to write. */ | ||||||
|  |         if (s->lookahead == 0) { | ||||||
|  |             fill_window(s); | ||||||
|  |             if (s->lookahead == 0) { | ||||||
|  |                 if (flush == Z_NO_FLUSH) | ||||||
|  |                     return need_more; | ||||||
|  |                 break;      /* flush the current block */ | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* Output a literal byte */ | ||||||
|  |         s->match_length = 0; | ||||||
|  |         Tracevv((stderr,"%c", s->window[s->strstart])); | ||||||
|  |         _tr_tally_lit (s, s->window[s->strstart], bflush); | ||||||
|  |         s->lookahead--; | ||||||
|  |         s->strstart++; | ||||||
|  |         if (bflush) FLUSH_BLOCK(s, 0); | ||||||
|  |     } | ||||||
|  |     FLUSH_BLOCK(s, flush == Z_FINISH); | ||||||
|  |     return flush == Z_FINISH ? finish_done : block_done; | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								deflate.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								deflate.h
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| /* deflate.h -- internal compression state | /* deflate.h -- internal compression state | ||||||
|  * Copyright (C) 1995-2004 Jean-loup Gailly |  * Copyright (C) 1995-2009 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -97,10 +97,10 @@ typedef struct internal_state { | |||||||
|     Bytef *pending_buf;  /* output still pending */ |     Bytef *pending_buf;  /* output still pending */ | ||||||
|     ulg   pending_buf_size; /* size of pending_buf */ |     ulg   pending_buf_size; /* size of pending_buf */ | ||||||
|     Bytef *pending_out;  /* next pending byte to output to the stream */ |     Bytef *pending_out;  /* next pending byte to output to the stream */ | ||||||
|     int   pending;       /* nb of bytes in the pending buffer */ |     uInt   pending;      /* nb of bytes in the pending buffer */ | ||||||
|     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */ |     int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */ | ||||||
|     gz_headerp  gzhead;  /* gzip header information to write */ |     gz_headerp  gzhead;  /* gzip header information to write */ | ||||||
|     int   gzindex;       /* where in extra, name, or comment */ |     uInt   gzindex;      /* where in extra, name, or comment */ | ||||||
|     Byte  method;        /* STORED (for zip only) or DEFLATED */ |     Byte  method;        /* STORED (for zip only) or DEFLATED */ | ||||||
|     int   last_flush;    /* value of flush param for previous deflate call */ |     int   last_flush;    /* value of flush param for previous deflate call */ | ||||||
|  |  | ||||||
| @@ -260,6 +260,13 @@ typedef struct internal_state { | |||||||
|      * are always zero. |      * are always zero. | ||||||
|      */ |      */ | ||||||
|  |  | ||||||
|  |     ulg high_water; | ||||||
|  |     /* High water mark offset in window for initialized bytes -- bytes above | ||||||
|  |      * this are set to zero in order to avoid memory check warnings when | ||||||
|  |      * longest match routines access bytes past the input.  This is then | ||||||
|  |      * updated to the new high water mark. | ||||||
|  |      */ | ||||||
|  |  | ||||||
| } FAR deflate_state; | } FAR deflate_state; | ||||||
|  |  | ||||||
| /* Output a byte on the stream. | /* Output a byte on the stream. | ||||||
| @@ -278,6 +285,10 @@ typedef struct internal_state { | |||||||
|  * distances are limited to MAX_DIST instead of WSIZE. |  * distances are limited to MAX_DIST instead of WSIZE. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #define WIN_INIT MAX_MATCH | ||||||
|  | /* Number of bytes after end of data in window to initialize in order to avoid | ||||||
|  |    memory checker errors from longest match routines */ | ||||||
|  |  | ||||||
|         /* in trees.c */ |         /* in trees.c */ | ||||||
| void _tr_init         OF((deflate_state *s)); | void _tr_init         OF((deflate_state *s)); | ||||||
| int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc)); | int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc)); | ||||||
|   | |||||||
| @@ -121,7 +121,7 @@ At least for deflate's output that generates new trees every several 10's of | |||||||
| kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code | kbytes.  You can imagine that filling in a 2^15 entry table for a 15-bit code | ||||||
| would take too long if you're only decoding several thousand symbols.  At the | would take too long if you're only decoding several thousand symbols.  At the | ||||||
| other extreme, you could make a new table for every bit in the code.  In fact, | other extreme, you could make a new table for every bit in the code.  In fact, | ||||||
| that's essentially a Huffman tree.  But then you spend two much time | that's essentially a Huffman tree.  But then you spend too much time | ||||||
| traversing the tree while decoding, even for short symbols. | traversing the tree while decoding, even for short symbols. | ||||||
| 
 | 
 | ||||||
| So the number of bits for the first lookup table is a trade of the time to | So the number of bits for the first lookup table is a trade of the time to | ||||||
							
								
								
									
										619
									
								
								doc/rfc1950.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										619
									
								
								doc/rfc1950.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,619 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Network Working Group                                         P. Deutsch | ||||||
|  | Request for Comments: 1950                           Aladdin Enterprises | ||||||
|  | Category: Informational                                      J-L. Gailly | ||||||
|  |                                                                 Info-ZIP | ||||||
|  |                                                                 May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |          ZLIB Compressed Data Format Specification version 3.3 | ||||||
|  |  | ||||||
|  | Status of This Memo | ||||||
|  |  | ||||||
|  |    This memo provides information for the Internet community.  This memo | ||||||
|  |    does not specify an Internet standard of any kind.  Distribution of | ||||||
|  |    this memo is unlimited. | ||||||
|  |  | ||||||
|  | IESG Note: | ||||||
|  |  | ||||||
|  |    The IESG takes no position on the validity of any Intellectual | ||||||
|  |    Property Rights statements contained in this document. | ||||||
|  |  | ||||||
|  | Notices | ||||||
|  |  | ||||||
|  |    Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly | ||||||
|  |  | ||||||
|  |    Permission is granted to copy and distribute this document for any | ||||||
|  |    purpose and without charge, including translations into other | ||||||
|  |    languages and incorporation into compilations, provided that the | ||||||
|  |    copyright notice and this notice are preserved, and that any | ||||||
|  |    substantive changes or deletions from the original are clearly | ||||||
|  |    marked. | ||||||
|  |  | ||||||
|  |    A pointer to the latest version of this and related documentation in | ||||||
|  |    HTML format can be found at the URL | ||||||
|  |    <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. | ||||||
|  |  | ||||||
|  | Abstract | ||||||
|  |  | ||||||
|  |    This specification defines a lossless compressed data format.  The | ||||||
|  |    data can be produced or consumed, even for an arbitrarily long | ||||||
|  |    sequentially presented input data stream, using only an a priori | ||||||
|  |    bounded amount of intermediate storage.  The format presently uses | ||||||
|  |    the DEFLATE compression method but can be easily extended to use | ||||||
|  |    other compression methods.  It can be implemented readily in a manner | ||||||
|  |    not covered by patents.  This specification also defines the ADLER-32 | ||||||
|  |    checksum (an extension and improvement of the Fletcher checksum), | ||||||
|  |    used for detection of data corruption, and provides an algorithm for | ||||||
|  |    computing it. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 1] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Table of Contents | ||||||
|  |  | ||||||
|  |    1. Introduction ................................................... 2 | ||||||
|  |       1.1. Purpose ................................................... 2 | ||||||
|  |       1.2. Intended audience ......................................... 3 | ||||||
|  |       1.3. Scope ..................................................... 3 | ||||||
|  |       1.4. Compliance ................................................ 3 | ||||||
|  |       1.5.  Definitions of terms and conventions used ................ 3 | ||||||
|  |       1.6. Changes from previous versions ............................ 3 | ||||||
|  |    2. Detailed specification ......................................... 3 | ||||||
|  |       2.1. Overall conventions ....................................... 3 | ||||||
|  |       2.2. Data format ............................................... 4 | ||||||
|  |       2.3. Compliance ................................................ 7 | ||||||
|  |    3. References ..................................................... 7 | ||||||
|  |    4. Source code .................................................... 8 | ||||||
|  |    5. Security Considerations ........................................ 8 | ||||||
|  |    6. Acknowledgements ............................................... 8 | ||||||
|  |    7. Authors' Addresses ............................................. 8 | ||||||
|  |    8. Appendix: Rationale ............................................ 9 | ||||||
|  |    9. Appendix: Sample code ..........................................10 | ||||||
|  |  | ||||||
|  | 1. Introduction | ||||||
|  |  | ||||||
|  |    1.1. Purpose | ||||||
|  |  | ||||||
|  |       The purpose of this specification is to define a lossless | ||||||
|  |       compressed data format that: | ||||||
|  |  | ||||||
|  |           * Is independent of CPU type, operating system, file system, | ||||||
|  |             and character set, and hence can be used for interchange; | ||||||
|  |  | ||||||
|  |           * Can be produced or consumed, even for an arbitrarily long | ||||||
|  |             sequentially presented input data stream, using only an a | ||||||
|  |             priori bounded amount of intermediate storage, and hence can | ||||||
|  |             be used in data communications or similar structures such as | ||||||
|  |             Unix filters; | ||||||
|  |  | ||||||
|  |           * Can use a number of different compression methods; | ||||||
|  |  | ||||||
|  |           * Can be implemented readily in a manner not covered by | ||||||
|  |             patents, and hence can be practiced freely. | ||||||
|  |  | ||||||
|  |       The data format defined by this specification does not attempt to | ||||||
|  |       allow random access to compressed data. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 2] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    1.2. Intended audience | ||||||
|  |  | ||||||
|  |       This specification is intended for use by implementors of software | ||||||
|  |       to compress data into zlib format and/or decompress data from zlib | ||||||
|  |       format. | ||||||
|  |  | ||||||
|  |       The text of the specification assumes a basic background in | ||||||
|  |       programming at the level of bits and other primitive data | ||||||
|  |       representations. | ||||||
|  |  | ||||||
|  |    1.3. Scope | ||||||
|  |  | ||||||
|  |       The specification specifies a compressed data format that can be | ||||||
|  |       used for in-memory compression of a sequence of arbitrary bytes. | ||||||
|  |  | ||||||
|  |    1.4. Compliance | ||||||
|  |  | ||||||
|  |       Unless otherwise indicated below, a compliant decompressor must be | ||||||
|  |       able to accept and decompress any data set that conforms to all | ||||||
|  |       the specifications presented here; a compliant compressor must | ||||||
|  |       produce data sets that conform to all the specifications presented | ||||||
|  |       here. | ||||||
|  |  | ||||||
|  |    1.5.  Definitions of terms and conventions used | ||||||
|  |  | ||||||
|  |       byte: 8 bits stored or transmitted as a unit (same as an octet). | ||||||
|  |       (For this specification, a byte is exactly 8 bits, even on | ||||||
|  |       machines which store a character on a number of bits different | ||||||
|  |       from 8.) See below, for the numbering of bits within a byte. | ||||||
|  |  | ||||||
|  |    1.6. Changes from previous versions | ||||||
|  |  | ||||||
|  |       Version 3.1 was the first public release of this specification. | ||||||
|  |       In version 3.2, some terminology was changed and the Adler-32 | ||||||
|  |       sample code was rewritten for clarity.  In version 3.3, the | ||||||
|  |       support for a preset dictionary was introduced, and the | ||||||
|  |       specification was converted to RFC style. | ||||||
|  |  | ||||||
|  | 2. Detailed specification | ||||||
|  |  | ||||||
|  |    2.1. Overall conventions | ||||||
|  |  | ||||||
|  |       In the diagrams below, a box like this: | ||||||
|  |  | ||||||
|  |          +---+ | ||||||
|  |          |   | <-- the vertical bars might be missing | ||||||
|  |          +---+ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 3] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       represents one byte; a box like this: | ||||||
|  |  | ||||||
|  |          +==============+ | ||||||
|  |          |              | | ||||||
|  |          +==============+ | ||||||
|  |  | ||||||
|  |       represents a variable number of bytes. | ||||||
|  |  | ||||||
|  |       Bytes stored within a computer do not have a "bit order", since | ||||||
|  |       they are always treated as a unit.  However, a byte considered as | ||||||
|  |       an integer between 0 and 255 does have a most- and least- | ||||||
|  |       significant bit, and since we write numbers with the most- | ||||||
|  |       significant digit on the left, we also write bytes with the most- | ||||||
|  |       significant bit on the left.  In the diagrams below, we number the | ||||||
|  |       bits of a byte so that bit 0 is the least-significant bit, i.e., | ||||||
|  |       the bits are numbered: | ||||||
|  |  | ||||||
|  |          +--------+ | ||||||
|  |          |76543210| | ||||||
|  |          +--------+ | ||||||
|  |  | ||||||
|  |       Within a computer, a number may occupy multiple bytes.  All | ||||||
|  |       multi-byte numbers in the format described here are stored with | ||||||
|  |       the MOST-significant byte first (at the lower memory address). | ||||||
|  |       For example, the decimal number 520 is stored as: | ||||||
|  |  | ||||||
|  |              0     1 | ||||||
|  |          +--------+--------+ | ||||||
|  |          |00000010|00001000| | ||||||
|  |          +--------+--------+ | ||||||
|  |           ^        ^ | ||||||
|  |           |        | | ||||||
|  |           |        + less significant byte = 8 | ||||||
|  |           + more significant byte = 2 x 256 | ||||||
|  |  | ||||||
|  |    2.2. Data format | ||||||
|  |  | ||||||
|  |       A zlib stream has the following structure: | ||||||
|  |  | ||||||
|  |            0   1 | ||||||
|  |          +---+---+ | ||||||
|  |          |CMF|FLG|   (more-->) | ||||||
|  |          +---+---+ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 4] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       (if FLG.FDICT set) | ||||||
|  |  | ||||||
|  |            0   1   2   3 | ||||||
|  |          +---+---+---+---+ | ||||||
|  |          |     DICTID    |   (more-->) | ||||||
|  |          +---+---+---+---+ | ||||||
|  |  | ||||||
|  |          +=====================+---+---+---+---+ | ||||||
|  |          |...compressed data...|    ADLER32    | | ||||||
|  |          +=====================+---+---+---+---+ | ||||||
|  |  | ||||||
|  |       Any data which may appear after ADLER32 are not part of the zlib | ||||||
|  |       stream. | ||||||
|  |  | ||||||
|  |       CMF (Compression Method and flags) | ||||||
|  |          This byte is divided into a 4-bit compression method and a 4- | ||||||
|  |          bit information field depending on the compression method. | ||||||
|  |  | ||||||
|  |             bits 0 to 3  CM     Compression method | ||||||
|  |             bits 4 to 7  CINFO  Compression info | ||||||
|  |  | ||||||
|  |       CM (Compression method) | ||||||
|  |          This identifies the compression method used in the file. CM = 8 | ||||||
|  |          denotes the "deflate" compression method with a window size up | ||||||
|  |          to 32K.  This is the method used by gzip and PNG (see | ||||||
|  |          references [1] and [2] in Chapter 3, below, for the reference | ||||||
|  |          documents).  CM = 15 is reserved.  It might be used in a future | ||||||
|  |          version of this specification to indicate the presence of an | ||||||
|  |          extra field before the compressed data. | ||||||
|  |  | ||||||
|  |       CINFO (Compression info) | ||||||
|  |          For CM = 8, CINFO is the base-2 logarithm of the LZ77 window | ||||||
|  |          size, minus eight (CINFO=7 indicates a 32K window size). Values | ||||||
|  |          of CINFO above 7 are not allowed in this version of the | ||||||
|  |          specification.  CINFO is not defined in this specification for | ||||||
|  |          CM not equal to 8. | ||||||
|  |  | ||||||
|  |       FLG (FLaGs) | ||||||
|  |          This flag byte is divided as follows: | ||||||
|  |  | ||||||
|  |             bits 0 to 4  FCHECK  (check bits for CMF and FLG) | ||||||
|  |             bit  5       FDICT   (preset dictionary) | ||||||
|  |             bits 6 to 7  FLEVEL  (compression level) | ||||||
|  |  | ||||||
|  |          The FCHECK value must be such that CMF and FLG, when viewed as | ||||||
|  |          a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), | ||||||
|  |          is a multiple of 31. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 5] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       FDICT (Preset dictionary) | ||||||
|  |          If FDICT is set, a DICT dictionary identifier is present | ||||||
|  |          immediately after the FLG byte. The dictionary is a sequence of | ||||||
|  |          bytes which are initially fed to the compressor without | ||||||
|  |          producing any compressed output. DICT is the Adler-32 checksum | ||||||
|  |          of this sequence of bytes (see the definition of ADLER32 | ||||||
|  |          below).  The decompressor can use this identifier to determine | ||||||
|  |          which dictionary has been used by the compressor. | ||||||
|  |  | ||||||
|  |       FLEVEL (Compression level) | ||||||
|  |          These flags are available for use by specific compression | ||||||
|  |          methods.  The "deflate" method (CM = 8) sets these flags as | ||||||
|  |          follows: | ||||||
|  |  | ||||||
|  |             0 - compressor used fastest algorithm | ||||||
|  |             1 - compressor used fast algorithm | ||||||
|  |             2 - compressor used default algorithm | ||||||
|  |             3 - compressor used maximum compression, slowest algorithm | ||||||
|  |  | ||||||
|  |          The information in FLEVEL is not needed for decompression; it | ||||||
|  |          is there to indicate if recompression might be worthwhile. | ||||||
|  |  | ||||||
|  |       compressed data | ||||||
|  |          For compression method 8, the compressed data is stored in the | ||||||
|  |          deflate compressed data format as described in the document | ||||||
|  |          "DEFLATE Compressed Data Format Specification" by L. Peter | ||||||
|  |          Deutsch. (See reference [3] in Chapter 3, below) | ||||||
|  |  | ||||||
|  |          Other compressed data formats are not specified in this version | ||||||
|  |          of the zlib specification. | ||||||
|  |  | ||||||
|  |       ADLER32 (Adler-32 checksum) | ||||||
|  |          This contains a checksum value of the uncompressed data | ||||||
|  |          (excluding any dictionary data) computed according to Adler-32 | ||||||
|  |          algorithm. This algorithm is a 32-bit extension and improvement | ||||||
|  |          of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 | ||||||
|  |          standard. See references [4] and [5] in Chapter 3, below) | ||||||
|  |  | ||||||
|  |          Adler-32 is composed of two sums accumulated per byte: s1 is | ||||||
|  |          the sum of all bytes, s2 is the sum of all s1 values. Both sums | ||||||
|  |          are done modulo 65521. s1 is initialized to 1, s2 to zero.  The | ||||||
|  |          Adler-32 checksum is stored as s2*65536 + s1 in most- | ||||||
|  |          significant-byte first (network) order. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 6] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    2.3. Compliance | ||||||
|  |  | ||||||
|  |       A compliant compressor must produce streams with correct CMF, FLG | ||||||
|  |       and ADLER32, but need not support preset dictionaries.  When the | ||||||
|  |       zlib data format is used as part of another standard data format, | ||||||
|  |       the compressor may use only preset dictionaries that are specified | ||||||
|  |       by this other data format.  If this other format does not use the | ||||||
|  |       preset dictionary feature, the compressor must not set the FDICT | ||||||
|  |       flag. | ||||||
|  |  | ||||||
|  |       A compliant decompressor must check CMF, FLG, and ADLER32, and | ||||||
|  |       provide an error indication if any of these have incorrect values. | ||||||
|  |       A compliant decompressor must give an error indication if CM is | ||||||
|  |       not one of the values defined in this specification (only the | ||||||
|  |       value 8 is permitted in this version), since another value could | ||||||
|  |       indicate the presence of new features that would cause subsequent | ||||||
|  |       data to be interpreted incorrectly.  A compliant decompressor must | ||||||
|  |       give an error indication if FDICT is set and DICTID is not the | ||||||
|  |       identifier of a known preset dictionary.  A decompressor may | ||||||
|  |       ignore FLEVEL and still be compliant.  When the zlib data format | ||||||
|  |       is being used as a part of another standard format, a compliant | ||||||
|  |       decompressor must support all the preset dictionaries specified by | ||||||
|  |       the other format. When the other format does not use the preset | ||||||
|  |       dictionary feature, a compliant decompressor must reject any | ||||||
|  |       stream in which the FDICT flag is set. | ||||||
|  |  | ||||||
|  | 3. References | ||||||
|  |  | ||||||
|  |    [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", | ||||||
|  |        available in ftp://ftp.uu.net/pub/archiving/zip/doc/ | ||||||
|  |  | ||||||
|  |    [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", | ||||||
|  |        available in ftp://ftp.uu.net/graphics/png/documents/ | ||||||
|  |  | ||||||
|  |    [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", | ||||||
|  |        available in ftp://ftp.uu.net/pub/archiving/zip/doc/ | ||||||
|  |  | ||||||
|  |    [4] Fletcher, J. G., "An Arithmetic Checksum for Serial | ||||||
|  |        Transmissions," IEEE Transactions on Communications, Vol. COM-30, | ||||||
|  |        No. 1, January 1982, pp. 247-252. | ||||||
|  |  | ||||||
|  |    [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," | ||||||
|  |        November, 1993, pp. 144, 145. (Available from | ||||||
|  |        gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 7] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 4. Source code | ||||||
|  |  | ||||||
|  |    Source code for a C language implementation of a "zlib" compliant | ||||||
|  |    library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. | ||||||
|  |  | ||||||
|  | 5. Security Considerations | ||||||
|  |  | ||||||
|  |    A decoder that fails to check the ADLER32 checksum value may be | ||||||
|  |    subject to undetected data corruption. | ||||||
|  |  | ||||||
|  | 6. Acknowledgements | ||||||
|  |  | ||||||
|  |    Trademarks cited in this document are the property of their | ||||||
|  |    respective owners. | ||||||
|  |  | ||||||
|  |    Jean-Loup Gailly and Mark Adler designed the zlib format and wrote | ||||||
|  |    the related software described in this specification.  Glenn | ||||||
|  |    Randers-Pehrson converted this document to RFC and HTML format. | ||||||
|  |  | ||||||
|  | 7. Authors' Addresses | ||||||
|  |  | ||||||
|  |    L. Peter Deutsch | ||||||
|  |    Aladdin Enterprises | ||||||
|  |    203 Santa Margarita Ave. | ||||||
|  |    Menlo Park, CA 94025 | ||||||
|  |  | ||||||
|  |    Phone: (415) 322-0103 (AM only) | ||||||
|  |    FAX:   (415) 322-1734 | ||||||
|  |    EMail: <ghost@aladdin.com> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    Jean-Loup Gailly | ||||||
|  |  | ||||||
|  |    EMail: <gzip@prep.ai.mit.edu> | ||||||
|  |  | ||||||
|  |    Questions about the technical content of this specification can be | ||||||
|  |    sent by email to | ||||||
|  |  | ||||||
|  |    Jean-Loup Gailly <gzip@prep.ai.mit.edu> and | ||||||
|  |    Mark Adler <madler@alumni.caltech.edu> | ||||||
|  |  | ||||||
|  |    Editorial comments on this specification can be sent by email to | ||||||
|  |  | ||||||
|  |    L. Peter Deutsch <ghost@aladdin.com> and | ||||||
|  |    Glenn Randers-Pehrson <randeg@alumni.rpi.edu> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 8] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 8. Appendix: Rationale | ||||||
|  |  | ||||||
|  |    8.1. Preset dictionaries | ||||||
|  |  | ||||||
|  |       A preset dictionary is specially useful to compress short input | ||||||
|  |       sequences. The compressor can take advantage of the dictionary | ||||||
|  |       context to encode the input in a more compact manner. The | ||||||
|  |       decompressor can be initialized with the appropriate context by | ||||||
|  |       virtually decompressing a compressed version of the dictionary | ||||||
|  |       without producing any output. However for certain compression | ||||||
|  |       algorithms such as the deflate algorithm this operation can be | ||||||
|  |       achieved without actually performing any decompression. | ||||||
|  |  | ||||||
|  |       The compressor and the decompressor must use exactly the same | ||||||
|  |       dictionary. The dictionary may be fixed or may be chosen among a | ||||||
|  |       certain number of predefined dictionaries, according to the kind | ||||||
|  |       of input data. The decompressor can determine which dictionary has | ||||||
|  |       been chosen by the compressor by checking the dictionary | ||||||
|  |       identifier. This document does not specify the contents of | ||||||
|  |       predefined dictionaries, since the optimal dictionaries are | ||||||
|  |       application specific. Standard data formats using this feature of | ||||||
|  |       the zlib specification must precisely define the allowed | ||||||
|  |       dictionaries. | ||||||
|  |  | ||||||
|  |    8.2. The Adler-32 algorithm | ||||||
|  |  | ||||||
|  |       The Adler-32 algorithm is much faster than the CRC32 algorithm yet | ||||||
|  |       still provides an extremely low probability of undetected errors. | ||||||
|  |  | ||||||
|  |       The modulo on unsigned long accumulators can be delayed for 5552 | ||||||
|  |       bytes, so the modulo operation time is negligible.  If the bytes | ||||||
|  |       are a, b, c, the second sum is 3a + 2b + c + 3, and so is position | ||||||
|  |       and order sensitive, unlike the first sum, which is just a | ||||||
|  |       checksum.  That 65521 is prime is important to avoid a possible | ||||||
|  |       large class of two-byte errors that leave the check unchanged. | ||||||
|  |       (The Fletcher checksum uses 255, which is not prime and which also | ||||||
|  |       makes the Fletcher check insensitive to single byte changes 0 <-> | ||||||
|  |       255.) | ||||||
|  |  | ||||||
|  |       The sum s1 is initialized to 1 instead of zero to make the length | ||||||
|  |       of the sequence part of s2, so that the length does not have to be | ||||||
|  |       checked separately. (Any sequence of zeroes has a Fletcher | ||||||
|  |       checksum of zero.) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                      [Page 9] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 9. Appendix: Sample code | ||||||
|  |  | ||||||
|  |    The following C code computes the Adler-32 checksum of a data buffer. | ||||||
|  |    It is written for clarity, not for speed.  The sample code is in the | ||||||
|  |    ANSI C programming language. Non C users may find it easier to read | ||||||
|  |    with these hints: | ||||||
|  |  | ||||||
|  |       &      Bitwise AND operator. | ||||||
|  |       >>     Bitwise right shift operator. When applied to an | ||||||
|  |              unsigned quantity, as here, right shift inserts zero bit(s) | ||||||
|  |              at the left. | ||||||
|  |       <<     Bitwise left shift operator. Left shift inserts zero | ||||||
|  |              bit(s) at the right. | ||||||
|  |       ++     "n++" increments the variable n. | ||||||
|  |       %      modulo operator: a % b is the remainder of a divided by b. | ||||||
|  |  | ||||||
|  |       #define BASE 65521 /* largest prime smaller than 65536 */ | ||||||
|  |  | ||||||
|  |       /* | ||||||
|  |          Update a running Adler-32 checksum with the bytes buf[0..len-1] | ||||||
|  |        and return the updated checksum. The Adler-32 checksum should be | ||||||
|  |        initialized to 1. | ||||||
|  |  | ||||||
|  |        Usage example: | ||||||
|  |  | ||||||
|  |          unsigned long adler = 1L; | ||||||
|  |  | ||||||
|  |          while (read_buffer(buffer, length) != EOF) { | ||||||
|  |            adler = update_adler32(adler, buffer, length); | ||||||
|  |          } | ||||||
|  |          if (adler != original_adler) error(); | ||||||
|  |       */ | ||||||
|  |       unsigned long update_adler32(unsigned long adler, | ||||||
|  |          unsigned char *buf, int len) | ||||||
|  |       { | ||||||
|  |         unsigned long s1 = adler & 0xffff; | ||||||
|  |         unsigned long s2 = (adler >> 16) & 0xffff; | ||||||
|  |         int n; | ||||||
|  |  | ||||||
|  |         for (n = 0; n < len; n++) { | ||||||
|  |           s1 = (s1 + buf[n]) % BASE; | ||||||
|  |           s2 = (s2 + s1)     % BASE; | ||||||
|  |         } | ||||||
|  |         return (s2 << 16) + s1; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       /* Return the adler32 of the bytes buf[0..len-1] */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                     [Page 10] | ||||||
|  |  | ||||||
|  | RFC 1950       ZLIB Compressed Data Format Specification        May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       unsigned long adler32(unsigned char *buf, int len) | ||||||
|  |       { | ||||||
|  |         return update_adler32(1L, buf, len); | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch & Gailly             Informational                     [Page 11] | ||||||
|  |  | ||||||
							
								
								
									
										955
									
								
								doc/rfc1951.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										955
									
								
								doc/rfc1951.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,955 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Network Working Group                                         P. Deutsch | ||||||
|  | Request for Comments: 1951                           Aladdin Enterprises | ||||||
|  | Category: Informational                                         May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         DEFLATE Compressed Data Format Specification version 1.3 | ||||||
|  |  | ||||||
|  | Status of This Memo | ||||||
|  |  | ||||||
|  |    This memo provides information for the Internet community.  This memo | ||||||
|  |    does not specify an Internet standard of any kind.  Distribution of | ||||||
|  |    this memo is unlimited. | ||||||
|  |  | ||||||
|  | IESG Note: | ||||||
|  |  | ||||||
|  |    The IESG takes no position on the validity of any Intellectual | ||||||
|  |    Property Rights statements contained in this document. | ||||||
|  |  | ||||||
|  | Notices | ||||||
|  |  | ||||||
|  |    Copyright (c) 1996 L. Peter Deutsch | ||||||
|  |  | ||||||
|  |    Permission is granted to copy and distribute this document for any | ||||||
|  |    purpose and without charge, including translations into other | ||||||
|  |    languages and incorporation into compilations, provided that the | ||||||
|  |    copyright notice and this notice are preserved, and that any | ||||||
|  |    substantive changes or deletions from the original are clearly | ||||||
|  |    marked. | ||||||
|  |  | ||||||
|  |    A pointer to the latest version of this and related documentation in | ||||||
|  |    HTML format can be found at the URL | ||||||
|  |    <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. | ||||||
|  |  | ||||||
|  | Abstract | ||||||
|  |  | ||||||
|  |    This specification defines a lossless compressed data format that | ||||||
|  |    compresses data using a combination of the LZ77 algorithm and Huffman | ||||||
|  |    coding, with efficiency comparable to the best currently available | ||||||
|  |    general-purpose compression methods.  The data can be produced or | ||||||
|  |    consumed, even for an arbitrarily long sequentially presented input | ||||||
|  |    data stream, using only an a priori bounded amount of intermediate | ||||||
|  |    storage.  The format can be implemented readily in a manner not | ||||||
|  |    covered by patents. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 1] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Table of Contents | ||||||
|  |  | ||||||
|  |    1. Introduction ................................................... 2 | ||||||
|  |       1.1. Purpose ................................................... 2 | ||||||
|  |       1.2. Intended audience ......................................... 3 | ||||||
|  |       1.3. Scope ..................................................... 3 | ||||||
|  |       1.4. Compliance ................................................ 3 | ||||||
|  |       1.5.  Definitions of terms and conventions used ................ 3 | ||||||
|  |       1.6. Changes from previous versions ............................ 4 | ||||||
|  |    2. Compressed representation overview ............................. 4 | ||||||
|  |    3. Detailed specification ......................................... 5 | ||||||
|  |       3.1. Overall conventions ....................................... 5 | ||||||
|  |           3.1.1. Packing into bytes .................................. 5 | ||||||
|  |       3.2. Compressed block format ................................... 6 | ||||||
|  |           3.2.1. Synopsis of prefix and Huffman coding ............... 6 | ||||||
|  |           3.2.2. Use of Huffman coding in the "deflate" format ....... 7 | ||||||
|  |           3.2.3. Details of block format ............................. 9 | ||||||
|  |           3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 | ||||||
|  |           3.2.5. Compressed blocks (length and distance codes) ...... 11 | ||||||
|  |           3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 | ||||||
|  |           3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 | ||||||
|  |       3.3. Compliance ............................................... 14 | ||||||
|  |    4. Compression algorithm details ................................. 14 | ||||||
|  |    5. References .................................................... 16 | ||||||
|  |    6. Security Considerations ....................................... 16 | ||||||
|  |    7. Source code ................................................... 16 | ||||||
|  |    8. Acknowledgements .............................................. 16 | ||||||
|  |    9. Author's Address .............................................. 17 | ||||||
|  |  | ||||||
|  | 1. Introduction | ||||||
|  |  | ||||||
|  |    1.1. Purpose | ||||||
|  |  | ||||||
|  |       The purpose of this specification is to define a lossless | ||||||
|  |       compressed data format that: | ||||||
|  |           * Is independent of CPU type, operating system, file system, | ||||||
|  |             and character set, and hence can be used for interchange; | ||||||
|  |           * Can be produced or consumed, even for an arbitrarily long | ||||||
|  |             sequentially presented input data stream, using only an a | ||||||
|  |             priori bounded amount of intermediate storage, and hence | ||||||
|  |             can be used in data communications or similar structures | ||||||
|  |             such as Unix filters; | ||||||
|  |           * Compresses data with efficiency comparable to the best | ||||||
|  |             currently available general-purpose compression methods, | ||||||
|  |             and in particular considerably better than the "compress" | ||||||
|  |             program; | ||||||
|  |           * Can be implemented readily in a manner not covered by | ||||||
|  |             patents, and hence can be practiced freely; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 2] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |           * Is compatible with the file format produced by the current | ||||||
|  |             widely used gzip utility, in that conforming decompressors | ||||||
|  |             will be able to read data produced by the existing gzip | ||||||
|  |             compressor. | ||||||
|  |  | ||||||
|  |       The data format defined by this specification does not attempt to: | ||||||
|  |  | ||||||
|  |           * Allow random access to compressed data; | ||||||
|  |           * Compress specialized data (e.g., raster graphics) as well | ||||||
|  |             as the best currently available specialized algorithms. | ||||||
|  |  | ||||||
|  |       A simple counting argument shows that no lossless compression | ||||||
|  |       algorithm can compress every possible input data set.  For the | ||||||
|  |       format defined here, the worst case expansion is 5 bytes per 32K- | ||||||
|  |       byte block, i.e., a size increase of 0.015% for large data sets. | ||||||
|  |       English text usually compresses by a factor of 2.5 to 3; | ||||||
|  |       executable files usually compress somewhat less; graphical data | ||||||
|  |       such as raster images may compress much more. | ||||||
|  |  | ||||||
|  |    1.2. Intended audience | ||||||
|  |  | ||||||
|  |       This specification is intended for use by implementors of software | ||||||
|  |       to compress data into "deflate" format and/or decompress data from | ||||||
|  |       "deflate" format. | ||||||
|  |  | ||||||
|  |       The text of the specification assumes a basic background in | ||||||
|  |       programming at the level of bits and other primitive data | ||||||
|  |       representations.  Familiarity with the technique of Huffman coding | ||||||
|  |       is helpful but not required. | ||||||
|  |  | ||||||
|  |    1.3. Scope | ||||||
|  |  | ||||||
|  |       The specification specifies a method for representing a sequence | ||||||
|  |       of bytes as a (usually shorter) sequence of bits, and a method for | ||||||
|  |       packing the latter bit sequence into bytes. | ||||||
|  |  | ||||||
|  |    1.4. Compliance | ||||||
|  |  | ||||||
|  |       Unless otherwise indicated below, a compliant decompressor must be | ||||||
|  |       able to accept and decompress any data set that conforms to all | ||||||
|  |       the specifications presented here; a compliant compressor must | ||||||
|  |       produce data sets that conform to all the specifications presented | ||||||
|  |       here. | ||||||
|  |  | ||||||
|  |    1.5.  Definitions of terms and conventions used | ||||||
|  |  | ||||||
|  |       Byte: 8 bits stored or transmitted as a unit (same as an octet). | ||||||
|  |       For this specification, a byte is exactly 8 bits, even on machines | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 3] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       which store a character on a number of bits different from eight. | ||||||
|  |       See below, for the numbering of bits within a byte. | ||||||
|  |  | ||||||
|  |       String: a sequence of arbitrary bytes. | ||||||
|  |  | ||||||
|  |    1.6. Changes from previous versions | ||||||
|  |  | ||||||
|  |       There have been no technical changes to the deflate format since | ||||||
|  |       version 1.1 of this specification.  In version 1.2, some | ||||||
|  |       terminology was changed.  Version 1.3 is a conversion of the | ||||||
|  |       specification to RFC style. | ||||||
|  |  | ||||||
|  | 2. Compressed representation overview | ||||||
|  |  | ||||||
|  |    A compressed data set consists of a series of blocks, corresponding | ||||||
|  |    to successive blocks of input data.  The block sizes are arbitrary, | ||||||
|  |    except that non-compressible blocks are limited to 65,535 bytes. | ||||||
|  |  | ||||||
|  |    Each block is compressed using a combination of the LZ77 algorithm | ||||||
|  |    and Huffman coding. The Huffman trees for each block are independent | ||||||
|  |    of those for previous or subsequent blocks; the LZ77 algorithm may | ||||||
|  |    use a reference to a duplicated string occurring in a previous block, | ||||||
|  |    up to 32K input bytes before. | ||||||
|  |  | ||||||
|  |    Each block consists of two parts: a pair of Huffman code trees that | ||||||
|  |    describe the representation of the compressed data part, and a | ||||||
|  |    compressed data part.  (The Huffman trees themselves are compressed | ||||||
|  |    using Huffman encoding.)  The compressed data consists of a series of | ||||||
|  |    elements of two types: literal bytes (of strings that have not been | ||||||
|  |    detected as duplicated within the previous 32K input bytes), and | ||||||
|  |    pointers to duplicated strings, where a pointer is represented as a | ||||||
|  |    pair <length, backward distance>.  The representation used in the | ||||||
|  |    "deflate" format limits distances to 32K bytes and lengths to 258 | ||||||
|  |    bytes, but does not limit the size of a block, except for | ||||||
|  |    uncompressible blocks, which are limited as noted above. | ||||||
|  |  | ||||||
|  |    Each type of value (literals, distances, and lengths) in the | ||||||
|  |    compressed data is represented using a Huffman code, using one code | ||||||
|  |    tree for literals and lengths and a separate code tree for distances. | ||||||
|  |    The code trees for each block appear in a compact form just before | ||||||
|  |    the compressed data for that block. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 4] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 3. Detailed specification | ||||||
|  |  | ||||||
|  |    3.1. Overall conventions In the diagrams below, a box like this: | ||||||
|  |  | ||||||
|  |          +---+ | ||||||
|  |          |   | <-- the vertical bars might be missing | ||||||
|  |          +---+ | ||||||
|  |  | ||||||
|  |       represents one byte; a box like this: | ||||||
|  |  | ||||||
|  |          +==============+ | ||||||
|  |          |              | | ||||||
|  |          +==============+ | ||||||
|  |  | ||||||
|  |       represents a variable number of bytes. | ||||||
|  |  | ||||||
|  |       Bytes stored within a computer do not have a "bit order", since | ||||||
|  |       they are always treated as a unit.  However, a byte considered as | ||||||
|  |       an integer between 0 and 255 does have a most- and least- | ||||||
|  |       significant bit, and since we write numbers with the most- | ||||||
|  |       significant digit on the left, we also write bytes with the most- | ||||||
|  |       significant bit on the left.  In the diagrams below, we number the | ||||||
|  |       bits of a byte so that bit 0 is the least-significant bit, i.e., | ||||||
|  |       the bits are numbered: | ||||||
|  |  | ||||||
|  |          +--------+ | ||||||
|  |          |76543210| | ||||||
|  |          +--------+ | ||||||
|  |  | ||||||
|  |       Within a computer, a number may occupy multiple bytes.  All | ||||||
|  |       multi-byte numbers in the format described here are stored with | ||||||
|  |       the least-significant byte first (at the lower memory address). | ||||||
|  |       For example, the decimal number 520 is stored as: | ||||||
|  |  | ||||||
|  |              0        1 | ||||||
|  |          +--------+--------+ | ||||||
|  |          |00001000|00000010| | ||||||
|  |          +--------+--------+ | ||||||
|  |           ^        ^ | ||||||
|  |           |        | | ||||||
|  |           |        + more significant byte = 2 x 256 | ||||||
|  |           + less significant byte = 8 | ||||||
|  |  | ||||||
|  |       3.1.1. Packing into bytes | ||||||
|  |  | ||||||
|  |          This document does not address the issue of the order in which | ||||||
|  |          bits of a byte are transmitted on a bit-sequential medium, | ||||||
|  |          since the final data format described here is byte- rather than | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 5] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |          bit-oriented.  However, we describe the compressed block format | ||||||
|  |          in below, as a sequence of data elements of various bit | ||||||
|  |          lengths, not a sequence of bytes.  We must therefore specify | ||||||
|  |          how to pack these data elements into bytes to form the final | ||||||
|  |          compressed byte sequence: | ||||||
|  |  | ||||||
|  |              * Data elements are packed into bytes in order of | ||||||
|  |                increasing bit number within the byte, i.e., starting | ||||||
|  |                with the least-significant bit of the byte. | ||||||
|  |              * Data elements other than Huffman codes are packed | ||||||
|  |                starting with the least-significant bit of the data | ||||||
|  |                element. | ||||||
|  |              * Huffman codes are packed starting with the most- | ||||||
|  |                significant bit of the code. | ||||||
|  |  | ||||||
|  |          In other words, if one were to print out the compressed data as | ||||||
|  |          a sequence of bytes, starting with the first byte at the | ||||||
|  |          *right* margin and proceeding to the *left*, with the most- | ||||||
|  |          significant bit of each byte on the left as usual, one would be | ||||||
|  |          able to parse the result from right to left, with fixed-width | ||||||
|  |          elements in the correct MSB-to-LSB order and Huffman codes in | ||||||
|  |          bit-reversed order (i.e., with the first bit of the code in the | ||||||
|  |          relative LSB position). | ||||||
|  |  | ||||||
|  |    3.2. Compressed block format | ||||||
|  |  | ||||||
|  |       3.2.1. Synopsis of prefix and Huffman coding | ||||||
|  |  | ||||||
|  |          Prefix coding represents symbols from an a priori known | ||||||
|  |          alphabet by bit sequences (codes), one code for each symbol, in | ||||||
|  |          a manner such that different symbols may be represented by bit | ||||||
|  |          sequences of different lengths, but a parser can always parse | ||||||
|  |          an encoded string unambiguously symbol-by-symbol. | ||||||
|  |  | ||||||
|  |          We define a prefix code in terms of a binary tree in which the | ||||||
|  |          two edges descending from each non-leaf node are labeled 0 and | ||||||
|  |          1 and in which the leaf nodes correspond one-for-one with (are | ||||||
|  |          labeled with) the symbols of the alphabet; then the code for a | ||||||
|  |          symbol is the sequence of 0's and 1's on the edges leading from | ||||||
|  |          the root to the leaf labeled with that symbol.  For example: | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 6] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                           /\              Symbol    Code | ||||||
|  |                          0  1             ------    ---- | ||||||
|  |                         /    \                A      00 | ||||||
|  |                        /\     B               B       1 | ||||||
|  |                       0  1                    C     011 | ||||||
|  |                      /    \                   D     010 | ||||||
|  |                     A     /\ | ||||||
|  |                          0  1 | ||||||
|  |                         /    \ | ||||||
|  |                        D      C | ||||||
|  |  | ||||||
|  |          A parser can decode the next symbol from an encoded input | ||||||
|  |          stream by walking down the tree from the root, at each step | ||||||
|  |          choosing the edge corresponding to the next input bit. | ||||||
|  |  | ||||||
|  |          Given an alphabet with known symbol frequencies, the Huffman | ||||||
|  |          algorithm allows the construction of an optimal prefix code | ||||||
|  |          (one which represents strings with those symbol frequencies | ||||||
|  |          using the fewest bits of any possible prefix codes for that | ||||||
|  |          alphabet).  Such a code is called a Huffman code.  (See | ||||||
|  |          reference [1] in Chapter 5, references for additional | ||||||
|  |          information on Huffman codes.) | ||||||
|  |  | ||||||
|  |          Note that in the "deflate" format, the Huffman codes for the | ||||||
|  |          various alphabets must not exceed certain maximum code lengths. | ||||||
|  |          This constraint complicates the algorithm for computing code | ||||||
|  |          lengths from symbol frequencies.  Again, see Chapter 5, | ||||||
|  |          references for details. | ||||||
|  |  | ||||||
|  |       3.2.2. Use of Huffman coding in the "deflate" format | ||||||
|  |  | ||||||
|  |          The Huffman codes used for each alphabet in the "deflate" | ||||||
|  |          format have two additional rules: | ||||||
|  |  | ||||||
|  |              * All codes of a given bit length have lexicographically | ||||||
|  |                consecutive values, in the same order as the symbols | ||||||
|  |                they represent; | ||||||
|  |  | ||||||
|  |              * Shorter codes lexicographically precede longer codes. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 7] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |          We could recode the example above to follow this rule as | ||||||
|  |          follows, assuming that the order of the alphabet is ABCD: | ||||||
|  |  | ||||||
|  |             Symbol  Code | ||||||
|  |             ------  ---- | ||||||
|  |             A       10 | ||||||
|  |             B       0 | ||||||
|  |             C       110 | ||||||
|  |             D       111 | ||||||
|  |  | ||||||
|  |          I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are | ||||||
|  |          lexicographically consecutive. | ||||||
|  |  | ||||||
|  |          Given this rule, we can define the Huffman code for an alphabet | ||||||
|  |          just by giving the bit lengths of the codes for each symbol of | ||||||
|  |          the alphabet in order; this is sufficient to determine the | ||||||
|  |          actual codes.  In our example, the code is completely defined | ||||||
|  |          by the sequence of bit lengths (2, 1, 3, 3).  The following | ||||||
|  |          algorithm generates the codes as integers, intended to be read | ||||||
|  |          from most- to least-significant bit.  The code lengths are | ||||||
|  |          initially in tree[I].Len; the codes are produced in | ||||||
|  |          tree[I].Code. | ||||||
|  |  | ||||||
|  |          1)  Count the number of codes for each code length.  Let | ||||||
|  |              bl_count[N] be the number of codes of length N, N >= 1. | ||||||
|  |  | ||||||
|  |          2)  Find the numerical value of the smallest code for each | ||||||
|  |              code length: | ||||||
|  |  | ||||||
|  |                 code = 0; | ||||||
|  |                 bl_count[0] = 0; | ||||||
|  |                 for (bits = 1; bits <= MAX_BITS; bits++) { | ||||||
|  |                     code = (code + bl_count[bits-1]) << 1; | ||||||
|  |                     next_code[bits] = code; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |          3)  Assign numerical values to all codes, using consecutive | ||||||
|  |              values for all codes of the same length with the base | ||||||
|  |              values determined at step 2. Codes that are never used | ||||||
|  |              (which have a bit length of zero) must not be assigned a | ||||||
|  |              value. | ||||||
|  |  | ||||||
|  |                 for (n = 0;  n <= max_code; n++) { | ||||||
|  |                     len = tree[n].Len; | ||||||
|  |                     if (len != 0) { | ||||||
|  |                         tree[n].Code = next_code[len]; | ||||||
|  |                         next_code[len]++; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 8] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |          Example: | ||||||
|  |  | ||||||
|  |          Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, | ||||||
|  |          3, 2, 4, 4).  After step 1, we have: | ||||||
|  |  | ||||||
|  |             N      bl_count[N] | ||||||
|  |             -      ----------- | ||||||
|  |             2      1 | ||||||
|  |             3      5 | ||||||
|  |             4      2 | ||||||
|  |  | ||||||
|  |          Step 2 computes the following next_code values: | ||||||
|  |  | ||||||
|  |             N      next_code[N] | ||||||
|  |             -      ------------ | ||||||
|  |             1      0 | ||||||
|  |             2      0 | ||||||
|  |             3      2 | ||||||
|  |             4      14 | ||||||
|  |  | ||||||
|  |          Step 3 produces the following code values: | ||||||
|  |  | ||||||
|  |             Symbol Length   Code | ||||||
|  |             ------ ------   ---- | ||||||
|  |             A       3        010 | ||||||
|  |             B       3        011 | ||||||
|  |             C       3        100 | ||||||
|  |             D       3        101 | ||||||
|  |             E       3        110 | ||||||
|  |             F       2         00 | ||||||
|  |             G       4       1110 | ||||||
|  |             H       4       1111 | ||||||
|  |  | ||||||
|  |       3.2.3. Details of block format | ||||||
|  |  | ||||||
|  |          Each block of compressed data begins with 3 header bits | ||||||
|  |          containing the following data: | ||||||
|  |  | ||||||
|  |             first bit       BFINAL | ||||||
|  |             next 2 bits     BTYPE | ||||||
|  |  | ||||||
|  |          Note that the header bits do not necessarily begin on a byte | ||||||
|  |          boundary, since a block does not necessarily occupy an integral | ||||||
|  |          number of bytes. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 9] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |          BFINAL is set if and only if this is the last block of the data | ||||||
|  |          set. | ||||||
|  |  | ||||||
|  |          BTYPE specifies how the data are compressed, as follows: | ||||||
|  |  | ||||||
|  |             00 - no compression | ||||||
|  |             01 - compressed with fixed Huffman codes | ||||||
|  |             10 - compressed with dynamic Huffman codes | ||||||
|  |             11 - reserved (error) | ||||||
|  |  | ||||||
|  |          The only difference between the two compressed cases is how the | ||||||
|  |          Huffman codes for the literal/length and distance alphabets are | ||||||
|  |          defined. | ||||||
|  |  | ||||||
|  |          In all cases, the decoding algorithm for the actual data is as | ||||||
|  |          follows: | ||||||
|  |  | ||||||
|  |             do | ||||||
|  |                read block header from input stream. | ||||||
|  |                if stored with no compression | ||||||
|  |                   skip any remaining bits in current partially | ||||||
|  |                      processed byte | ||||||
|  |                   read LEN and NLEN (see next section) | ||||||
|  |                   copy LEN bytes of data to output | ||||||
|  |                otherwise | ||||||
|  |                   if compressed with dynamic Huffman codes | ||||||
|  |                      read representation of code trees (see | ||||||
|  |                         subsection below) | ||||||
|  |                   loop (until end of block code recognized) | ||||||
|  |                      decode literal/length value from input stream | ||||||
|  |                      if value < 256 | ||||||
|  |                         copy value (literal byte) to output stream | ||||||
|  |                      otherwise | ||||||
|  |                         if value = end of block (256) | ||||||
|  |                            break from loop | ||||||
|  |                         otherwise (value = 257..285) | ||||||
|  |                            decode distance from input stream | ||||||
|  |  | ||||||
|  |                            move backwards distance bytes in the output | ||||||
|  |                            stream, and copy length bytes from this | ||||||
|  |                            position to the output stream. | ||||||
|  |                   end loop | ||||||
|  |             while not last block | ||||||
|  |  | ||||||
|  |          Note that a duplicated string reference may refer to a string | ||||||
|  |          in a previous block; i.e., the backward distance may cross one | ||||||
|  |          or more block boundaries.  However a distance cannot refer past | ||||||
|  |          the beginning of the output stream.  (An application using a | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 10] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |          preset dictionary might discard part of the output stream; a | ||||||
|  |          distance can refer to that part of the output stream anyway) | ||||||
|  |          Note also that the referenced string may overlap the current | ||||||
|  |          position; for example, if the last 2 bytes decoded have values | ||||||
|  |          X and Y, a string reference with <length = 5, distance = 2> | ||||||
|  |          adds X,Y,X,Y,X to the output stream. | ||||||
|  |  | ||||||
|  |          We now specify each compression method in turn. | ||||||
|  |  | ||||||
|  |       3.2.4. Non-compressed blocks (BTYPE=00) | ||||||
|  |  | ||||||
|  |          Any bits of input up to the next byte boundary are ignored. | ||||||
|  |          The rest of the block consists of the following information: | ||||||
|  |  | ||||||
|  |               0   1   2   3   4... | ||||||
|  |             +---+---+---+---+================================+ | ||||||
|  |             |  LEN  | NLEN  |... LEN bytes of literal data...| | ||||||
|  |             +---+---+---+---+================================+ | ||||||
|  |  | ||||||
|  |          LEN is the number of data bytes in the block.  NLEN is the | ||||||
|  |          one's complement of LEN. | ||||||
|  |  | ||||||
|  |       3.2.5. Compressed blocks (length and distance codes) | ||||||
|  |  | ||||||
|  |          As noted above, encoded data blocks in the "deflate" format | ||||||
|  |          consist of sequences of symbols drawn from three conceptually | ||||||
|  |          distinct alphabets: either literal bytes, from the alphabet of | ||||||
|  |          byte values (0..255), or <length, backward distance> pairs, | ||||||
|  |          where the length is drawn from (3..258) and the distance is | ||||||
|  |          drawn from (1..32,768).  In fact, the literal and length | ||||||
|  |          alphabets are merged into a single alphabet (0..285), where | ||||||
|  |          values 0..255 represent literal bytes, the value 256 indicates | ||||||
|  |          end-of-block, and values 257..285 represent length codes | ||||||
|  |          (possibly in conjunction with extra bits following the symbol | ||||||
|  |          code) as follows: | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 11] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                  Extra               Extra               Extra | ||||||
|  |             Code Bits Length(s) Code Bits Lengths   Code Bits Length(s) | ||||||
|  |             ---- ---- ------     ---- ---- -------   ---- ---- ------- | ||||||
|  |              257   0     3       267   1   15,16     277   4   67-82 | ||||||
|  |              258   0     4       268   1   17,18     278   4   83-98 | ||||||
|  |              259   0     5       269   2   19-22     279   4   99-114 | ||||||
|  |              260   0     6       270   2   23-26     280   4  115-130 | ||||||
|  |              261   0     7       271   2   27-30     281   5  131-162 | ||||||
|  |              262   0     8       272   2   31-34     282   5  163-194 | ||||||
|  |              263   0     9       273   3   35-42     283   5  195-226 | ||||||
|  |              264   0    10       274   3   43-50     284   5  227-257 | ||||||
|  |              265   1  11,12      275   3   51-58     285   0    258 | ||||||
|  |              266   1  13,14      276   3   59-66 | ||||||
|  |  | ||||||
|  |          The extra bits should be interpreted as a machine integer | ||||||
|  |          stored with the most-significant bit first, e.g., bits 1110 | ||||||
|  |          represent the value 14. | ||||||
|  |  | ||||||
|  |                   Extra           Extra               Extra | ||||||
|  |              Code Bits Dist  Code Bits   Dist     Code Bits Distance | ||||||
|  |              ---- ---- ----  ---- ----  ------    ---- ---- -------- | ||||||
|  |                0   0    1     10   4     33-48    20    9   1025-1536 | ||||||
|  |                1   0    2     11   4     49-64    21    9   1537-2048 | ||||||
|  |                2   0    3     12   5     65-96    22   10   2049-3072 | ||||||
|  |                3   0    4     13   5     97-128   23   10   3073-4096 | ||||||
|  |                4   1   5,6    14   6    129-192   24   11   4097-6144 | ||||||
|  |                5   1   7,8    15   6    193-256   25   11   6145-8192 | ||||||
|  |                6   2   9-12   16   7    257-384   26   12  8193-12288 | ||||||
|  |                7   2  13-16   17   7    385-512   27   12 12289-16384 | ||||||
|  |                8   3  17-24   18   8    513-768   28   13 16385-24576 | ||||||
|  |                9   3  25-32   19   8   769-1024   29   13 24577-32768 | ||||||
|  |  | ||||||
|  |       3.2.6. Compression with fixed Huffman codes (BTYPE=01) | ||||||
|  |  | ||||||
|  |          The Huffman codes for the two alphabets are fixed, and are not | ||||||
|  |          represented explicitly in the data.  The Huffman code lengths | ||||||
|  |          for the literal/length alphabet are: | ||||||
|  |  | ||||||
|  |                    Lit Value    Bits        Codes | ||||||
|  |                    ---------    ----        ----- | ||||||
|  |                      0 - 143     8          00110000 through | ||||||
|  |                                             10111111 | ||||||
|  |                    144 - 255     9          110010000 through | ||||||
|  |                                             111111111 | ||||||
|  |                    256 - 279     7          0000000 through | ||||||
|  |                                             0010111 | ||||||
|  |                    280 - 287     8          11000000 through | ||||||
|  |                                             11000111 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 12] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |          The code lengths are sufficient to generate the actual codes, | ||||||
|  |          as described above; we show the codes in the table for added | ||||||
|  |          clarity.  Literal/length values 286-287 will never actually | ||||||
|  |          occur in the compressed data, but participate in the code | ||||||
|  |          construction. | ||||||
|  |  | ||||||
|  |          Distance codes 0-31 are represented by (fixed-length) 5-bit | ||||||
|  |          codes, with possible additional bits as shown in the table | ||||||
|  |          shown in Paragraph 3.2.5, above.  Note that distance codes 30- | ||||||
|  |          31 will never actually occur in the compressed data. | ||||||
|  |  | ||||||
|  |       3.2.7. Compression with dynamic Huffman codes (BTYPE=10) | ||||||
|  |  | ||||||
|  |          The Huffman codes for the two alphabets appear in the block | ||||||
|  |          immediately after the header bits and before the actual | ||||||
|  |          compressed data, first the literal/length code and then the | ||||||
|  |          distance code.  Each code is defined by a sequence of code | ||||||
|  |          lengths, as discussed in Paragraph 3.2.2, above.  For even | ||||||
|  |          greater compactness, the code length sequences themselves are | ||||||
|  |          compressed using a Huffman code.  The alphabet for code lengths | ||||||
|  |          is as follows: | ||||||
|  |  | ||||||
|  |                0 - 15: Represent code lengths of 0 - 15 | ||||||
|  |                    16: Copy the previous code length 3 - 6 times. | ||||||
|  |                        The next 2 bits indicate repeat length | ||||||
|  |                              (0 = 3, ... , 3 = 6) | ||||||
|  |                           Example:  Codes 8, 16 (+2 bits 11), | ||||||
|  |                                     16 (+2 bits 10) will expand to | ||||||
|  |                                     12 code lengths of 8 (1 + 6 + 5) | ||||||
|  |                    17: Repeat a code length of 0 for 3 - 10 times. | ||||||
|  |                        (3 bits of length) | ||||||
|  |                    18: Repeat a code length of 0 for 11 - 138 times | ||||||
|  |                        (7 bits of length) | ||||||
|  |  | ||||||
|  |          A code length of 0 indicates that the corresponding symbol in | ||||||
|  |          the literal/length or distance alphabet will not occur in the | ||||||
|  |          block, and should not participate in the Huffman code | ||||||
|  |          construction algorithm given earlier.  If only one distance | ||||||
|  |          code is used, it is encoded using one bit, not zero bits; in | ||||||
|  |          this case there is a single code length of one, with one unused | ||||||
|  |          code.  One distance code of zero bits means that there are no | ||||||
|  |          distance codes used at all (the data is all literals). | ||||||
|  |  | ||||||
|  |          We can now define the format of the block: | ||||||
|  |  | ||||||
|  |                5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) | ||||||
|  |                5 Bits: HDIST, # of Distance codes - 1        (1 - 32) | ||||||
|  |                4 Bits: HCLEN, # of Code Length codes - 4     (4 - 19) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 13] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                (HCLEN + 4) x 3 bits: code lengths for the code length | ||||||
|  |                   alphabet given just above, in the order: 16, 17, 18, | ||||||
|  |                   0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 | ||||||
|  |  | ||||||
|  |                   These code lengths are interpreted as 3-bit integers | ||||||
|  |                   (0-7); as above, a code length of 0 means the | ||||||
|  |                   corresponding symbol (literal/length or distance code | ||||||
|  |                   length) is not used. | ||||||
|  |  | ||||||
|  |                HLIT + 257 code lengths for the literal/length alphabet, | ||||||
|  |                   encoded using the code length Huffman code | ||||||
|  |  | ||||||
|  |                HDIST + 1 code lengths for the distance alphabet, | ||||||
|  |                   encoded using the code length Huffman code | ||||||
|  |  | ||||||
|  |                The actual compressed data of the block, | ||||||
|  |                   encoded using the literal/length and distance Huffman | ||||||
|  |                   codes | ||||||
|  |  | ||||||
|  |                The literal/length symbol 256 (end of data), | ||||||
|  |                   encoded using the literal/length Huffman code | ||||||
|  |  | ||||||
|  |          The code length repeat codes can cross from HLIT + 257 to the | ||||||
|  |          HDIST + 1 code lengths.  In other words, all code lengths form | ||||||
|  |          a single sequence of HLIT + HDIST + 258 values. | ||||||
|  |  | ||||||
|  |    3.3. Compliance | ||||||
|  |  | ||||||
|  |       A compressor may limit further the ranges of values specified in | ||||||
|  |       the previous section and still be compliant; for example, it may | ||||||
|  |       limit the range of backward pointers to some value smaller than | ||||||
|  |       32K.  Similarly, a compressor may limit the size of blocks so that | ||||||
|  |       a compressible block fits in memory. | ||||||
|  |  | ||||||
|  |       A compliant decompressor must accept the full range of possible | ||||||
|  |       values defined in the previous section, and must accept blocks of | ||||||
|  |       arbitrary size. | ||||||
|  |  | ||||||
|  | 4. Compression algorithm details | ||||||
|  |  | ||||||
|  |    While it is the intent of this document to define the "deflate" | ||||||
|  |    compressed data format without reference to any particular | ||||||
|  |    compression algorithm, the format is related to the compressed | ||||||
|  |    formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); | ||||||
|  |    since many variations of LZ77 are patented, it is strongly | ||||||
|  |    recommended that the implementor of a compressor follow the general | ||||||
|  |    algorithm presented here, which is known not to be patented per se. | ||||||
|  |    The material in this section is not part of the definition of the | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 14] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    specification per se, and a compressor need not follow it in order to | ||||||
|  |    be compliant. | ||||||
|  |  | ||||||
|  |    The compressor terminates a block when it determines that starting a | ||||||
|  |    new block with fresh trees would be useful, or when the block size | ||||||
|  |    fills up the compressor's block buffer. | ||||||
|  |  | ||||||
|  |    The compressor uses a chained hash table to find duplicated strings, | ||||||
|  |    using a hash function that operates on 3-byte sequences.  At any | ||||||
|  |    given point during compression, let XYZ be the next 3 input bytes to | ||||||
|  |    be examined (not necessarily all different, of course).  First, the | ||||||
|  |    compressor examines the hash chain for XYZ.  If the chain is empty, | ||||||
|  |    the compressor simply writes out X as a literal byte and advances one | ||||||
|  |    byte in the input.  If the hash chain is not empty, indicating that | ||||||
|  |    the sequence XYZ (or, if we are unlucky, some other 3 bytes with the | ||||||
|  |    same hash function value) has occurred recently, the compressor | ||||||
|  |    compares all strings on the XYZ hash chain with the actual input data | ||||||
|  |    sequence starting at the current point, and selects the longest | ||||||
|  |    match. | ||||||
|  |  | ||||||
|  |    The compressor searches the hash chains starting with the most recent | ||||||
|  |    strings, to favor small distances and thus take advantage of the | ||||||
|  |    Huffman encoding.  The hash chains are singly linked. There are no | ||||||
|  |    deletions from the hash chains; the algorithm simply discards matches | ||||||
|  |    that are too old.  To avoid a worst-case situation, very long hash | ||||||
|  |    chains are arbitrarily truncated at a certain length, determined by a | ||||||
|  |    run-time parameter. | ||||||
|  |  | ||||||
|  |    To improve overall compression, the compressor optionally defers the | ||||||
|  |    selection of matches ("lazy matching"): after a match of length N has | ||||||
|  |    been found, the compressor searches for a longer match starting at | ||||||
|  |    the next input byte.  If it finds a longer match, it truncates the | ||||||
|  |    previous match to a length of one (thus producing a single literal | ||||||
|  |    byte) and then emits the longer match.  Otherwise, it emits the | ||||||
|  |    original match, and, as described above, advances N bytes before | ||||||
|  |    continuing. | ||||||
|  |  | ||||||
|  |    Run-time parameters also control this "lazy match" procedure.  If | ||||||
|  |    compression ratio is most important, the compressor attempts a | ||||||
|  |    complete second search regardless of the length of the first match. | ||||||
|  |    In the normal case, if the current match is "long enough", the | ||||||
|  |    compressor reduces the search for a longer match, thus speeding up | ||||||
|  |    the process.  If speed is most important, the compressor inserts new | ||||||
|  |    strings in the hash table only when no match was found, or when the | ||||||
|  |    match is not "too long".  This degrades the compression ratio but | ||||||
|  |    saves time since there are both fewer insertions and fewer searches. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 15] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 5. References | ||||||
|  |  | ||||||
|  |    [1] Huffman, D. A., "A Method for the Construction of Minimum | ||||||
|  |        Redundancy Codes", Proceedings of the Institute of Radio | ||||||
|  |        Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. | ||||||
|  |  | ||||||
|  |    [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data | ||||||
|  |        Compression", IEEE Transactions on Information Theory, Vol. 23, | ||||||
|  |        No. 3, pp. 337-343. | ||||||
|  |  | ||||||
|  |    [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, | ||||||
|  |        available in ftp://ftp.uu.net/pub/archiving/zip/doc/ | ||||||
|  |  | ||||||
|  |    [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, | ||||||
|  |        available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ | ||||||
|  |  | ||||||
|  |    [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix | ||||||
|  |        encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. | ||||||
|  |  | ||||||
|  |    [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," | ||||||
|  |        Comm. ACM, 33,4, April 1990, pp. 449-459. | ||||||
|  |  | ||||||
|  | 6. Security Considerations | ||||||
|  |  | ||||||
|  |    Any data compression method involves the reduction of redundancy in | ||||||
|  |    the data.  Consequently, any corruption of the data is likely to have | ||||||
|  |    severe effects and be difficult to correct.  Uncompressed text, on | ||||||
|  |    the other hand, will probably still be readable despite the presence | ||||||
|  |    of some corrupted bytes. | ||||||
|  |  | ||||||
|  |    It is recommended that systems using this data format provide some | ||||||
|  |    means of validating the integrity of the compressed data.  See | ||||||
|  |    reference [3], for example. | ||||||
|  |  | ||||||
|  | 7. Source code | ||||||
|  |  | ||||||
|  |    Source code for a C language implementation of a "deflate" compliant | ||||||
|  |    compressor and decompressor is available within the zlib package at | ||||||
|  |    ftp://ftp.uu.net/pub/archiving/zip/zlib/. | ||||||
|  |  | ||||||
|  | 8. Acknowledgements | ||||||
|  |  | ||||||
|  |    Trademarks cited in this document are the property of their | ||||||
|  |    respective owners. | ||||||
|  |  | ||||||
|  |    Phil Katz designed the deflate format.  Jean-Loup Gailly and Mark | ||||||
|  |    Adler wrote the related software described in this specification. | ||||||
|  |    Glenn Randers-Pehrson converted this document to RFC and HTML format. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 16] | ||||||
|  |  | ||||||
|  | RFC 1951      DEFLATE Compressed Data Format Specification      May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 9. Author's Address | ||||||
|  |  | ||||||
|  |    L. Peter Deutsch | ||||||
|  |    Aladdin Enterprises | ||||||
|  |    203 Santa Margarita Ave. | ||||||
|  |    Menlo Park, CA 94025 | ||||||
|  |  | ||||||
|  |    Phone: (415) 322-0103 (AM only) | ||||||
|  |    FAX:   (415) 322-1734 | ||||||
|  |    EMail: <ghost@aladdin.com> | ||||||
|  |  | ||||||
|  |    Questions about the technical content of this specification can be | ||||||
|  |    sent by email to: | ||||||
|  |  | ||||||
|  |    Jean-Loup Gailly <gzip@prep.ai.mit.edu> and | ||||||
|  |    Mark Adler <madler@alumni.caltech.edu> | ||||||
|  |  | ||||||
|  |    Editorial comments on this specification can be sent by email to: | ||||||
|  |  | ||||||
|  |    L. Peter Deutsch <ghost@aladdin.com> and | ||||||
|  |    Glenn Randers-Pehrson <randeg@alumni.rpi.edu> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 17] | ||||||
|  |  | ||||||
							
								
								
									
										675
									
								
								doc/rfc1952.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										675
									
								
								doc/rfc1952.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,675 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Network Working Group                                         P. Deutsch | ||||||
|  | Request for Comments: 1952                           Aladdin Enterprises | ||||||
|  | Category: Informational                                         May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                GZIP file format specification version 4.3 | ||||||
|  |  | ||||||
|  | Status of This Memo | ||||||
|  |  | ||||||
|  |    This memo provides information for the Internet community.  This memo | ||||||
|  |    does not specify an Internet standard of any kind.  Distribution of | ||||||
|  |    this memo is unlimited. | ||||||
|  |  | ||||||
|  | IESG Note: | ||||||
|  |  | ||||||
|  |    The IESG takes no position on the validity of any Intellectual | ||||||
|  |    Property Rights statements contained in this document. | ||||||
|  |  | ||||||
|  | Notices | ||||||
|  |  | ||||||
|  |    Copyright (c) 1996 L. Peter Deutsch | ||||||
|  |  | ||||||
|  |    Permission is granted to copy and distribute this document for any | ||||||
|  |    purpose and without charge, including translations into other | ||||||
|  |    languages and incorporation into compilations, provided that the | ||||||
|  |    copyright notice and this notice are preserved, and that any | ||||||
|  |    substantive changes or deletions from the original are clearly | ||||||
|  |    marked. | ||||||
|  |  | ||||||
|  |    A pointer to the latest version of this and related documentation in | ||||||
|  |    HTML format can be found at the URL | ||||||
|  |    <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>. | ||||||
|  |  | ||||||
|  | Abstract | ||||||
|  |  | ||||||
|  |    This specification defines a lossless compressed data format that is | ||||||
|  |    compatible with the widely used GZIP utility.  The format includes a | ||||||
|  |    cyclic redundancy check value for detecting data corruption.  The | ||||||
|  |    format presently uses the DEFLATE method of compression but can be | ||||||
|  |    easily extended to use other compression methods.  The format can be | ||||||
|  |    implemented readily in a manner not covered by patents. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 1] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Table of Contents | ||||||
|  |  | ||||||
|  |    1. Introduction ................................................... 2 | ||||||
|  |       1.1. Purpose ................................................... 2 | ||||||
|  |       1.2. Intended audience ......................................... 3 | ||||||
|  |       1.3. Scope ..................................................... 3 | ||||||
|  |       1.4. Compliance ................................................ 3 | ||||||
|  |       1.5. Definitions of terms and conventions used ................. 3 | ||||||
|  |       1.6. Changes from previous versions ............................ 3 | ||||||
|  |    2. Detailed specification ......................................... 4 | ||||||
|  |       2.1. Overall conventions ....................................... 4 | ||||||
|  |       2.2. File format ............................................... 5 | ||||||
|  |       2.3. Member format ............................................. 5 | ||||||
|  |           2.3.1. Member header and trailer ........................... 6 | ||||||
|  |               2.3.1.1. Extra field ................................... 8 | ||||||
|  |               2.3.1.2. Compliance .................................... 9 | ||||||
|  |       3. References .................................................. 9 | ||||||
|  |       4. Security Considerations .................................... 10 | ||||||
|  |       5. Acknowledgements ........................................... 10 | ||||||
|  |       6. Author's Address ........................................... 10 | ||||||
|  |       7. Appendix: Jean-Loup Gailly's gzip utility .................. 11 | ||||||
|  |       8. Appendix: Sample CRC Code .................................. 11 | ||||||
|  |  | ||||||
|  | 1. Introduction | ||||||
|  |  | ||||||
|  |    1.1. Purpose | ||||||
|  |  | ||||||
|  |       The purpose of this specification is to define a lossless | ||||||
|  |       compressed data format that: | ||||||
|  |  | ||||||
|  |           * Is independent of CPU type, operating system, file system, | ||||||
|  |             and character set, and hence can be used for interchange; | ||||||
|  |           * Can compress or decompress a data stream (as opposed to a | ||||||
|  |             randomly accessible file) to produce another data stream, | ||||||
|  |             using only an a priori bounded amount of intermediate | ||||||
|  |             storage, and hence can be used in data communications or | ||||||
|  |             similar structures such as Unix filters; | ||||||
|  |           * Compresses data with efficiency comparable to the best | ||||||
|  |             currently available general-purpose compression methods, | ||||||
|  |             and in particular considerably better than the "compress" | ||||||
|  |             program; | ||||||
|  |           * Can be implemented readily in a manner not covered by | ||||||
|  |             patents, and hence can be practiced freely; | ||||||
|  |           * Is compatible with the file format produced by the current | ||||||
|  |             widely used gzip utility, in that conforming decompressors | ||||||
|  |             will be able to read data produced by the existing gzip | ||||||
|  |             compressor. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 2] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       The data format defined by this specification does not attempt to: | ||||||
|  |  | ||||||
|  |           * Provide random access to compressed data; | ||||||
|  |           * Compress specialized data (e.g., raster graphics) as well as | ||||||
|  |             the best currently available specialized algorithms. | ||||||
|  |  | ||||||
|  |    1.2. Intended audience | ||||||
|  |  | ||||||
|  |       This specification is intended for use by implementors of software | ||||||
|  |       to compress data into gzip format and/or decompress data from gzip | ||||||
|  |       format. | ||||||
|  |  | ||||||
|  |       The text of the specification assumes a basic background in | ||||||
|  |       programming at the level of bits and other primitive data | ||||||
|  |       representations. | ||||||
|  |  | ||||||
|  |    1.3. Scope | ||||||
|  |  | ||||||
|  |       The specification specifies a compression method and a file format | ||||||
|  |       (the latter assuming only that a file can store a sequence of | ||||||
|  |       arbitrary bytes).  It does not specify any particular interface to | ||||||
|  |       a file system or anything about character sets or encodings | ||||||
|  |       (except for file names and comments, which are optional). | ||||||
|  |  | ||||||
|  |    1.4. Compliance | ||||||
|  |  | ||||||
|  |       Unless otherwise indicated below, a compliant decompressor must be | ||||||
|  |       able to accept and decompress any file that conforms to all the | ||||||
|  |       specifications presented here; a compliant compressor must produce | ||||||
|  |       files that conform to all the specifications presented here.  The | ||||||
|  |       material in the appendices is not part of the specification per se | ||||||
|  |       and is not relevant to compliance. | ||||||
|  |  | ||||||
|  |    1.5. Definitions of terms and conventions used | ||||||
|  |  | ||||||
|  |       byte: 8 bits stored or transmitted as a unit (same as an octet). | ||||||
|  |       (For this specification, a byte is exactly 8 bits, even on | ||||||
|  |       machines which store a character on a number of bits different | ||||||
|  |       from 8.)  See below for the numbering of bits within a byte. | ||||||
|  |  | ||||||
|  |    1.6. Changes from previous versions | ||||||
|  |  | ||||||
|  |       There have been no technical changes to the gzip format since | ||||||
|  |       version 4.1 of this specification.  In version 4.2, some | ||||||
|  |       terminology was changed, and the sample CRC code was rewritten for | ||||||
|  |       clarity and to eliminate the requirement for the caller to do pre- | ||||||
|  |       and post-conditioning.  Version 4.3 is a conversion of the | ||||||
|  |       specification to RFC style. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 3] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 2. Detailed specification | ||||||
|  |  | ||||||
|  |    2.1. Overall conventions | ||||||
|  |  | ||||||
|  |       In the diagrams below, a box like this: | ||||||
|  |  | ||||||
|  |          +---+ | ||||||
|  |          |   | <-- the vertical bars might be missing | ||||||
|  |          +---+ | ||||||
|  |  | ||||||
|  |       represents one byte; a box like this: | ||||||
|  |  | ||||||
|  |          +==============+ | ||||||
|  |          |              | | ||||||
|  |          +==============+ | ||||||
|  |  | ||||||
|  |       represents a variable number of bytes. | ||||||
|  |  | ||||||
|  |       Bytes stored within a computer do not have a "bit order", since | ||||||
|  |       they are always treated as a unit.  However, a byte considered as | ||||||
|  |       an integer between 0 and 255 does have a most- and least- | ||||||
|  |       significant bit, and since we write numbers with the most- | ||||||
|  |       significant digit on the left, we also write bytes with the most- | ||||||
|  |       significant bit on the left.  In the diagrams below, we number the | ||||||
|  |       bits of a byte so that bit 0 is the least-significant bit, i.e., | ||||||
|  |       the bits are numbered: | ||||||
|  |  | ||||||
|  |          +--------+ | ||||||
|  |          |76543210| | ||||||
|  |          +--------+ | ||||||
|  |  | ||||||
|  |       This document does not address the issue of the order in which | ||||||
|  |       bits of a byte are transmitted on a bit-sequential medium, since | ||||||
|  |       the data format described here is byte- rather than bit-oriented. | ||||||
|  |  | ||||||
|  |       Within a computer, a number may occupy multiple bytes.  All | ||||||
|  |       multi-byte numbers in the format described here are stored with | ||||||
|  |       the least-significant byte first (at the lower memory address). | ||||||
|  |       For example, the decimal number 520 is stored as: | ||||||
|  |  | ||||||
|  |              0        1 | ||||||
|  |          +--------+--------+ | ||||||
|  |          |00001000|00000010| | ||||||
|  |          +--------+--------+ | ||||||
|  |           ^        ^ | ||||||
|  |           |        | | ||||||
|  |           |        + more significant byte = 2 x 256 | ||||||
|  |           + less significant byte = 8 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 4] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    2.2. File format | ||||||
|  |  | ||||||
|  |       A gzip file consists of a series of "members" (compressed data | ||||||
|  |       sets).  The format of each member is specified in the following | ||||||
|  |       section.  The members simply appear one after another in the file, | ||||||
|  |       with no additional information before, between, or after them. | ||||||
|  |  | ||||||
|  |    2.3. Member format | ||||||
|  |  | ||||||
|  |       Each member has the following structure: | ||||||
|  |  | ||||||
|  |          +---+---+---+---+---+---+---+---+---+---+ | ||||||
|  |          |ID1|ID2|CM |FLG|     MTIME     |XFL|OS | (more-->) | ||||||
|  |          +---+---+---+---+---+---+---+---+---+---+ | ||||||
|  |  | ||||||
|  |       (if FLG.FEXTRA set) | ||||||
|  |  | ||||||
|  |          +---+---+=================================+ | ||||||
|  |          | XLEN  |...XLEN bytes of "extra field"...| (more-->) | ||||||
|  |          +---+---+=================================+ | ||||||
|  |  | ||||||
|  |       (if FLG.FNAME set) | ||||||
|  |  | ||||||
|  |          +=========================================+ | ||||||
|  |          |...original file name, zero-terminated...| (more-->) | ||||||
|  |          +=========================================+ | ||||||
|  |  | ||||||
|  |       (if FLG.FCOMMENT set) | ||||||
|  |  | ||||||
|  |          +===================================+ | ||||||
|  |          |...file comment, zero-terminated...| (more-->) | ||||||
|  |          +===================================+ | ||||||
|  |  | ||||||
|  |       (if FLG.FHCRC set) | ||||||
|  |  | ||||||
|  |          +---+---+ | ||||||
|  |          | CRC16 | | ||||||
|  |          +---+---+ | ||||||
|  |  | ||||||
|  |          +=======================+ | ||||||
|  |          |...compressed blocks...| (more-->) | ||||||
|  |          +=======================+ | ||||||
|  |  | ||||||
|  |            0   1   2   3   4   5   6   7 | ||||||
|  |          +---+---+---+---+---+---+---+---+ | ||||||
|  |          |     CRC32     |     ISIZE     | | ||||||
|  |          +---+---+---+---+---+---+---+---+ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 5] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       2.3.1. Member header and trailer | ||||||
|  |  | ||||||
|  |          ID1 (IDentification 1) | ||||||
|  |          ID2 (IDentification 2) | ||||||
|  |             These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 | ||||||
|  |             (0x8b, \213), to identify the file as being in gzip format. | ||||||
|  |  | ||||||
|  |          CM (Compression Method) | ||||||
|  |             This identifies the compression method used in the file.  CM | ||||||
|  |             = 0-7 are reserved.  CM = 8 denotes the "deflate" | ||||||
|  |             compression method, which is the one customarily used by | ||||||
|  |             gzip and which is documented elsewhere. | ||||||
|  |  | ||||||
|  |          FLG (FLaGs) | ||||||
|  |             This flag byte is divided into individual bits as follows: | ||||||
|  |  | ||||||
|  |                bit 0   FTEXT | ||||||
|  |                bit 1   FHCRC | ||||||
|  |                bit 2   FEXTRA | ||||||
|  |                bit 3   FNAME | ||||||
|  |                bit 4   FCOMMENT | ||||||
|  |                bit 5   reserved | ||||||
|  |                bit 6   reserved | ||||||
|  |                bit 7   reserved | ||||||
|  |  | ||||||
|  |             If FTEXT is set, the file is probably ASCII text.  This is | ||||||
|  |             an optional indication, which the compressor may set by | ||||||
|  |             checking a small amount of the input data to see whether any | ||||||
|  |             non-ASCII characters are present.  In case of doubt, FTEXT | ||||||
|  |             is cleared, indicating binary data. For systems which have | ||||||
|  |             different file formats for ascii text and binary data, the | ||||||
|  |             decompressor can use FTEXT to choose the appropriate format. | ||||||
|  |             We deliberately do not specify the algorithm used to set | ||||||
|  |             this bit, since a compressor always has the option of | ||||||
|  |             leaving it cleared and a decompressor always has the option | ||||||
|  |             of ignoring it and letting some other program handle issues | ||||||
|  |             of data conversion. | ||||||
|  |  | ||||||
|  |             If FHCRC is set, a CRC16 for the gzip header is present, | ||||||
|  |             immediately before the compressed data. The CRC16 consists | ||||||
|  |             of the two least significant bytes of the CRC32 for all | ||||||
|  |             bytes of the gzip header up to and not including the CRC16. | ||||||
|  |             [The FHCRC bit was never set by versions of gzip up to | ||||||
|  |             1.2.4, even though it was documented with a different | ||||||
|  |             meaning in gzip 1.2.4.] | ||||||
|  |  | ||||||
|  |             If FEXTRA is set, optional extra fields are present, as | ||||||
|  |             described in a following section. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 6] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             If FNAME is set, an original file name is present, | ||||||
|  |             terminated by a zero byte.  The name must consist of ISO | ||||||
|  |             8859-1 (LATIN-1) characters; on operating systems using | ||||||
|  |             EBCDIC or any other character set for file names, the name | ||||||
|  |             must be translated to the ISO LATIN-1 character set.  This | ||||||
|  |             is the original name of the file being compressed, with any | ||||||
|  |             directory components removed, and, if the file being | ||||||
|  |             compressed is on a file system with case insensitive names, | ||||||
|  |             forced to lower case. There is no original file name if the | ||||||
|  |             data was compressed from a source other than a named file; | ||||||
|  |             for example, if the source was stdin on a Unix system, there | ||||||
|  |             is no file name. | ||||||
|  |  | ||||||
|  |             If FCOMMENT is set, a zero-terminated file comment is | ||||||
|  |             present.  This comment is not interpreted; it is only | ||||||
|  |             intended for human consumption.  The comment must consist of | ||||||
|  |             ISO 8859-1 (LATIN-1) characters.  Line breaks should be | ||||||
|  |             denoted by a single line feed character (10 decimal). | ||||||
|  |  | ||||||
|  |             Reserved FLG bits must be zero. | ||||||
|  |  | ||||||
|  |          MTIME (Modification TIME) | ||||||
|  |             This gives the most recent modification time of the original | ||||||
|  |             file being compressed.  The time is in Unix format, i.e., | ||||||
|  |             seconds since 00:00:00 GMT, Jan.  1, 1970.  (Note that this | ||||||
|  |             may cause problems for MS-DOS and other systems that use | ||||||
|  |             local rather than Universal time.)  If the compressed data | ||||||
|  |             did not come from a file, MTIME is set to the time at which | ||||||
|  |             compression started.  MTIME = 0 means no time stamp is | ||||||
|  |             available. | ||||||
|  |  | ||||||
|  |          XFL (eXtra FLags) | ||||||
|  |             These flags are available for use by specific compression | ||||||
|  |             methods.  The "deflate" method (CM = 8) sets these flags as | ||||||
|  |             follows: | ||||||
|  |  | ||||||
|  |                XFL = 2 - compressor used maximum compression, | ||||||
|  |                          slowest algorithm | ||||||
|  |                XFL = 4 - compressor used fastest algorithm | ||||||
|  |  | ||||||
|  |          OS (Operating System) | ||||||
|  |             This identifies the type of file system on which compression | ||||||
|  |             took place.  This may be useful in determining end-of-line | ||||||
|  |             convention for text files.  The currently defined values are | ||||||
|  |             as follows: | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 7] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                  0 - FAT filesystem (MS-DOS, OS/2, NT/Win32) | ||||||
|  |                  1 - Amiga | ||||||
|  |                  2 - VMS (or OpenVMS) | ||||||
|  |                  3 - Unix | ||||||
|  |                  4 - VM/CMS | ||||||
|  |                  5 - Atari TOS | ||||||
|  |                  6 - HPFS filesystem (OS/2, NT) | ||||||
|  |                  7 - Macintosh | ||||||
|  |                  8 - Z-System | ||||||
|  |                  9 - CP/M | ||||||
|  |                 10 - TOPS-20 | ||||||
|  |                 11 - NTFS filesystem (NT) | ||||||
|  |                 12 - QDOS | ||||||
|  |                 13 - Acorn RISCOS | ||||||
|  |                255 - unknown | ||||||
|  |  | ||||||
|  |          XLEN (eXtra LENgth) | ||||||
|  |             If FLG.FEXTRA is set, this gives the length of the optional | ||||||
|  |             extra field.  See below for details. | ||||||
|  |  | ||||||
|  |          CRC32 (CRC-32) | ||||||
|  |             This contains a Cyclic Redundancy Check value of the | ||||||
|  |             uncompressed data computed according to CRC-32 algorithm | ||||||
|  |             used in the ISO 3309 standard and in section 8.1.1.6.2 of | ||||||
|  |             ITU-T recommendation V.42.  (See http://www.iso.ch for | ||||||
|  |             ordering ISO documents. See gopher://info.itu.ch for an | ||||||
|  |             online version of ITU-T V.42.) | ||||||
|  |  | ||||||
|  |          ISIZE (Input SIZE) | ||||||
|  |             This contains the size of the original (uncompressed) input | ||||||
|  |             data modulo 2^32. | ||||||
|  |  | ||||||
|  |       2.3.1.1. Extra field | ||||||
|  |  | ||||||
|  |          If the FLG.FEXTRA bit is set, an "extra field" is present in | ||||||
|  |          the header, with total length XLEN bytes.  It consists of a | ||||||
|  |          series of subfields, each of the form: | ||||||
|  |  | ||||||
|  |             +---+---+---+---+==================================+ | ||||||
|  |             |SI1|SI2|  LEN  |... LEN bytes of subfield data ...| | ||||||
|  |             +---+---+---+---+==================================+ | ||||||
|  |  | ||||||
|  |          SI1 and SI2 provide a subfield ID, typically two ASCII letters | ||||||
|  |          with some mnemonic value.  Jean-Loup Gailly | ||||||
|  |          <gzip@prep.ai.mit.edu> is maintaining a registry of subfield | ||||||
|  |          IDs; please send him any subfield ID you wish to use.  Subfield | ||||||
|  |          IDs with SI2 = 0 are reserved for future use.  The following | ||||||
|  |          IDs are currently defined: | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 8] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             SI1         SI2         Data | ||||||
|  |             ----------  ----------  ---- | ||||||
|  |             0x41 ('A')  0x70 ('P')  Apollo file type information | ||||||
|  |  | ||||||
|  |          LEN gives the length of the subfield data, excluding the 4 | ||||||
|  |          initial bytes. | ||||||
|  |  | ||||||
|  |       2.3.1.2. Compliance | ||||||
|  |  | ||||||
|  |          A compliant compressor must produce files with correct ID1, | ||||||
|  |          ID2, CM, CRC32, and ISIZE, but may set all the other fields in | ||||||
|  |          the fixed-length part of the header to default values (255 for | ||||||
|  |          OS, 0 for all others).  The compressor must set all reserved | ||||||
|  |          bits to zero. | ||||||
|  |  | ||||||
|  |          A compliant decompressor must check ID1, ID2, and CM, and | ||||||
|  |          provide an error indication if any of these have incorrect | ||||||
|  |          values.  It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC | ||||||
|  |          at least so it can skip over the optional fields if they are | ||||||
|  |          present.  It need not examine any other part of the header or | ||||||
|  |          trailer; in particular, a decompressor may ignore FTEXT and OS | ||||||
|  |          and always produce binary output, and still be compliant.  A | ||||||
|  |          compliant decompressor must give an error indication if any | ||||||
|  |          reserved bit is non-zero, since such a bit could indicate the | ||||||
|  |          presence of a new field that would cause subsequent data to be | ||||||
|  |          interpreted incorrectly. | ||||||
|  |  | ||||||
|  | 3. References | ||||||
|  |  | ||||||
|  |    [1] "Information Processing - 8-bit single-byte coded graphic | ||||||
|  |        character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987). | ||||||
|  |        The ISO 8859-1 (Latin-1) character set is a superset of 7-bit | ||||||
|  |        ASCII. Files defining this character set are available as | ||||||
|  |        iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/ | ||||||
|  |  | ||||||
|  |    [2] ISO 3309 | ||||||
|  |  | ||||||
|  |    [3] ITU-T recommendation V.42 | ||||||
|  |  | ||||||
|  |    [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", | ||||||
|  |        available in ftp://ftp.uu.net/pub/archiving/zip/doc/ | ||||||
|  |  | ||||||
|  |    [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in | ||||||
|  |        ftp://prep.ai.mit.edu/pub/gnu/ | ||||||
|  |  | ||||||
|  |    [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table | ||||||
|  |        Look-Up", Communications of the ACM, 31(8), pp.1008-1013. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                      [Page 9] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal, | ||||||
|  |        pp.118-133. | ||||||
|  |  | ||||||
|  |    [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt, | ||||||
|  |        describing the CRC concept. | ||||||
|  |  | ||||||
|  | 4. Security Considerations | ||||||
|  |  | ||||||
|  |    Any data compression method involves the reduction of redundancy in | ||||||
|  |    the data.  Consequently, any corruption of the data is likely to have | ||||||
|  |    severe effects and be difficult to correct.  Uncompressed text, on | ||||||
|  |    the other hand, will probably still be readable despite the presence | ||||||
|  |    of some corrupted bytes. | ||||||
|  |  | ||||||
|  |    It is recommended that systems using this data format provide some | ||||||
|  |    means of validating the integrity of the compressed data, such as by | ||||||
|  |    setting and checking the CRC-32 check value. | ||||||
|  |  | ||||||
|  | 5. Acknowledgements | ||||||
|  |  | ||||||
|  |    Trademarks cited in this document are the property of their | ||||||
|  |    respective owners. | ||||||
|  |  | ||||||
|  |    Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler, | ||||||
|  |    the related software described in this specification.  Glenn | ||||||
|  |    Randers-Pehrson converted this document to RFC and HTML format. | ||||||
|  |  | ||||||
|  | 6. Author's Address | ||||||
|  |  | ||||||
|  |    L. Peter Deutsch | ||||||
|  |    Aladdin Enterprises | ||||||
|  |    203 Santa Margarita Ave. | ||||||
|  |    Menlo Park, CA 94025 | ||||||
|  |  | ||||||
|  |    Phone: (415) 322-0103 (AM only) | ||||||
|  |    FAX:   (415) 322-1734 | ||||||
|  |    EMail: <ghost@aladdin.com> | ||||||
|  |  | ||||||
|  |    Questions about the technical content of this specification can be | ||||||
|  |    sent by email to: | ||||||
|  |  | ||||||
|  |    Jean-Loup Gailly <gzip@prep.ai.mit.edu> and | ||||||
|  |    Mark Adler <madler@alumni.caltech.edu> | ||||||
|  |  | ||||||
|  |    Editorial comments on this specification can be sent by email to: | ||||||
|  |  | ||||||
|  |    L. Peter Deutsch <ghost@aladdin.com> and | ||||||
|  |    Glenn Randers-Pehrson <randeg@alumni.rpi.edu> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 10] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 7. Appendix: Jean-Loup Gailly's gzip utility | ||||||
|  |  | ||||||
|  |    The most widely used implementation of gzip compression, and the | ||||||
|  |    original documentation on which this specification is based, were | ||||||
|  |    created by Jean-Loup Gailly <gzip@prep.ai.mit.edu>.  Since this | ||||||
|  |    implementation is a de facto standard, we mention some more of its | ||||||
|  |    features here.  Again, the material in this section is not part of | ||||||
|  |    the specification per se, and implementations need not follow it to | ||||||
|  |    be compliant. | ||||||
|  |  | ||||||
|  |    When compressing or decompressing a file, gzip preserves the | ||||||
|  |    protection, ownership, and modification time attributes on the local | ||||||
|  |    file system, since there is no provision for representing protection | ||||||
|  |    attributes in the gzip file format itself.  Since the file format | ||||||
|  |    includes a modification time, the gzip decompressor provides a | ||||||
|  |    command line switch that assigns the modification time from the file, | ||||||
|  |    rather than the local modification time of the compressed input, to | ||||||
|  |    the decompressed output. | ||||||
|  |  | ||||||
|  | 8. Appendix: Sample CRC Code | ||||||
|  |  | ||||||
|  |    The following sample code represents a practical implementation of | ||||||
|  |    the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42 | ||||||
|  |    for a formal specification.) | ||||||
|  |  | ||||||
|  |    The sample code is in the ANSI C programming language. Non C users | ||||||
|  |    may find it easier to read with these hints: | ||||||
|  |  | ||||||
|  |       &      Bitwise AND operator. | ||||||
|  |       ^      Bitwise exclusive-OR operator. | ||||||
|  |       >>     Bitwise right shift operator. When applied to an | ||||||
|  |              unsigned quantity, as here, right shift inserts zero | ||||||
|  |              bit(s) at the left. | ||||||
|  |       !      Logical NOT operator. | ||||||
|  |       ++     "n++" increments the variable n. | ||||||
|  |       0xNNN  0x introduces a hexadecimal (base 16) constant. | ||||||
|  |              Suffix L indicates a long value (at least 32 bits). | ||||||
|  |  | ||||||
|  |       /* Table of CRCs of all 8-bit messages. */ | ||||||
|  |       unsigned long crc_table[256]; | ||||||
|  |  | ||||||
|  |       /* Flag: has the table been computed? Initially false. */ | ||||||
|  |       int crc_table_computed = 0; | ||||||
|  |  | ||||||
|  |       /* Make the table for a fast CRC. */ | ||||||
|  |       void make_crc_table(void) | ||||||
|  |       { | ||||||
|  |         unsigned long c; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 11] | ||||||
|  |  | ||||||
|  | RFC 1952             GZIP File Format Specification             May 1996 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         int n, k; | ||||||
|  |         for (n = 0; n < 256; n++) { | ||||||
|  |           c = (unsigned long) n; | ||||||
|  |           for (k = 0; k < 8; k++) { | ||||||
|  |             if (c & 1) { | ||||||
|  |               c = 0xedb88320L ^ (c >> 1); | ||||||
|  |             } else { | ||||||
|  |               c = c >> 1; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |           crc_table[n] = c; | ||||||
|  |         } | ||||||
|  |         crc_table_computed = 1; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       /* | ||||||
|  |          Update a running crc with the bytes buf[0..len-1] and return | ||||||
|  |        the updated crc. The crc should be initialized to zero. Pre- and | ||||||
|  |        post-conditioning (one's complement) is performed within this | ||||||
|  |        function so it shouldn't be done by the caller. Usage example: | ||||||
|  |  | ||||||
|  |          unsigned long crc = 0L; | ||||||
|  |  | ||||||
|  |          while (read_buffer(buffer, length) != EOF) { | ||||||
|  |            crc = update_crc(crc, buffer, length); | ||||||
|  |          } | ||||||
|  |          if (crc != original_crc) error(); | ||||||
|  |       */ | ||||||
|  |       unsigned long update_crc(unsigned long crc, | ||||||
|  |                       unsigned char *buf, int len) | ||||||
|  |       { | ||||||
|  |         unsigned long c = crc ^ 0xffffffffL; | ||||||
|  |         int n; | ||||||
|  |  | ||||||
|  |         if (!crc_table_computed) | ||||||
|  |           make_crc_table(); | ||||||
|  |         for (n = 0; n < len; n++) { | ||||||
|  |           c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); | ||||||
|  |         } | ||||||
|  |         return c ^ 0xffffffffL; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       /* Return the CRC of the bytes buf[0..len-1]. */ | ||||||
|  |       unsigned long crc(unsigned char *buf, int len) | ||||||
|  |       { | ||||||
|  |         return update_crc(0L, buf, len); | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Deutsch                      Informational                     [Page 12] | ||||||
|  |  | ||||||
							
								
								
									
										107
									
								
								doc/txtvsbin.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								doc/txtvsbin.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | |||||||
|  | A Fast Method for Identifying Plain Text Files | ||||||
|  | ============================================== | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Introduction | ||||||
|  | ------------ | ||||||
|  |  | ||||||
|  | Given a file coming from an unknown source, it is sometimes desirable | ||||||
|  | to find out whether the format of that file is plain text.  Although | ||||||
|  | this may appear like a simple task, a fully accurate detection of the | ||||||
|  | file type requires heavy-duty semantic analysis on the file contents. | ||||||
|  | It is, however, possible to obtain satisfactory results by employing | ||||||
|  | various heuristics. | ||||||
|  |  | ||||||
|  | Previous versions of PKZip and other zip-compatible compression tools | ||||||
|  | were using a crude detection scheme: if more than 80% (4/5) of the bytes | ||||||
|  | found in a certain buffer are within the range [7..127], the file is | ||||||
|  | labeled as plain text, otherwise it is labeled as binary.  A prominent | ||||||
|  | limitation of this scheme is the restriction to Latin-based alphabets. | ||||||
|  | Other alphabets, like Greek, Cyrillic or Asian, make extensive use of | ||||||
|  | the bytes within the range [128..255], and texts using these alphabets | ||||||
|  | are most often misidentified by this scheme; in other words, the rate | ||||||
|  | of false negatives is sometimes too high, which means that the recall | ||||||
|  | is low.  Another weakness of this scheme is a reduced precision, due to | ||||||
|  | the false positives that may occur when binary files containing large | ||||||
|  | amounts of textual characters are misidentified as plain text. | ||||||
|  |  | ||||||
|  | In this article we propose a new, simple detection scheme that features | ||||||
|  | a much increased precision and a near-100% recall.  This scheme is | ||||||
|  | designed to work on ASCII, Unicode and other ASCII-derived alphabets, | ||||||
|  | and it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.) | ||||||
|  | and variable-sized encodings (ISO-2022, UTF-8, etc.).  Wider encodings | ||||||
|  | (UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | The Algorithm | ||||||
|  | ------------- | ||||||
|  |  | ||||||
|  | The algorithm works by dividing the set of bytecodes [0..255] into three | ||||||
|  | categories: | ||||||
|  | - The white list of textual bytecodes: | ||||||
|  |   9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255. | ||||||
|  | - The gray list of tolerated bytecodes: | ||||||
|  |   7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC). | ||||||
|  | - The black list of undesired, non-textual bytecodes: | ||||||
|  |   0 (NUL) to 6, 14 to 31. | ||||||
|  |  | ||||||
|  | If a file contains at least one byte that belongs to the white list and | ||||||
|  | no byte that belongs to the black list, then the file is categorized as | ||||||
|  | plain text; otherwise, it is categorized as binary.  (The boundary case, | ||||||
|  | when the file is empty, automatically falls into the latter category.) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Rationale | ||||||
|  | --------- | ||||||
|  |  | ||||||
|  | The idea behind this algorithm relies on two observations. | ||||||
|  |  | ||||||
|  | The first observation is that, although the full range of 7-bit codes | ||||||
|  | [0..127] is properly specified by the ASCII standard, most control | ||||||
|  | characters in the range [0..31] are not used in practice.  The only | ||||||
|  | widely-used, almost universally-portable control codes are 9 (TAB), | ||||||
|  | 10 (LF) and 13 (CR).  There are a few more control codes that are | ||||||
|  | recognized on a reduced range of platforms and text viewers/editors: | ||||||
|  | 7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these | ||||||
|  | codes are rarely (if ever) used alone, without being accompanied by | ||||||
|  | some printable text.  Even the newer, portable text formats such as | ||||||
|  | XML avoid using control characters outside the list mentioned here. | ||||||
|  |  | ||||||
|  | The second observation is that most of the binary files tend to contain | ||||||
|  | control characters, especially 0 (NUL).  Even though the older text | ||||||
|  | detection schemes observe the presence of non-ASCII codes from the range | ||||||
|  | [128..255], the precision rarely has to suffer if this upper range is | ||||||
|  | labeled as textual, because the files that are genuinely binary tend to | ||||||
|  | contain both control characters and codes from the upper range.  On the | ||||||
|  | other hand, the upper range needs to be labeled as textual, because it | ||||||
|  | is used by virtually all ASCII extensions.  In particular, this range is | ||||||
|  | used for encoding non-Latin scripts. | ||||||
|  |  | ||||||
|  | Since there is no counting involved, other than simply observing the | ||||||
|  | presence or the absence of some byte values, the algorithm produces | ||||||
|  | consistent results, regardless what alphabet encoding is being used. | ||||||
|  | (If counting were involved, it could be possible to obtain different | ||||||
|  | results on a text encoded, say, using ISO-8859-16 versus UTF-8.) | ||||||
|  |  | ||||||
|  | There is an extra category of plain text files that are "polluted" with | ||||||
|  | one or more black-listed codes, either by mistake or by peculiar design | ||||||
|  | considerations.  In such cases, a scheme that tolerates a small fraction | ||||||
|  | of black-listed codes would provide an increased recall (i.e. more true | ||||||
|  | positives).  This, however, incurs a reduced precision overall, since | ||||||
|  | false positives are more likely to appear in binary files that contain | ||||||
|  | large chunks of textual data.  Furthermore, "polluted" plain text should | ||||||
|  | be regarded as binary by general-purpose text detection schemes, because | ||||||
|  | general-purpose text processing algorithms might not be applicable. | ||||||
|  | Under this premise, it is safe to say that our detection method provides | ||||||
|  | a near-100% recall. | ||||||
|  |  | ||||||
|  | Experiments have been run on many files coming from various platforms | ||||||
|  | and applications.  We tried plain text files, system logs, source code, | ||||||
|  | formatted office documents, compiled object code, etc.  The results | ||||||
|  | confirm the optimistic assumptions about the capabilities of this | ||||||
|  | algorithm. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | -- | ||||||
|  | Cosmin Truta | ||||||
|  | Last updated: 2006-May-28 | ||||||
| @@ -1,12 +1,12 @@ | |||||||
| /* example.c -- usage example of the zlib compression library | /* example.c -- usage example of the zlib compression library | ||||||
|  * Copyright (C) 1995-2004 Jean-loup Gailly. |  * Copyright (C) 1995-2006 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 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* @(#) $Id$ */ | /* @(#) $Id$ */ | ||||||
|  |  | ||||||
| #include <stdio.h> |  | ||||||
| #include "zlib.h" | #include "zlib.h" | ||||||
|  | #include <stdio.h> | ||||||
|  |  | ||||||
| #ifdef STDC | #ifdef STDC | ||||||
| #  include <string.h> | #  include <string.h> | ||||||
|   | |||||||
| @@ -1,9 +1,22 @@ | |||||||
| This directory contains examples of the use of zlib. | This directory contains examples of the use of zlib and other relevant | ||||||
|  | programs and documentation. | ||||||
|  |  | ||||||
|  | enough.c | ||||||
|  |     calculation and justification of ENOUGH parameter in inftrees.h | ||||||
|  |     - calculates the maximum table space used in inflate tree | ||||||
|  |       construction over all possible Huffman codes | ||||||
|  |  | ||||||
| fitblk.c | fitblk.c | ||||||
|     compress just enough input to nearly fill a requested output size |     compress just enough input to nearly fill a requested output size | ||||||
|     - zlib isn't designed to do this, but fitblk does it anyway |     - zlib isn't designed to do this, but fitblk does it anyway | ||||||
|  |  | ||||||
|  | gun.c | ||||||
|  |     uncompress a gzip file | ||||||
|  |     - illustrates the use of inflateBack() for high speed file-to-file | ||||||
|  |       decompression using call-back functions | ||||||
|  |     - is approximately twice as fast as gzip -d | ||||||
|  |     - also provides Unix uncompress functionality, again twice as fast | ||||||
|  |  | ||||||
| gzappend.c | gzappend.c | ||||||
|     append to a gzip file |     append to a gzip file | ||||||
|     - illustrates the use of the Z_BLOCK flush parameter for inflate() |     - illustrates the use of the Z_BLOCK flush parameter for inflate() | ||||||
| @@ -16,9 +29,16 @@ gzjoin.c | |||||||
|  |  | ||||||
| gzlog.c | gzlog.c | ||||||
| gzlog.h | gzlog.h | ||||||
|     efficiently maintain a message log file in gzip format |     efficiently and robustly maintain a message log file in gzip format | ||||||
|     - illustrates use of raw deflate and Z_SYNC_FLUSH |     - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), | ||||||
|     - illustrates use of gzip header extra field |       and deflateSetDictionary() | ||||||
|  |     - illustrates use of a gzip header extra field | ||||||
|  |  | ||||||
|  | pigz.c | ||||||
|  |     parallel implementation of gzip compression | ||||||
|  |     - uses pthreads to speed up compression on multiple core machines | ||||||
|  |     - illustrates the use of deflateSetDictionary() with raw deflate | ||||||
|  |     - illustrates the use of crc32_combine() | ||||||
|  |  | ||||||
| zlib_how.html | zlib_how.html | ||||||
|     painfully comprehensive description of zpipe.c (see below) |     painfully comprehensive description of zpipe.c (see below) | ||||||
| @@ -27,3 +47,9 @@ zlib_how.html | |||||||
| zpipe.c | zpipe.c | ||||||
|     reads and writes zlib streams from stdin to stdout |     reads and writes zlib streams from stdin to stdout | ||||||
|     - illustrates the proper use of deflate() and inflate() |     - illustrates the proper use of deflate() and inflate() | ||||||
|  |     - deeply commented in zlib_how.html (see above) | ||||||
|  |  | ||||||
|  | zran.c | ||||||
|  |     index a zlib or gzip stream and randomly access it | ||||||
|  |     - illustrates the use of Z_BLOCK, inflatePrime(), and | ||||||
|  |       inflateSetDictionary() to provide random access | ||||||
|   | |||||||
							
								
								
									
										569
									
								
								examples/enough.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										569
									
								
								examples/enough.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,569 @@ | |||||||
|  | /* enough.c -- determine the maximum size of inflate's Huffman code tables over | ||||||
|  |  * all possible valid and complete Huffman codes, subject to a length limit. | ||||||
|  |  * Copyright (C) 2007, 2008 Mark Adler | ||||||
|  |  * Version 1.3  17 February 2008  Mark Adler | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* Version history: | ||||||
|  |    1.0   3 Jan 2007  First version (derived from codecount.c version 1.4) | ||||||
|  |    1.1   4 Jan 2007  Use faster incremental table usage computation | ||||||
|  |                      Prune examine() search on previously visited states | ||||||
|  |    1.2   5 Jan 2007  Comments clean up | ||||||
|  |                      As inflate does, decrease root for short codes | ||||||
|  |                      Refuse cases where inflate would increase root | ||||||
|  |    1.3  17 Feb 2008  Add argument for initial root table size | ||||||
|  |                      Fix bug for initial root table size == max - 1 | ||||||
|  |                      Use a macro to compute the history index | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |    Examine all possible Huffman codes for a given number of symbols and a | ||||||
|  |    maximum code length in bits to determine the maximum table size for zilb's | ||||||
|  |    inflate.  Only complete Huffman codes are counted. | ||||||
|  |  | ||||||
|  |    Two codes are considered distinct if the vectors of the number of codes per | ||||||
|  |    length are not identical.  So permutations of the symbol assignments result | ||||||
|  |    in the same code for the counting, as do permutations of the assignments of | ||||||
|  |    the bit values to the codes (i.e. only canonical codes are counted). | ||||||
|  |  | ||||||
|  |    We build a code from shorter to longer lengths, determining how many symbols | ||||||
|  |    are coded at each length.  At each step, we have how many symbols remain to | ||||||
|  |    be coded, what the last code length used was, and how many bit patterns of | ||||||
|  |    that length remain unused. Then we add one to the code length and double the | ||||||
|  |    number of unused patterns to graduate to the next code length.  We then | ||||||
|  |    assign all portions of the remaining symbols to that code length that | ||||||
|  |    preserve the properties of a correct and eventually complete code.  Those | ||||||
|  |    properties are: we cannot use more bit patterns than are available; and when | ||||||
|  |    all the symbols are used, there are exactly zero possible bit patterns | ||||||
|  |    remaining. | ||||||
|  |  | ||||||
|  |    The inflate Huffman decoding algorithm uses two-level lookup tables for | ||||||
|  |    speed.  There is a single first-level table to decode codes up to root bits | ||||||
|  |    in length (root == 9 in the current inflate implementation).  The table | ||||||
|  |    has 1 << root entries and is indexed by the next root bits of input.  Codes | ||||||
|  |    shorter than root bits have replicated table entries, so that the correct | ||||||
|  |    entry is pointed to regardless of the bits that follow the short code.  If | ||||||
|  |    the code is longer than root bits, then the table entry points to a second- | ||||||
|  |    level table.  The size of that table is determined by the longest code with | ||||||
|  |    that root-bit prefix.  If that longest code has length len, then the table | ||||||
|  |    has size 1 << (len - root), to index the remaining bits in that set of | ||||||
|  |    codes.  Each subsequent root-bit prefix then has its own sub-table.  The | ||||||
|  |    total number of table entries required by the code is calculated | ||||||
|  |    incrementally as the number of codes at each bit length is populated.  When | ||||||
|  |    all of the codes are shorter than root bits, then root is reduced to the | ||||||
|  |    longest code length, resulting in a single, smaller, one-level table. | ||||||
|  |  | ||||||
|  |    The inflate algorithm also provides for small values of root (relative to | ||||||
|  |    the log2 of the number of symbols), where the shortest code has more bits | ||||||
|  |    than root.  In that case, root is increased to the length of the shortest | ||||||
|  |    code.  This program, by design, does not handle that case, so it is verified | ||||||
|  |    that the number of symbols is less than 2^(root + 1). | ||||||
|  |  | ||||||
|  |    In order to speed up the examination (by about ten orders of magnitude for | ||||||
|  |    the default arguments), the intermediate states in the build-up of a code | ||||||
|  |    are remembered and previously visited branches are pruned.  The memory | ||||||
|  |    required for this will increase rapidly with the total number of symbols and | ||||||
|  |    the maximum code length in bits.  However this is a very small price to pay | ||||||
|  |    for the vast speedup. | ||||||
|  |  | ||||||
|  |    First, all of the possible Huffman codes are counted, and reachable | ||||||
|  |    intermediate states are noted by a non-zero count in a saved-results array. | ||||||
|  |    Second, the intermediate states that lead to (root + 1) bit or longer codes | ||||||
|  |    are used to look at all sub-codes from those junctures for their inflate | ||||||
|  |    memory usage.  (The amount of memory used is not affected by the number of | ||||||
|  |    codes of root bits or less in length.)  Third, the visited states in the | ||||||
|  |    construction of those sub-codes and the associated calculation of the table | ||||||
|  |    size is recalled in order to avoid recalculating from the same juncture. | ||||||
|  |    Beginning the code examination at (root + 1) bit codes, which is enabled by | ||||||
|  |    identifying the reachable nodes, accounts for about six of the orders of | ||||||
|  |    magnitude of improvement for the default arguments.  About another four | ||||||
|  |    orders of magnitude come from not revisiting previous states.  Out of | ||||||
|  |    approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes | ||||||
|  |    need to be examined to cover all of the possible table memory usage cases | ||||||
|  |    for the default arguments of 286 symbols limited to 15-bit codes. | ||||||
|  |  | ||||||
|  |    Note that an unsigned long long type is used for counting.  It is quite easy | ||||||
|  |    to exceed the capacity of an eight-byte integer with a large number of | ||||||
|  |    symbols and a large maximum code length, so multiple-precision arithmetic | ||||||
|  |    would need to replace the unsigned long long arithmetic in that case.  This | ||||||
|  |    program will abort if an overflow occurs.  The big_t type identifies where | ||||||
|  |    the counting takes place. | ||||||
|  |  | ||||||
|  |    An unsigned long long type is also used for calculating the number of | ||||||
|  |    possible codes remaining at the maximum length.  This limits the maximum | ||||||
|  |    code length to the number of bits in a long long minus the number of bits | ||||||
|  |    needed to represent the symbols in a flat code.  The code_t type identifies | ||||||
|  |    where the bit pattern counting takes place. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <assert.h> | ||||||
|  |  | ||||||
|  | #define local static | ||||||
|  |  | ||||||
|  | /* special data types */ | ||||||
|  | typedef unsigned long long big_t;   /* type for code counting */ | ||||||
|  | typedef unsigned long long code_t;  /* type for bit pattern counting */ | ||||||
|  | struct tab {                        /* type for been here check */ | ||||||
|  |     size_t len;         /* length of bit vector in char's */ | ||||||
|  |     char *vec;          /* allocated bit vector */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* The array for saving results, num[], is indexed with this triplet: | ||||||
|  |  | ||||||
|  |       syms: number of symbols remaining to code | ||||||
|  |       left: number of available bit patterns at length len | ||||||
|  |       len: number of bits in the codes currently being assigned | ||||||
|  |  | ||||||
|  |    Those indices are constrained thusly when saving results: | ||||||
|  |  | ||||||
|  |       syms: 3..totsym (totsym == total symbols to code) | ||||||
|  |       left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) | ||||||
|  |       len: 1..max - 1 (max == maximum code length in bits) | ||||||
|  |  | ||||||
|  |    syms == 2 is not saved since that immediately leads to a single code.  left | ||||||
|  |    must be even, since it represents the number of available bit patterns at | ||||||
|  |    the current length, which is double the number at the previous length. | ||||||
|  |    left ends at syms-1 since left == syms immediately results in a single code. | ||||||
|  |    (left > sym is not allowed since that would result in an incomplete code.) | ||||||
|  |    len is less than max, since the code completes immediately when len == max. | ||||||
|  |  | ||||||
|  |    The offset into the array is calculated for the three indices with the | ||||||
|  |    first one (syms) being outermost, and the last one (len) being innermost. | ||||||
|  |    We build the array with length max-1 lists for the len index, with syms-3 | ||||||
|  |    of those for each symbol.  There are totsym-2 of those, with each one | ||||||
|  |    varying in length as a function of sym.  See the calculation of index in | ||||||
|  |    count() for the index, and the calculation of size in main() for the size | ||||||
|  |    of the array. | ||||||
|  |  | ||||||
|  |    For the deflate example of 286 symbols limited to 15-bit codes, the array | ||||||
|  |    has 284,284 entries, taking up 2.17 MB for an 8-byte big_t.  More than | ||||||
|  |    half of the space allocated for saved results is actually used -- not all | ||||||
|  |    possible triplets are reached in the generation of valid Huffman codes.   | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* The array for tracking visited states, done[], is itself indexed identically | ||||||
|  |    to the num[] array as described above for the (syms, left, len) triplet. | ||||||
|  |    Each element in the array is further indexed by the (mem, rem) doublet, | ||||||
|  |    where mem is the amount of inflate table space used so far, and rem is the | ||||||
|  |    remaining unused entries in the current inflate sub-table.  Each indexed | ||||||
|  |    element is simply one bit indicating whether the state has been visited or | ||||||
|  |    not.  Since the ranges for mem and rem are not known a priori, each bit | ||||||
|  |    vector is of a variable size, and grows as needed to accommodate the visited | ||||||
|  |    states.  mem and rem are used to calculate a single index in a triangular | ||||||
|  |    array.  Since the range of mem is expected in the default case to be about | ||||||
|  |    ten times larger than the range of rem, the array is skewed to reduce the | ||||||
|  |    memory usage, with eight times the range for mem than for rem.  See the | ||||||
|  |    calculations for offset and bit in beenhere() for the details. | ||||||
|  |  | ||||||
|  |    For the deflate example of 286 symbols limited to 15-bit codes, the bit | ||||||
|  |    vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[] | ||||||
|  |    array itself. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* Globals to avoid propagating constants or constant pointers recursively */ | ||||||
|  | local int max;          /* maximum allowed bit length for the codes */ | ||||||
|  | local int root;         /* size of base code table in bits */ | ||||||
|  | local int large;        /* largest code table so far */ | ||||||
|  | local size_t size;      /* number of elements in num and done */ | ||||||
|  | local int *code;        /* number of symbols assigned to each bit length */ | ||||||
|  | local big_t *num;       /* saved results array for code counting */ | ||||||
|  | local struct tab *done; /* states already evaluated array */ | ||||||
|  |  | ||||||
|  | /* Index function for num[] and done[] */ | ||||||
|  | #define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1) | ||||||
|  |  | ||||||
|  | /* Free allocated space.  Uses globals code, num, and done. */ | ||||||
|  | local void cleanup(void) | ||||||
|  | { | ||||||
|  |     size_t n; | ||||||
|  |  | ||||||
|  |     if (done != NULL) { | ||||||
|  |         for (n = 0; n < size; n++) | ||||||
|  |             if (done[n].len) | ||||||
|  |                 free(done[n].vec); | ||||||
|  |         free(done); | ||||||
|  |     } | ||||||
|  |     if (num != NULL) | ||||||
|  |         free(num); | ||||||
|  |     if (code != NULL) | ||||||
|  |         free(code); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Return the number of possible Huffman codes using bit patterns of lengths | ||||||
|  |    len through max inclusive, coding syms symbols, with left bit patterns of | ||||||
|  |    length len unused -- return -1 if there is an overflow in the counting. | ||||||
|  |    Keep a record of previous results in num to prevent repeating the same | ||||||
|  |    calculation.  Uses the globals max and num. */ | ||||||
|  | local big_t count(int syms, int len, int left) | ||||||
|  | { | ||||||
|  |     big_t sum;          /* number of possible codes from this juncture */ | ||||||
|  |     big_t got;          /* value returned from count() */ | ||||||
|  |     int least;          /* least number of syms to use at this juncture */ | ||||||
|  |     int most;           /* most number of syms to use at this juncture */ | ||||||
|  |     int use;            /* number of bit patterns to use in next call */ | ||||||
|  |     size_t index;       /* index of this case in *num */ | ||||||
|  |  | ||||||
|  |     /* see if only one possible code */ | ||||||
|  |     if (syms == left) | ||||||
|  |         return 1; | ||||||
|  |  | ||||||
|  |     /* note and verify the expected state */ | ||||||
|  |     assert(syms > left && left > 0 && len < max); | ||||||
|  |  | ||||||
|  |     /* see if we've done this one already */ | ||||||
|  |     index = INDEX(syms, left, len); | ||||||
|  |     got = num[index]; | ||||||
|  |     if (got) | ||||||
|  |         return got;         /* we have -- return the saved result */ | ||||||
|  |  | ||||||
|  |     /* we need to use at least this many bit patterns so that the code won't be | ||||||
|  |        incomplete at the next length (more bit patterns than symbols) */ | ||||||
|  |     least = (left << 1) - syms; | ||||||
|  |     if (least < 0) | ||||||
|  |         least = 0; | ||||||
|  |  | ||||||
|  |     /* we can use at most this many bit patterns, lest there not be enough | ||||||
|  |        available for the remaining symbols at the maximum length (if there were | ||||||
|  |        no limit to the code length, this would become: most = left - 1) */ | ||||||
|  |     most = (((code_t)left << (max - len)) - syms) / | ||||||
|  |             (((code_t)1 << (max - len)) - 1); | ||||||
|  |  | ||||||
|  |     /* count all possible codes from this juncture and add them up */ | ||||||
|  |     sum = 0; | ||||||
|  |     for (use = least; use <= most; use++) { | ||||||
|  |         got = count(syms - use, len + 1, (left - use) << 1); | ||||||
|  |         sum += got; | ||||||
|  |         if (got == -1 || sum < got)         /* overflow */ | ||||||
|  |             return -1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* verify that all recursive calls are productive */ | ||||||
|  |     assert(sum != 0); | ||||||
|  |  | ||||||
|  |     /* save the result and return it */ | ||||||
|  |     num[index] = sum; | ||||||
|  |     return sum; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Return true if we've been here before, set to true if not.  Set a bit in a | ||||||
|  |    bit vector to indicate visiting this state.  Each (syms,len,left) state | ||||||
|  |    has a variable size bit vector indexed by (mem,rem).  The bit vector is | ||||||
|  |    lengthened if needed to allow setting the (mem,rem) bit. */ | ||||||
|  | local int beenhere(int syms, int len, int left, int mem, int rem) | ||||||
|  | { | ||||||
|  |     size_t index;       /* index for this state's bit vector */ | ||||||
|  |     size_t offset;      /* offset in this state's bit vector */ | ||||||
|  |     int bit;            /* mask for this state's bit */ | ||||||
|  |     size_t length;      /* length of the bit vector in bytes */ | ||||||
|  |     char *vector;       /* new or enlarged bit vector */ | ||||||
|  |  | ||||||
|  |     /* point to vector for (syms,left,len), bit in vector for (mem,rem) */ | ||||||
|  |     index = INDEX(syms, left, len); | ||||||
|  |     mem -= 1 << root; | ||||||
|  |     offset = (mem >> 3) + rem; | ||||||
|  |     offset = ((offset * (offset + 1)) >> 1) + rem; | ||||||
|  |     bit = 1 << (mem & 7); | ||||||
|  |  | ||||||
|  |     /* see if we've been here */ | ||||||
|  |     length = done[index].len; | ||||||
|  |     if (offset < length && (done[index].vec[offset] & bit) != 0) | ||||||
|  |         return 1;       /* done this! */ | ||||||
|  |  | ||||||
|  |     /* we haven't been here before -- set the bit to show we have now */ | ||||||
|  |  | ||||||
|  |     /* see if we need to lengthen the vector in order to set the bit */ | ||||||
|  |     if (length <= offset) { | ||||||
|  |         /* if we have one already, enlarge it, zero out the appended space */ | ||||||
|  |         if (length) { | ||||||
|  |             do { | ||||||
|  |                 length <<= 1; | ||||||
|  |             } while (length <= offset); | ||||||
|  |             vector = realloc(done[index].vec, length); | ||||||
|  |             if (vector != NULL) | ||||||
|  |                 memset(vector + done[index].len, 0, length - done[index].len); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* otherwise we need to make a new vector and zero it out */ | ||||||
|  |         else { | ||||||
|  |             length = 1 << (len - root); | ||||||
|  |             while (length <= offset) | ||||||
|  |                 length <<= 1; | ||||||
|  |             vector = calloc(length, sizeof(char)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* in either case, bail if we can't get the memory */ | ||||||
|  |         if (vector == NULL) { | ||||||
|  |             fputs("abort: unable to allocate enough memory\n", stderr); | ||||||
|  |             cleanup(); | ||||||
|  |             exit(1); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* install the new vector */ | ||||||
|  |         done[index].len = length; | ||||||
|  |         done[index].vec = vector; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* set the bit */ | ||||||
|  |     done[index].vec[offset] |= bit; | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Examine all possible codes from the given node (syms, len, left).  Compute | ||||||
|  |    the amount of memory required to build inflate's decoding tables, where the | ||||||
|  |    number of code structures used so far is mem, and the number remaining in | ||||||
|  |    the current sub-table is rem.  Uses the globals max, code, root, large, and | ||||||
|  |    done. */ | ||||||
|  | local void examine(int syms, int len, int left, int mem, int rem) | ||||||
|  | { | ||||||
|  |     int least;          /* least number of syms to use at this juncture */ | ||||||
|  |     int most;           /* most number of syms to use at this juncture */ | ||||||
|  |     int use;            /* number of bit patterns to use in next call */ | ||||||
|  |  | ||||||
|  |     /* see if we have a complete code */ | ||||||
|  |     if (syms == left) { | ||||||
|  |         /* set the last code entry */ | ||||||
|  |         code[len] = left; | ||||||
|  |  | ||||||
|  |         /* complete computation of memory used by this code */ | ||||||
|  |         while (rem < left) { | ||||||
|  |             left -= rem; | ||||||
|  |             rem = 1 << (len - root); | ||||||
|  |             mem += rem; | ||||||
|  |         } | ||||||
|  |         assert(rem == left); | ||||||
|  |  | ||||||
|  |         /* if this is a new maximum, show the entries used and the sub-code */ | ||||||
|  |         if (mem > large) { | ||||||
|  |             large = mem; | ||||||
|  |             printf("max %d: ", mem); | ||||||
|  |             for (use = root + 1; use <= max; use++) | ||||||
|  |                 if (code[use]) | ||||||
|  |                     printf("%d[%d] ", code[use], use); | ||||||
|  |             putchar('\n'); | ||||||
|  |             fflush(stdout); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* remove entries as we drop back down in the recursion */ | ||||||
|  |         code[len] = 0; | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* prune the tree if we can */ | ||||||
|  |     if (beenhere(syms, len, left, mem, rem)) | ||||||
|  |         return; | ||||||
|  |  | ||||||
|  |     /* we need to use at least this many bit patterns so that the code won't be | ||||||
|  |        incomplete at the next length (more bit patterns than symbols) */ | ||||||
|  |     least = (left << 1) - syms; | ||||||
|  |     if (least < 0) | ||||||
|  |         least = 0; | ||||||
|  |  | ||||||
|  |     /* we can use at most this many bit patterns, lest there not be enough | ||||||
|  |        available for the remaining symbols at the maximum length (if there were | ||||||
|  |        no limit to the code length, this would become: most = left - 1) */ | ||||||
|  |     most = (((code_t)left << (max - len)) - syms) / | ||||||
|  |             (((code_t)1 << (max - len)) - 1); | ||||||
|  |  | ||||||
|  |     /* occupy least table spaces, creating new sub-tables as needed */ | ||||||
|  |     use = least; | ||||||
|  |     while (rem < use) { | ||||||
|  |         use -= rem; | ||||||
|  |         rem = 1 << (len - root); | ||||||
|  |         mem += rem; | ||||||
|  |     } | ||||||
|  |     rem -= use; | ||||||
|  |  | ||||||
|  |     /* examine codes from here, updating table space as we go */ | ||||||
|  |     for (use = least; use <= most; use++) { | ||||||
|  |         code[len] = use; | ||||||
|  |         examine(syms - use, len + 1, (left - use) << 1, | ||||||
|  |                 mem + (rem ? 1 << (len - root) : 0), rem << 1); | ||||||
|  |         if (rem == 0) { | ||||||
|  |             rem = 1 << (len - root); | ||||||
|  |             mem += rem; | ||||||
|  |         } | ||||||
|  |         rem--; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* remove entries as we drop back down in the recursion */ | ||||||
|  |     code[len] = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Look at all sub-codes starting with root + 1 bits.  Look at only the valid | ||||||
|  |    intermediate code states (syms, left, len).  For each completed code, | ||||||
|  |    calculate the amount of memory required by inflate to build the decoding | ||||||
|  |    tables. Find the maximum amount of memory required and show the code that | ||||||
|  |    requires that maximum.  Uses the globals max, root, and num. */ | ||||||
|  | local void enough(int syms) | ||||||
|  | { | ||||||
|  |     int n;              /* number of remaing symbols for this node */ | ||||||
|  |     int left;           /* number of unused bit patterns at this length */ | ||||||
|  |     size_t index;       /* index of this case in *num */ | ||||||
|  |  | ||||||
|  |     /* clear code */ | ||||||
|  |     for (n = 0; n <= max; n++) | ||||||
|  |         code[n] = 0; | ||||||
|  |  | ||||||
|  |     /* look at all (root + 1) bit and longer codes */ | ||||||
|  |     large = 1 << root;              /* base table */ | ||||||
|  |     if (root < max)                 /* otherwise, there's only a base table */ | ||||||
|  |         for (n = 3; n <= syms; n++) | ||||||
|  |             for (left = 2; left < n; left += 2) | ||||||
|  |             { | ||||||
|  |                 /* look at all reachable (root + 1) bit nodes, and the | ||||||
|  |                    resulting codes (complete at root + 2 or more) */ | ||||||
|  |                 index = INDEX(n, left, root + 1); | ||||||
|  |                 if (root + 1 < max && num[index])       /* reachable node */ | ||||||
|  |                     examine(n, root + 1, left, 1 << root, 0); | ||||||
|  |  | ||||||
|  |                 /* also look at root bit codes with completions at root + 1 | ||||||
|  |                    bits (not saved in num, since complete), just in case */ | ||||||
|  |                 if (num[index - 1] && n <= left << 1) | ||||||
|  |                     examine((n - left) << 1, root + 1, (n - left) << 1, | ||||||
|  |                             1 << root, 0); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |     /* done */ | ||||||
|  |     printf("done: maximum of %d table entries\n", large); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |    Examine and show the total number of possible Huffman codes for a given | ||||||
|  |    maximum number of symbols, initial root table size, and maximum code length | ||||||
|  |    in bits -- those are the command arguments in that order.  The default | ||||||
|  |    values are 286, 9, and 15 respectively, for the deflate literal/length code. | ||||||
|  |    The possible codes are counted for each number of coded symbols from two to | ||||||
|  |    the maximum.  The counts for each of those and the total number of codes are | ||||||
|  |    shown.  The maximum number of inflate table entires is then calculated | ||||||
|  |    across all possible codes.  Each new maximum number of table entries and the | ||||||
|  |    associated sub-code (starting at root + 1 == 10 bits) is shown. | ||||||
|  |  | ||||||
|  |    To count and examine Huffman codes that are not length-limited, provide a | ||||||
|  |    maximum length equal to the number of symbols minus one. | ||||||
|  |  | ||||||
|  |    For the deflate literal/length code, use "enough".  For the deflate distance | ||||||
|  |    code, use "enough 30 6". | ||||||
|  |  | ||||||
|  |    This uses the %llu printf format to print big_t numbers, which assumes that | ||||||
|  |    big_t is an unsigned long long.  If the big_t type is changed (for example | ||||||
|  |    to a multiple precision type), the method of printing will also need to be | ||||||
|  |    updated. | ||||||
|  |  */ | ||||||
|  | int main(int argc, char **argv) | ||||||
|  | { | ||||||
|  |     int syms;           /* total number of symbols to code */ | ||||||
|  |     int n;              /* number of symbols to code for this run */ | ||||||
|  |     big_t got;          /* return value of count() */ | ||||||
|  |     big_t sum;          /* accumulated number of codes over n */ | ||||||
|  |  | ||||||
|  |     /* set up globals for cleanup() */ | ||||||
|  |     code = NULL; | ||||||
|  |     num = NULL; | ||||||
|  |     done = NULL; | ||||||
|  |  | ||||||
|  |     /* get arguments -- default to the deflate literal/length code */ | ||||||
|  |     syms = 286; | ||||||
|  | 	root = 9; | ||||||
|  |     max = 15; | ||||||
|  |     if (argc > 1) { | ||||||
|  |         syms = atoi(argv[1]); | ||||||
|  |         if (argc > 2) { | ||||||
|  |             root = atoi(argv[2]); | ||||||
|  | 			if (argc > 3) | ||||||
|  | 				max = atoi(argv[3]); | ||||||
|  | 		} | ||||||
|  |     } | ||||||
|  |     if (argc > 4 || syms < 2 || root < 1 || max < 1) { | ||||||
|  |         fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", | ||||||
|  | 			  stderr); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* if not restricting the code length, the longest is syms - 1 */ | ||||||
|  |     if (max > syms - 1) | ||||||
|  |         max = syms - 1; | ||||||
|  |  | ||||||
|  |     /* determine the number of bits in a code_t */ | ||||||
|  |     n = 0; | ||||||
|  |     while (((code_t)1 << n) != 0) | ||||||
|  |         n++; | ||||||
|  |  | ||||||
|  |     /* make sure that the calculation of most will not overflow */ | ||||||
|  |     if (max > n || syms - 2 >= (((code_t)0 - 1) >> (max - 1))) { | ||||||
|  |         fputs("abort: code length too long for internal types\n", stderr); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* reject impossible code requests */ | ||||||
|  |     if (syms - 1 > ((code_t)1 << max) - 1) { | ||||||
|  |         fprintf(stderr, "%d symbols cannot be coded in %d bits\n", | ||||||
|  |                 syms, max); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* allocate code vector */ | ||||||
|  |     code = calloc(max + 1, sizeof(int)); | ||||||
|  |     if (code == NULL) { | ||||||
|  |         fputs("abort: unable to allocate enough memory\n", stderr); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* determine size of saved results array, checking for overflows, | ||||||
|  |        allocate and clear the array (set all to zero with calloc()) */ | ||||||
|  |     if (syms == 2)              /* iff max == 1 */ | ||||||
|  |         num = NULL;             /* won't be saving any results */ | ||||||
|  |     else { | ||||||
|  |         size = syms >> 1; | ||||||
|  |         if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) || | ||||||
|  |                 (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) || | ||||||
|  |                 (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) || | ||||||
|  |                 (num = calloc(size, sizeof(big_t))) == NULL) { | ||||||
|  |             fputs("abort: unable to allocate enough memory\n", stderr); | ||||||
|  |             cleanup(); | ||||||
|  |             return 1; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* count possible codes for all numbers of symbols, add up counts */ | ||||||
|  |     sum = 0; | ||||||
|  |     for (n = 2; n <= syms; n++) { | ||||||
|  |         got = count(n, 1, 2); | ||||||
|  |         sum += got; | ||||||
|  |         if (got == -1 || sum < got) {       /* overflow */ | ||||||
|  |             fputs("abort: can't count that high!\n", stderr); | ||||||
|  |             cleanup(); | ||||||
|  |             return 1; | ||||||
|  |         } | ||||||
|  |         printf("%llu %d-codes\n", got, n); | ||||||
|  |     } | ||||||
|  |     printf("%llu total codes for 2 to %d symbols", sum, syms); | ||||||
|  |     if (max < syms - 1) | ||||||
|  |         printf(" (%d-bit length limit)\n", max); | ||||||
|  |     else | ||||||
|  |         puts(" (no length limit)"); | ||||||
|  |  | ||||||
|  |     /* allocate and clear done array for beenhere() */ | ||||||
|  |     if (syms == 2) | ||||||
|  |         done = NULL; | ||||||
|  |     else if (size > ((size_t)0 - 1) / sizeof(struct tab) || | ||||||
|  |              (done = calloc(size, sizeof(struct tab))) == NULL) { | ||||||
|  |         fputs("abort: unable to allocate enough memory\n", stderr); | ||||||
|  |         cleanup(); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* find and show maximum inflate table usage */ | ||||||
|  | 	if (root > max)                 /* reduce root to max length */ | ||||||
|  | 		root = max; | ||||||
|  |     if (syms < ((code_t)1 << (root + 1))) | ||||||
|  |         enough(syms); | ||||||
|  |     else | ||||||
|  |         puts("cannot handle minimum code lengths > root"); | ||||||
|  |  | ||||||
|  |     /* done */ | ||||||
|  |     cleanup(); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
| @@ -73,7 +73,7 @@ local void quit(char *why) | |||||||
| local int partcompress(FILE *in, z_streamp def) | local int partcompress(FILE *in, z_streamp def) | ||||||
| { | { | ||||||
|     int ret, flush; |     int ret, flush; | ||||||
|     char raw[RAWLEN]; |     unsigned char raw[RAWLEN]; | ||||||
|  |  | ||||||
|     flush = Z_NO_FLUSH; |     flush = Z_NO_FLUSH; | ||||||
|     do { |     do { | ||||||
| @@ -96,7 +96,7 @@ local int partcompress(FILE *in, z_streamp def) | |||||||
| local int recompress(z_streamp inf, z_streamp def) | local int recompress(z_streamp inf, z_streamp def) | ||||||
| { | { | ||||||
|     int ret, flush; |     int ret, flush; | ||||||
|     char raw[RAWLEN]; |     unsigned char raw[RAWLEN]; | ||||||
|  |  | ||||||
|     flush = Z_NO_FLUSH; |     flush = Z_NO_FLUSH; | ||||||
|     do { |     do { | ||||||
| @@ -129,8 +129,8 @@ int main(int argc, char **argv) | |||||||
|     int ret;                /* return code */ |     int ret;                /* return code */ | ||||||
|     unsigned size;          /* requested fixed output block size */ |     unsigned size;          /* requested fixed output block size */ | ||||||
|     unsigned have;          /* bytes written by deflate() call */ |     unsigned have;          /* bytes written by deflate() call */ | ||||||
|     char *blk;              /* intermediate and final stream */ |     unsigned char *blk;     /* intermediate and final stream */ | ||||||
|     char *tmp;              /* close to desired size stream */ |     unsigned char *tmp;     /* close to desired size stream */ | ||||||
|     z_stream def, inf;      /* zlib deflate and inflate states */ |     z_stream def, inf;      /* zlib deflate and inflate states */ | ||||||
|  |  | ||||||
|     /* get requested output size */ |     /* get requested output size */ | ||||||
| @@ -163,8 +163,7 @@ int main(int argc, char **argv) | |||||||
|     if (ret == Z_STREAM_END && def.avail_out >= EXCESS) { |     if (ret == Z_STREAM_END && def.avail_out >= EXCESS) { | ||||||
|         /* write block to stdout */ |         /* write block to stdout */ | ||||||
|         have = size + EXCESS - def.avail_out; |         have = size + EXCESS - def.avail_out; | ||||||
|         ret = fwrite(blk, 1, have, stdout); |         if (fwrite(blk, 1, have, stdout) != have || ferror(stdout)) | ||||||
|         if (ret != have || ferror(stdout)) |  | ||||||
|             quit("error writing output"); |             quit("error writing output"); | ||||||
|  |  | ||||||
|         /* clean up and print results to stderr */ |         /* clean up and print results to stderr */ | ||||||
| @@ -217,8 +216,7 @@ int main(int argc, char **argv) | |||||||
|  |  | ||||||
|     /* done -- write block to stdout */ |     /* done -- write block to stdout */ | ||||||
|     have = size - def.avail_out; |     have = size - def.avail_out; | ||||||
|     ret = fwrite(blk, 1, have, stdout); |     if (fwrite(blk, 1, have, stdout) != have || ferror(stdout)) | ||||||
|     if (ret != have || ferror(stdout)) |  | ||||||
|         quit("error writing output"); |         quit("error writing output"); | ||||||
|  |  | ||||||
|     /* clean up and print results to stderr */ |     /* clean up and print results to stderr */ | ||||||
|   | |||||||
							
								
								
									
										693
									
								
								examples/gun.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										693
									
								
								examples/gun.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,693 @@ | |||||||
|  | /* gun.c -- simple gunzip to give an example of the use of inflateBack() | ||||||
|  |  * Copyright (C) 2003, 2005 Mark Adler | ||||||
|  |  * For conditions of distribution and use, see copyright notice in zlib.h | ||||||
|  |    Version 1.3  12 June 2005  Mark Adler */ | ||||||
|  |  | ||||||
|  | /* Version history: | ||||||
|  |    1.0  16 Feb 2003  First version for testing of inflateBack() | ||||||
|  |    1.1  21 Feb 2005  Decompress concatenated gzip streams | ||||||
|  |                      Remove use of "this" variable (C++ keyword) | ||||||
|  |                      Fix return value for in() | ||||||
|  |                      Improve allocation failure checking | ||||||
|  |                      Add typecasting for void * structures | ||||||
|  |                      Add -h option for command version and usage | ||||||
|  |                      Add a bunch of comments | ||||||
|  |    1.2  20 Mar 2005  Add Unix compress (LZW) decompression | ||||||
|  |                      Copy file attributes from input file to output file | ||||||
|  |    1.3  12 Jun 2005  Add casts for error messages [Oberhumer] | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |    gun [ -t ] [ name ... ] | ||||||
|  |  | ||||||
|  |    decompresses the data in the named gzip files.  If no arguments are given, | ||||||
|  |    gun will decompress from stdin to stdout.  The names must end in .gz, -gz, | ||||||
|  |    .z, -z, _z, or .Z.  The uncompressed data will be written to a file name | ||||||
|  |    with the suffix stripped.  On success, the original file is deleted.  On | ||||||
|  |    failure, the output file is deleted.  For most failures, the command will | ||||||
|  |    continue to process the remaining names on the command line.  A memory | ||||||
|  |    allocation failure will abort the command.  If -t is specified, then the | ||||||
|  |    listed files or stdin will be tested as gzip files for integrity (without | ||||||
|  |    checking for a proper suffix), no output will be written, and no files | ||||||
|  |    will be deleted. | ||||||
|  |  | ||||||
|  |    Like gzip, gun allows concatenated gzip streams and will decompress them, | ||||||
|  |    writing all of the uncompressed data to the output.  Unlike gzip, gun allows | ||||||
|  |    an empty file on input, and will produce no error writing an empty output | ||||||
|  |    file. | ||||||
|  |  | ||||||
|  |    gun will also decompress files made by Unix compress, which uses LZW | ||||||
|  |    compression.  These files are automatically detected by virtue of their | ||||||
|  |    magic header bytes.  Since the end of Unix compress stream is marked by the | ||||||
|  |    end-of-file, they cannot be concantenated.  If a Unix compress stream is | ||||||
|  |    encountered in an input file, it is the last stream in that file. | ||||||
|  |  | ||||||
|  |    Like gunzip and uncompress, the file attributes of the orignal compressed | ||||||
|  |    file are maintained in the final uncompressed file, to the extent that the | ||||||
|  |    user permissions allow it. | ||||||
|  |  | ||||||
|  |    On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version | ||||||
|  |    1.2.4) is on the same file, when gun is linked with zlib 1.2.2.  Also the | ||||||
|  |    LZW decompression provided by gun is about twice as fast as the standard | ||||||
|  |    Unix uncompress command. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* external functions and related types and constants */ | ||||||
|  | #include <stdio.h>          /* fprintf() */ | ||||||
|  | #include <stdlib.h>         /* malloc(), free() */ | ||||||
|  | #include <string.h>         /* strerror(), strcmp(), strlen(), memcpy() */ | ||||||
|  | #include <errno.h>          /* errno */ | ||||||
|  | #include <fcntl.h>          /* open() */ | ||||||
|  | #include <unistd.h>         /* read(), write(), close(), chown(), unlink() */ | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/stat.h>       /* stat(), chmod() */ | ||||||
|  | #include <utime.h>          /* utime() */ | ||||||
|  | #include "zlib.h"           /* inflateBackInit(), inflateBack(), */ | ||||||
|  |                             /* inflateBackEnd(), crc32() */ | ||||||
|  |  | ||||||
|  | /* function declaration */ | ||||||
|  | #define local static | ||||||
|  |  | ||||||
|  | /* buffer constants */ | ||||||
|  | #define SIZE 32768U         /* input and output buffer sizes */ | ||||||
|  | #define PIECE 16384         /* limits i/o chunks for 16-bit int case */ | ||||||
|  |  | ||||||
|  | /* structure for infback() to pass to input function in() -- it maintains the | ||||||
|  |    input file and a buffer of size SIZE */ | ||||||
|  | struct ind { | ||||||
|  |     int infile; | ||||||
|  |     unsigned char *inbuf; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Load input buffer, assumed to be empty, and return bytes loaded and a | ||||||
|  |    pointer to them.  read() is called until the buffer is full, or until it | ||||||
|  |    returns end-of-file or error.  Return 0 on error. */ | ||||||
|  | local unsigned in(void *in_desc, unsigned char **buf) | ||||||
|  | { | ||||||
|  |     int ret; | ||||||
|  |     unsigned len; | ||||||
|  |     unsigned char *next; | ||||||
|  |     struct ind *me = (struct ind *)in_desc; | ||||||
|  |  | ||||||
|  |     next = me->inbuf; | ||||||
|  |     *buf = next; | ||||||
|  |     len = 0; | ||||||
|  |     do { | ||||||
|  |         ret = PIECE; | ||||||
|  |         if ((unsigned)ret > SIZE - len) | ||||||
|  |             ret = (int)(SIZE - len); | ||||||
|  |         ret = (int)read(me->infile, next, ret); | ||||||
|  |         if (ret == -1) { | ||||||
|  |             len = 0; | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         next += ret; | ||||||
|  |         len += ret; | ||||||
|  |     } while (ret != 0 && len < SIZE); | ||||||
|  |     return len; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* structure for infback() to pass to output function out() -- it maintains the | ||||||
|  |    output file, a running CRC-32 check on the output and the total number of | ||||||
|  |    bytes output, both for checking against the gzip trailer.  (The length in | ||||||
|  |    the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and | ||||||
|  |    the output is greater than 4 GB.) */ | ||||||
|  | struct outd { | ||||||
|  |     int outfile; | ||||||
|  |     int check;                  /* true if checking crc and total */ | ||||||
|  |     unsigned long crc; | ||||||
|  |     unsigned long total; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Write output buffer and update the CRC-32 and total bytes written.  write() | ||||||
|  |    is called until all of the output is written or an error is encountered. | ||||||
|  |    On success out() returns 0.  For a write failure, out() returns 1.  If the | ||||||
|  |    output file descriptor is -1, then nothing is written. | ||||||
|  |  */ | ||||||
|  | local int out(void *out_desc, unsigned char *buf, unsigned len) | ||||||
|  | { | ||||||
|  |     int ret; | ||||||
|  |     struct outd *me = (struct outd *)out_desc; | ||||||
|  |  | ||||||
|  |     if (me->check) { | ||||||
|  |         me->crc = crc32(me->crc, buf, len); | ||||||
|  |         me->total += len; | ||||||
|  |     } | ||||||
|  |     if (me->outfile != -1) | ||||||
|  |         do { | ||||||
|  |             ret = PIECE; | ||||||
|  |             if ((unsigned)ret > len) | ||||||
|  |                 ret = (int)len; | ||||||
|  |             ret = (int)write(me->outfile, buf, ret); | ||||||
|  |             if (ret == -1) | ||||||
|  |                 return 1; | ||||||
|  |             buf += ret; | ||||||
|  |             len -= ret; | ||||||
|  |         } while (len != 0); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* next input byte macro for use inside lunpipe() and gunpipe() */ | ||||||
|  | #define NEXT() (have ? 0 : (have = in(indp, &next)), \ | ||||||
|  |                 last = have ? (have--, (int)(*next++)) : -1) | ||||||
|  |  | ||||||
|  | /* memory for gunpipe() and lunpipe() -- | ||||||
|  |    the first 256 entries of prefix[] and suffix[] are never used, could | ||||||
|  |    have offset the index, but it's faster to waste the memory */ | ||||||
|  | unsigned char inbuf[SIZE];              /* input buffer */ | ||||||
|  | unsigned char outbuf[SIZE];             /* output buffer */ | ||||||
|  | unsigned short prefix[65536];           /* index to LZW prefix string */ | ||||||
|  | unsigned char suffix[65536];            /* one-character LZW suffix */ | ||||||
|  | unsigned char match[65280 + 2];         /* buffer for reversed match or gzip | ||||||
|  |                                            32K sliding window */ | ||||||
|  |  | ||||||
|  | /* throw out what's left in the current bits byte buffer (this is a vestigial | ||||||
|  |    aspect of the compressed data format derived from an implementation that | ||||||
|  |    made use of a special VAX machine instruction!) */ | ||||||
|  | #define FLUSHCODE() \ | ||||||
|  |     do { \ | ||||||
|  |         left = 0; \ | ||||||
|  |         rem = 0; \ | ||||||
|  |         if (chunk > have) { \ | ||||||
|  |             chunk -= have; \ | ||||||
|  |             have = 0; \ | ||||||
|  |             if (NEXT() == -1) \ | ||||||
|  |                 break; \ | ||||||
|  |             chunk--; \ | ||||||
|  |             if (chunk > have) { \ | ||||||
|  |                 chunk = have = 0; \ | ||||||
|  |                 break; \ | ||||||
|  |             } \ | ||||||
|  |         } \ | ||||||
|  |         have -= chunk; \ | ||||||
|  |         next += chunk; \ | ||||||
|  |         chunk = 0; \ | ||||||
|  |     } while (0) | ||||||
|  |  | ||||||
|  | /* Decompress a compress (LZW) file from indp to outfile.  The compress magic | ||||||
|  |    header (two bytes) has already been read and verified.  There are have bytes | ||||||
|  |    of buffered input at next.  strm is used for passing error information back | ||||||
|  |    to gunpipe(). | ||||||
|  |  | ||||||
|  |    lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of | ||||||
|  |    file, read error, or write error (a write error indicated by strm->next_in | ||||||
|  |    not equal to Z_NULL), or Z_DATA_ERROR for invalid input. | ||||||
|  |  */ | ||||||
|  | local int lunpipe(unsigned have, unsigned char *next, struct ind *indp, | ||||||
|  |                   int outfile, z_stream *strm) | ||||||
|  | { | ||||||
|  |     int last;                   /* last byte read by NEXT(), or -1 if EOF */ | ||||||
|  |     int chunk;                  /* bytes left in current chunk */ | ||||||
|  |     int left;                   /* bits left in rem */ | ||||||
|  |     unsigned rem;               /* unused bits from input */ | ||||||
|  |     int bits;                   /* current bits per code */ | ||||||
|  |     unsigned code;              /* code, table traversal index */ | ||||||
|  |     unsigned mask;              /* mask for current bits codes */ | ||||||
|  |     int max;                    /* maximum bits per code for this stream */ | ||||||
|  |     int flags;                  /* compress flags, then block compress flag */ | ||||||
|  |     unsigned end;               /* last valid entry in prefix/suffix tables */ | ||||||
|  |     unsigned temp;              /* current code */ | ||||||
|  |     unsigned prev;              /* previous code */ | ||||||
|  |     unsigned final;             /* last character written for previous code */ | ||||||
|  |     unsigned stack;             /* next position for reversed string */ | ||||||
|  |     unsigned outcnt;            /* bytes in output buffer */ | ||||||
|  |     struct outd outd;           /* output structure */ | ||||||
|  |  | ||||||
|  |     /* set up output */ | ||||||
|  |     outd.outfile = outfile; | ||||||
|  |     outd.check = 0; | ||||||
|  |  | ||||||
|  |     /* process remainder of compress header -- a flags byte */ | ||||||
|  |     flags = NEXT(); | ||||||
|  |     if (last == -1) | ||||||
|  |         return Z_BUF_ERROR; | ||||||
|  |     if (flags & 0x60) { | ||||||
|  |         strm->msg = (char *)"unknown lzw flags set"; | ||||||
|  |         return Z_DATA_ERROR; | ||||||
|  |     } | ||||||
|  |     max = flags & 0x1f; | ||||||
|  |     if (max < 9 || max > 16) { | ||||||
|  |         strm->msg = (char *)"lzw bits out of range"; | ||||||
|  |         return Z_DATA_ERROR; | ||||||
|  |     } | ||||||
|  |     if (max == 9)                           /* 9 doesn't really mean 9 */ | ||||||
|  |         max = 10; | ||||||
|  |     flags &= 0x80;                          /* true if block compress */ | ||||||
|  |  | ||||||
|  |     /* clear table */ | ||||||
|  |     bits = 9; | ||||||
|  |     mask = 0x1ff; | ||||||
|  |     end = flags ? 256 : 255; | ||||||
|  |  | ||||||
|  |     /* set up: get first 9-bit code, which is the first decompressed byte, but | ||||||
|  |        don't create a table entry until the next code */ | ||||||
|  |     if (NEXT() == -1)                       /* no compressed data is ok */ | ||||||
|  |         return Z_OK; | ||||||
|  |     final = prev = (unsigned)last;          /* low 8 bits of code */ | ||||||
|  |     if (NEXT() == -1)                       /* missing a bit */ | ||||||
|  |         return Z_BUF_ERROR; | ||||||
|  |     if (last & 1) {                         /* code must be < 256 */ | ||||||
|  |         strm->msg = (char *)"invalid lzw code"; | ||||||
|  |         return Z_DATA_ERROR; | ||||||
|  |     } | ||||||
|  |     rem = (unsigned)last >> 1;              /* remaining 7 bits */ | ||||||
|  |     left = 7; | ||||||
|  |     chunk = bits - 2;                       /* 7 bytes left in this chunk */ | ||||||
|  |     outbuf[0] = (unsigned char)final;       /* write first decompressed byte */ | ||||||
|  |     outcnt = 1; | ||||||
|  |  | ||||||
|  |     /* decode codes */ | ||||||
|  |     stack = 0; | ||||||
|  |     for (;;) { | ||||||
|  |         /* if the table will be full after this, increment the code size */ | ||||||
|  |         if (end >= mask && bits < max) { | ||||||
|  |             FLUSHCODE(); | ||||||
|  |             bits++; | ||||||
|  |             mask <<= 1; | ||||||
|  |             mask++; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* get a code of length bits */ | ||||||
|  |         if (chunk == 0)                     /* decrement chunk modulo bits */ | ||||||
|  |             chunk = bits; | ||||||
|  |         code = rem;                         /* low bits of code */ | ||||||
|  |         if (NEXT() == -1) {                 /* EOF is end of compressed data */ | ||||||
|  |             /* write remaining buffered output */ | ||||||
|  |             if (outcnt && out(&outd, outbuf, outcnt)) { | ||||||
|  |                 strm->next_in = outbuf;     /* signal write error */ | ||||||
|  |                 return Z_BUF_ERROR; | ||||||
|  |             } | ||||||
|  |             return Z_OK; | ||||||
|  |         } | ||||||
|  |         code += (unsigned)last << left;     /* middle (or high) bits of code */ | ||||||
|  |         left += 8; | ||||||
|  |         chunk--; | ||||||
|  |         if (bits > left) {                  /* need more bits */ | ||||||
|  |             if (NEXT() == -1)               /* can't end in middle of code */ | ||||||
|  |                 return Z_BUF_ERROR; | ||||||
|  |             code += (unsigned)last << left; /* high bits of code */ | ||||||
|  |             left += 8; | ||||||
|  |             chunk--; | ||||||
|  |         } | ||||||
|  |         code &= mask;                       /* mask to current code length */ | ||||||
|  |         left -= bits;                       /* number of unused bits */ | ||||||
|  |         rem = (unsigned)last >> (8 - left); /* unused bits from last byte */ | ||||||
|  |  | ||||||
|  |         /* process clear code (256) */ | ||||||
|  |         if (code == 256 && flags) { | ||||||
|  |             FLUSHCODE(); | ||||||
|  |             bits = 9;                       /* initialize bits and mask */ | ||||||
|  |             mask = 0x1ff; | ||||||
|  |             end = 255;                      /* empty table */ | ||||||
|  |             continue;                       /* get next code */ | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* special code to reuse last match */ | ||||||
|  |         temp = code;                        /* save the current code */ | ||||||
|  |         if (code > end) { | ||||||
|  |             /* Be picky on the allowed code here, and make sure that the code | ||||||
|  |                we drop through (prev) will be a valid index so that random | ||||||
|  |                input does not cause an exception.  The code != end + 1 check is | ||||||
|  |                empirically derived, and not checked in the original uncompress | ||||||
|  |                code.  If this ever causes a problem, that check could be safely | ||||||
|  |                removed.  Leaving this check in greatly improves gun's ability | ||||||
|  |                to detect random or corrupted input after a compress header. | ||||||
|  |                In any case, the prev > end check must be retained. */ | ||||||
|  |             if (code != end + 1 || prev > end) { | ||||||
|  |                 strm->msg = (char *)"invalid lzw code"; | ||||||
|  |                 return Z_DATA_ERROR; | ||||||
|  |             } | ||||||
|  |             match[stack++] = (unsigned char)final; | ||||||
|  |             code = prev; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* walk through linked list to generate output in reverse order */ | ||||||
|  |         while (code >= 256) { | ||||||
|  |             match[stack++] = suffix[code]; | ||||||
|  |             code = prefix[code]; | ||||||
|  |         } | ||||||
|  |         match[stack++] = (unsigned char)code; | ||||||
|  |         final = code; | ||||||
|  |  | ||||||
|  |         /* link new table entry */ | ||||||
|  |         if (end < mask) { | ||||||
|  |             end++; | ||||||
|  |             prefix[end] = (unsigned short)prev; | ||||||
|  |             suffix[end] = (unsigned char)final; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* set previous code for next iteration */ | ||||||
|  |         prev = temp; | ||||||
|  |  | ||||||
|  |         /* write output in forward order */ | ||||||
|  |         while (stack > SIZE - outcnt) { | ||||||
|  |             while (outcnt < SIZE) | ||||||
|  |                 outbuf[outcnt++] = match[--stack]; | ||||||
|  |             if (out(&outd, outbuf, outcnt)) { | ||||||
|  |                 strm->next_in = outbuf; /* signal write error */ | ||||||
|  |                 return Z_BUF_ERROR; | ||||||
|  |             } | ||||||
|  |             outcnt = 0; | ||||||
|  |         } | ||||||
|  |         do { | ||||||
|  |             outbuf[outcnt++] = match[--stack]; | ||||||
|  |         } while (stack); | ||||||
|  |  | ||||||
|  |         /* loop for next code with final and prev as the last match, rem and | ||||||
|  |            left provide the first 0..7 bits of the next code, end is the last | ||||||
|  |            valid table entry */ | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Decompress a gzip file from infile to outfile.  strm is assumed to have been | ||||||
|  |    successfully initialized with inflateBackInit().  The input file may consist | ||||||
|  |    of a series of gzip streams, in which case all of them will be decompressed | ||||||
|  |    to the output file.  If outfile is -1, then the gzip stream(s) integrity is | ||||||
|  |    checked and nothing is written. | ||||||
|  |  | ||||||
|  |    The return value is a zlib error code: Z_MEM_ERROR if out of memory, | ||||||
|  |    Z_DATA_ERROR if the header or the compressed data is invalid, or if the | ||||||
|  |    trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends | ||||||
|  |    prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip | ||||||
|  |    stream) follows a valid gzip stream. | ||||||
|  |  */ | ||||||
|  | local int gunpipe(z_stream *strm, int infile, int outfile) | ||||||
|  | { | ||||||
|  |     int ret, first, last; | ||||||
|  |     unsigned have, flags, len; | ||||||
|  |     unsigned char *next; | ||||||
|  |     struct ind ind, *indp; | ||||||
|  |     struct outd outd; | ||||||
|  |  | ||||||
|  |     /* setup input buffer */ | ||||||
|  |     ind.infile = infile; | ||||||
|  |     ind.inbuf = inbuf; | ||||||
|  |     indp = &ind; | ||||||
|  |  | ||||||
|  |     /* decompress concatenated gzip streams */ | ||||||
|  |     have = 0;                               /* no input data read in yet */ | ||||||
|  |     first = 1;                              /* looking for first gzip header */ | ||||||
|  |     strm->next_in = Z_NULL;                 /* so Z_BUF_ERROR means EOF */ | ||||||
|  |     for (;;) { | ||||||
|  |         /* look for the two magic header bytes for a gzip stream */ | ||||||
|  |         if (NEXT() == -1) { | ||||||
|  |             ret = Z_OK; | ||||||
|  |             break;                          /* empty gzip stream is ok */ | ||||||
|  |         } | ||||||
|  |         if (last != 31 || (NEXT() != 139 && last != 157)) { | ||||||
|  |             strm->msg = (char *)"incorrect header check"; | ||||||
|  |             ret = first ? Z_DATA_ERROR : Z_ERRNO; | ||||||
|  |             break;                          /* not a gzip or compress header */ | ||||||
|  |         } | ||||||
|  |         first = 0;                          /* next non-header is junk */ | ||||||
|  |  | ||||||
|  |         /* process a compress (LZW) file -- can't be concatenated after this */ | ||||||
|  |         if (last == 157) { | ||||||
|  |             ret = lunpipe(have, next, indp, outfile, strm); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* process remainder of gzip header */ | ||||||
|  |         ret = Z_BUF_ERROR; | ||||||
|  |         if (NEXT() != 8) {                  /* only deflate method allowed */ | ||||||
|  |             if (last == -1) break; | ||||||
|  |             strm->msg = (char *)"unknown compression method"; | ||||||
|  |             ret = Z_DATA_ERROR; | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         flags = NEXT();                     /* header flags */ | ||||||
|  |         NEXT();                             /* discard mod time, xflgs, os */ | ||||||
|  |         NEXT(); | ||||||
|  |         NEXT(); | ||||||
|  |         NEXT(); | ||||||
|  |         NEXT(); | ||||||
|  |         NEXT(); | ||||||
|  |         if (last == -1) break; | ||||||
|  |         if (flags & 0xe0) { | ||||||
|  |             strm->msg = (char *)"unknown header flags set"; | ||||||
|  |             ret = Z_DATA_ERROR; | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         if (flags & 4) {                    /* extra field */ | ||||||
|  |             len = NEXT(); | ||||||
|  |             len += (unsigned)(NEXT()) << 8; | ||||||
|  |             if (last == -1) break; | ||||||
|  |             while (len > have) { | ||||||
|  |                 len -= have; | ||||||
|  |                 have = 0; | ||||||
|  |                 if (NEXT() == -1) break; | ||||||
|  |                 len--; | ||||||
|  |             } | ||||||
|  |             if (last == -1) break; | ||||||
|  |             have -= len; | ||||||
|  |             next += len; | ||||||
|  |         } | ||||||
|  |         if (flags & 8)                      /* file name */ | ||||||
|  |             while (NEXT() != 0 && last != -1) | ||||||
|  |                 ; | ||||||
|  |         if (flags & 16)                     /* comment */ | ||||||
|  |             while (NEXT() != 0 && last != -1) | ||||||
|  |                 ; | ||||||
|  |         if (flags & 2) {                    /* header crc */ | ||||||
|  |             NEXT(); | ||||||
|  |             NEXT(); | ||||||
|  |         } | ||||||
|  |         if (last == -1) break; | ||||||
|  |  | ||||||
|  |         /* set up output */ | ||||||
|  |         outd.outfile = outfile; | ||||||
|  |         outd.check = 1; | ||||||
|  |         outd.crc = crc32(0L, Z_NULL, 0); | ||||||
|  |         outd.total = 0; | ||||||
|  |  | ||||||
|  |         /* decompress data to output */ | ||||||
|  |         strm->next_in = next; | ||||||
|  |         strm->avail_in = have; | ||||||
|  |         ret = inflateBack(strm, in, indp, out, &outd); | ||||||
|  |         if (ret != Z_STREAM_END) break; | ||||||
|  |         next = strm->next_in; | ||||||
|  |         have = strm->avail_in; | ||||||
|  |         strm->next_in = Z_NULL;             /* so Z_BUF_ERROR means EOF */ | ||||||
|  |  | ||||||
|  |         /* check trailer */ | ||||||
|  |         ret = Z_BUF_ERROR; | ||||||
|  |         if (NEXT() != (outd.crc & 0xff) || | ||||||
|  |             NEXT() != ((outd.crc >> 8) & 0xff) || | ||||||
|  |             NEXT() != ((outd.crc >> 16) & 0xff) || | ||||||
|  |             NEXT() != ((outd.crc >> 24) & 0xff)) { | ||||||
|  |             /* crc error */ | ||||||
|  |             if (last != -1) { | ||||||
|  |                 strm->msg = (char *)"incorrect data check"; | ||||||
|  |                 ret = Z_DATA_ERROR; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         if (NEXT() != (outd.total & 0xff) || | ||||||
|  |             NEXT() != ((outd.total >> 8) & 0xff) || | ||||||
|  |             NEXT() != ((outd.total >> 16) & 0xff) || | ||||||
|  |             NEXT() != ((outd.total >> 24) & 0xff)) { | ||||||
|  |             /* length error */ | ||||||
|  |             if (last != -1) { | ||||||
|  |                 strm->msg = (char *)"incorrect length check"; | ||||||
|  |                 ret = Z_DATA_ERROR; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* go back and look for another gzip stream */ | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* clean up and return */ | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Copy file attributes, from -> to, as best we can.  This is best effort, so | ||||||
|  |    no errors are reported.  The mode bits, including suid, sgid, and the sticky | ||||||
|  |    bit are copied (if allowed), the owner's user id and group id are copied | ||||||
|  |    (again if allowed), and the access and modify times are copied. */ | ||||||
|  | local void copymeta(char *from, char *to) | ||||||
|  | { | ||||||
|  |     struct stat was; | ||||||
|  |     struct utimbuf when; | ||||||
|  |  | ||||||
|  |     /* get all of from's Unix meta data, return if not a regular file */ | ||||||
|  |     if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG) | ||||||
|  |         return; | ||||||
|  |  | ||||||
|  |     /* set to's mode bits, ignore errors */ | ||||||
|  |     (void)chmod(to, was.st_mode & 07777); | ||||||
|  |  | ||||||
|  |     /* copy owner's user and group, ignore errors */ | ||||||
|  |     (void)chown(to, was.st_uid, was.st_gid); | ||||||
|  |  | ||||||
|  |     /* copy access and modify times, ignore errors */ | ||||||
|  |     when.actime = was.st_atime; | ||||||
|  |     when.modtime = was.st_mtime; | ||||||
|  |     (void)utime(to, &when); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Decompress the file inname to the file outnname, of if test is true, just | ||||||
|  |    decompress without writing and check the gzip trailer for integrity.  If | ||||||
|  |    inname is NULL or an empty string, read from stdin.  If outname is NULL or | ||||||
|  |    an empty string, write to stdout.  strm is a pre-initialized inflateBack | ||||||
|  |    structure.  When appropriate, copy the file attributes from inname to | ||||||
|  |    outname. | ||||||
|  |  | ||||||
|  |    gunzip() returns 1 if there is an out-of-memory error or an unexpected | ||||||
|  |    return code from gunpipe().  Otherwise it returns 0. | ||||||
|  |  */ | ||||||
|  | local int gunzip(z_stream *strm, char *inname, char *outname, int test) | ||||||
|  | { | ||||||
|  |     int ret; | ||||||
|  |     int infile, outfile; | ||||||
|  |  | ||||||
|  |     /* open files */ | ||||||
|  |     if (inname == NULL || *inname == 0) { | ||||||
|  |         inname = "-"; | ||||||
|  |         infile = 0;     /* stdin */ | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         infile = open(inname, O_RDONLY, 0); | ||||||
|  |         if (infile == -1) { | ||||||
|  |             fprintf(stderr, "gun cannot open %s\n", inname); | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     if (test) | ||||||
|  |         outfile = -1; | ||||||
|  |     else if (outname == NULL || *outname == 0) { | ||||||
|  |         outname = "-"; | ||||||
|  |         outfile = 1;    /* stdout */ | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666); | ||||||
|  |         if (outfile == -1) { | ||||||
|  |             close(infile); | ||||||
|  |             fprintf(stderr, "gun cannot create %s\n", outname); | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     errno = 0; | ||||||
|  |  | ||||||
|  |     /* decompress */ | ||||||
|  |     ret = gunpipe(strm, infile, outfile); | ||||||
|  |     if (outfile > 2) close(outfile); | ||||||
|  |     if (infile > 2) close(infile); | ||||||
|  |  | ||||||
|  |     /* interpret result */ | ||||||
|  |     switch (ret) { | ||||||
|  |     case Z_OK: | ||||||
|  |     case Z_ERRNO: | ||||||
|  |         if (infile > 2 && outfile > 2) { | ||||||
|  |             copymeta(inname, outname);          /* copy attributes */ | ||||||
|  |             unlink(inname); | ||||||
|  |         } | ||||||
|  |         if (ret == Z_ERRNO) | ||||||
|  |             fprintf(stderr, "gun warning: trailing garbage ignored in %s\n", | ||||||
|  |                     inname); | ||||||
|  |         break; | ||||||
|  |     case Z_DATA_ERROR: | ||||||
|  |         if (outfile > 2) unlink(outname); | ||||||
|  |         fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg); | ||||||
|  |         break; | ||||||
|  |     case Z_MEM_ERROR: | ||||||
|  |         if (outfile > 2) unlink(outname); | ||||||
|  |         fprintf(stderr, "gun out of memory error--aborting\n"); | ||||||
|  |         return 1; | ||||||
|  |     case Z_BUF_ERROR: | ||||||
|  |         if (outfile > 2) unlink(outname); | ||||||
|  |         if (strm->next_in != Z_NULL) { | ||||||
|  |             fprintf(stderr, "gun write error on %s: %s\n", | ||||||
|  |                     outname, strerror(errno)); | ||||||
|  |         } | ||||||
|  |         else if (errno) { | ||||||
|  |             fprintf(stderr, "gun read error on %s: %s\n", | ||||||
|  |                     inname, strerror(errno)); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             fprintf(stderr, "gun unexpected end of file on %s\n", | ||||||
|  |                     inname); | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         if (outfile > 2) unlink(outname); | ||||||
|  |         fprintf(stderr, "gun internal error--aborting\n"); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Process the gun command line arguments.  See the command syntax near the | ||||||
|  |    beginning of this source file. */ | ||||||
|  | int main(int argc, char **argv) | ||||||
|  | { | ||||||
|  |     int ret, len, test; | ||||||
|  |     char *outname; | ||||||
|  |     unsigned char *window; | ||||||
|  |     z_stream strm; | ||||||
|  |  | ||||||
|  |     /* initialize inflateBack state for repeated use */ | ||||||
|  |     window = match;                         /* reuse LZW match buffer */ | ||||||
|  |     strm.zalloc = Z_NULL; | ||||||
|  |     strm.zfree = Z_NULL; | ||||||
|  |     strm.opaque = Z_NULL; | ||||||
|  |     ret = inflateBackInit(&strm, 15, window); | ||||||
|  |     if (ret != Z_OK) { | ||||||
|  |         fprintf(stderr, "gun out of memory error--aborting\n"); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* decompress each file to the same name with the suffix removed */ | ||||||
|  |     argc--; | ||||||
|  |     argv++; | ||||||
|  |     test = 0; | ||||||
|  |     if (argc && strcmp(*argv, "-h") == 0) { | ||||||
|  |         fprintf(stderr, "gun 1.3 (12 Jun 2005)\n"); | ||||||
|  |         fprintf(stderr, "Copyright (c) 2005 Mark Adler\n"); | ||||||
|  |         fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n"); | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |     if (argc && strcmp(*argv, "-t") == 0) { | ||||||
|  |         test = 1; | ||||||
|  |         argc--; | ||||||
|  |         argv++; | ||||||
|  |     } | ||||||
|  |     if (argc) | ||||||
|  |         do { | ||||||
|  |             if (test) | ||||||
|  |                 outname = NULL; | ||||||
|  |             else { | ||||||
|  |                 len = (int)strlen(*argv); | ||||||
|  |                 if (strcmp(*argv + len - 3, ".gz") == 0 || | ||||||
|  |                     strcmp(*argv + len - 3, "-gz") == 0) | ||||||
|  |                     len -= 3; | ||||||
|  |                 else if (strcmp(*argv + len - 2, ".z") == 0 || | ||||||
|  |                     strcmp(*argv + len - 2, "-z") == 0 || | ||||||
|  |                     strcmp(*argv + len - 2, "_z") == 0 || | ||||||
|  |                     strcmp(*argv + len - 2, ".Z") == 0) | ||||||
|  |                     len -= 2; | ||||||
|  |                 else { | ||||||
|  |                     fprintf(stderr, "gun error: no gz type on %s--skipping\n", | ||||||
|  |                             *argv); | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 outname = malloc(len + 1); | ||||||
|  |                 if (outname == NULL) { | ||||||
|  |                     fprintf(stderr, "gun out of memory error--aborting\n"); | ||||||
|  |                     ret = 1; | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |                 memcpy(outname, *argv, len); | ||||||
|  |                 outname[len] = 0; | ||||||
|  |             } | ||||||
|  |             ret = gunzip(&strm, *argv, outname, test); | ||||||
|  |             if (outname != NULL) free(outname); | ||||||
|  |             if (ret) break; | ||||||
|  |         } while (argv++, --argc); | ||||||
|  |     else | ||||||
|  |         ret = gunzip(&strm, NULL, NULL, test); | ||||||
|  |  | ||||||
|  |     /* clean up */ | ||||||
|  |     inflateBackEnd(&strm); | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
| @@ -26,6 +26,7 @@ | |||||||
|  * Change history: |  * Change history: | ||||||
|  * |  * | ||||||
|  * 1.0  11 Dec 2004     - First version |  * 1.0  11 Dec 2004     - First version | ||||||
|  |  * 1.1  12 Jun 2005     - Changed ssize_t to long for portability | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -118,7 +119,7 @@ local bin *bopen(char *name) | |||||||
|    1 indicating that end-of-file was reached */ |    1 indicating that end-of-file was reached */ | ||||||
| local int bload(bin *in) | local int bload(bin *in) | ||||||
| { | { | ||||||
|     ssize_t len; |     long len; | ||||||
|  |  | ||||||
|     if (in == NULL) |     if (in == NULL) | ||||||
|         return -1; |         return -1; | ||||||
| @@ -126,7 +127,7 @@ local int bload(bin *in) | |||||||
|         return 0; |         return 0; | ||||||
|     in->next = in->buf; |     in->next = in->buf; | ||||||
|     do { |     do { | ||||||
|         len = read(in->fd, in->buf + in->left, CHUNK - in->left); |         len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left); | ||||||
|         if (len < 0) |         if (len < 0) | ||||||
|             return -1; |             return -1; | ||||||
|         in->left += (unsigned)len; |         in->left += (unsigned)len; | ||||||
|   | |||||||
							
								
								
									
										1355
									
								
								examples/gzlog.c
									
									
									
									
									
								
							
							
						
						
									
										1355
									
								
								examples/gzlog.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| /* gzlog.h | /* gzlog.h | ||||||
|   Copyright (C) 2004 Mark Adler, all rights reserved |   Copyright (C) 2004, 2008 Mark Adler, all rights reserved | ||||||
|   version 1.0, 26 Nov 2004 |   version 2.0, 25 Apr 2008 | ||||||
|  |  | ||||||
|   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 author be held liable for any damages |   warranty.  In no event will the author be held liable for any damages | ||||||
| @@ -21,38 +21,69 @@ | |||||||
|   Mark Adler    madler@alumni.caltech.edu |   Mark Adler    madler@alumni.caltech.edu | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | /* Version History: | ||||||
|  |    1.0  26 Nov 2004  First version | ||||||
|  |    2.0  25 Apr 2008  Complete redesign for recovery of interrupted operations | ||||||
|  |                      Interface changed slightly in that now path is a prefix | ||||||
|  |                      Compression now occurs as needed during gzlog_write() | ||||||
|  |                      gzlog_write() now always leaves the log file as valid gzip | ||||||
|  |  */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|    The gzlog object allows writing short messages to a gzipped log file, |    The gzlog object allows writing short messages to a gzipped log file, | ||||||
|    opening the log file locked for small bursts, and then closing it.  The log |    opening the log file locked for small bursts, and then closing it.  The log | ||||||
|    object works by appending stored data to the gzip file until 1 MB has been |    object works by appending stored (uncompressed) data to the gzip file until | ||||||
|    accumulated.  At that time, the stored data is compressed, and replaces the |    1 MB has been accumulated.  At that time, the stored data is compressed, and | ||||||
|    uncompressed data in the file.  The log file is truncated to its new size at |    replaces the uncompressed data in the file.  The log file is truncated to | ||||||
|    that time.  After closing, the log file is always valid gzip file that can |    its new size at that time.  After each write operation, the log file is a | ||||||
|    decompressed to recover what was written. |    valid gzip file that can decompressed to recover what was written. | ||||||
|  |  | ||||||
|    A gzip header "extra" field contains two file offsets for appending.  The |    The gzlog operations can be interupted at any point due to an application or | ||||||
|    first points to just after the last compressed data.  The second points to |    system crash, and the log file will be recovered the next time the log is | ||||||
|    the last stored block in the deflate stream, which is empty.  All of the |    opened with gzlog_open(). | ||||||
|    data between those pointers is uncompressed. |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #ifndef GZLOG_H | ||||||
|  | #define GZLOG_H | ||||||
|  |  | ||||||
|  | /* gzlog object type */ | ||||||
|  | typedef void gzlog; | ||||||
|  |  | ||||||
| /* Open a gzlog object, creating the log file if it does not exist.  Return | /* Open a gzlog object, creating the log file if it does not exist.  Return | ||||||
|    NULL on error.  Note that gzlog_open() could take a long time to return if |    NULL on error.  Note that gzlog_open() could take a while to complete if it | ||||||
|    there is difficulty in locking the file. */ |    has to wait to verify that a lock is stale (possibly for five minutes), or | ||||||
| void *gzlog_open(char *path); |    if there is significant contention with other instantiations of this object | ||||||
|  |    when locking the resource.  path is the prefix of the file names created by | ||||||
|  |    this object.  If path is "foo", then the log file will be "foo.gz", and | ||||||
|  |    other auxiliary files will be created and destroyed during the process: | ||||||
|  |    "foo.dict" for a compression dictionary, "foo.temp" for a temporary (next) | ||||||
|  |    dictionary, "foo.add" for data being added or compressed, "foo.lock" for the | ||||||
|  |    lock file, and "foo.repairs" to log recovery operations performed due to | ||||||
|  |    interrupted gzlog operations.  A gzlog_open() followed by a gzlog_close() | ||||||
|  |    will recover a previously interrupted operation, if any. */ | ||||||
|  | gzlog *gzlog_open(char *path); | ||||||
|  |  | ||||||
| /* Write to a gzlog object.  Return non-zero on error.  This function will | /* Write to a gzlog object.  Return zero on success, -1 if there is a file i/o | ||||||
|    simply write data to the file uncompressed.  Compression of the data |    error on any of the gzlog files (this should not happen if gzlog_open() | ||||||
|    will not occur until gzlog_close() is called.  It is expected that |    succeeded, unless the device has run out of space or leftover auxiliary | ||||||
|    gzlog_write() is used for a short message, and then gzlog_close() is |    files have permissions or ownership that prevent their use), -2 if there is | ||||||
|    called.  If a large amount of data is to be written, then the application |    a memory allocation failure, or -3 if the log argument is invalid (e.g. if | ||||||
|    should write no more than 1 MB at a time with gzlog_write() before |    it was not created by gzlog_open()).  This function will write data to the | ||||||
|    calling gzlog_close() and then gzlog_open() again. */ |    file uncompressed, until 1 MB has been accumulated, at which time that data | ||||||
| int gzlog_write(void *log, char *data, size_t len); |    will be compressed.  The log file will be a valid gzip file upon successful | ||||||
|  |    return. */ | ||||||
|  | int gzlog_write(gzlog *log, void *data, size_t len); | ||||||
|  |  | ||||||
| /* Close a gzlog object.  Return non-zero on error.  The log file is locked | /* Force compression of any uncompressed data in the log.  This should be used | ||||||
|    until this function is called.  This function will compress stored data |    sparingly, if at all.  The main application would be when a log file will | ||||||
|    at the end of the gzip file if at least 1 MB has been accumulated.  Note |    not be appended to again.  If this is used to compress frequently while | ||||||
|    that the file will not be a valid gzip file until this function completes. |    appending, it will both significantly increase the execution time and | ||||||
|  */ |    reduce the compression ratio.  The return codes are the same as for | ||||||
| int gzlog_close(void *log); |    gzlog_write(). */ | ||||||
|  | int gzlog_compress(gzlog *log); | ||||||
|  |  | ||||||
|  | /* Close a gzlog object.  Return zero on success, -3 if the log argument is | ||||||
|  |    invalid.  The log object is freed, and so cannot be referenced again. */ | ||||||
|  | int gzlog_close(gzlog *log); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user