zlib: Remove build from src dir and update.
authormark <mark@2c67d6c2-4361-4cd7-bd83-1149b1926c9b>
Mon, 20 May 2013 19:57:00 +0000 (19:57 +0000)
committermark <mark@2c67d6c2-4361-4cd7-bd83-1149b1926c9b>
Mon, 20 May 2013 19:57:00 +0000 (19:57 +0000)
This is zlib 1.2.8.

git-svn-id: https://valelab.ucsf.edu/svn/3rdpartypublic@136 2c67d6c2-4361-4cd7-bd83-1149b1926c9b

160 files changed:
zlib/CMakeLists.txt
zlib/ChangeLog
zlib/FAQ
zlib/INDEX
zlib/Makefile
zlib/Makefile.in
zlib/README
zlib/adler32.c
zlib/as400/bndsrc [new file with mode: 0644]
zlib/as400/compile.clp [new file with mode: 0644]
zlib/as400/readme.txt [new file with mode: 0644]
zlib/as400/zlib.inc [new file with mode: 0644]
zlib/bin_Win32/zdll.exp [deleted file]
zlib/bin_Win32/zdll.lib [deleted file]
zlib/bin_Win32/zlib.lib [deleted file]
zlib/bin_Win32/zlib.pdb [deleted file]
zlib/bin_Win32/zlib1.dll [deleted file]
zlib/bin_Win32/zlib1.dll.manifest [deleted file]
zlib/bin_Win32/zlib1.pdb [deleted file]
zlib/bin_Win32/zlib1.res [deleted file]
zlib/bin_x64/zdll.lib [deleted file]
zlib/bin_x64/zlib.lib [deleted file]
zlib/bin_x64/zlib1.dll [deleted file]
zlib/bin_x64/zlib1.dll.manifest [deleted file]
zlib/build_x64.bat [deleted file]
zlib/build_x86.bat [deleted file]
zlib/clean.bat [deleted file]
zlib/compress.c
zlib/configure
zlib/contrib/README.contrib
zlib/contrib/asm686/match.S
zlib/contrib/blast/blast.c
zlib/contrib/blast/blast.h
zlib/contrib/delphi/ZLib.pas
zlib/contrib/delphi/zlibd32.mak
zlib/contrib/dotzlib/DotZLib/UnitTests.cs
zlib/contrib/infback9/infback9.c
zlib/contrib/infback9/inftree9.c
zlib/contrib/masmx64/gvmat64.lst [deleted file]
zlib/contrib/masmx64/gvmat64.obj [deleted file]
zlib/contrib/masmx64/inffasx64.lst [deleted file]
zlib/contrib/masmx64/inffasx64.obj [deleted file]
zlib/contrib/masmx86/inffas32.asm
zlib/contrib/masmx86/match686.asm
zlib/contrib/minizip/Makefile.am [new file with mode: 0644]
zlib/contrib/minizip/configure.ac [new file with mode: 0644]
zlib/contrib/minizip/crypt.h
zlib/contrib/minizip/ioapi.c
zlib/contrib/minizip/ioapi.h
zlib/contrib/minizip/iowin32.c
zlib/contrib/minizip/miniunz.c
zlib/contrib/minizip/miniunzip.1 [new file with mode: 0644]
zlib/contrib/minizip/minizip.1 [new file with mode: 0644]
zlib/contrib/minizip/minizip.c
zlib/contrib/minizip/minizip.pc.in [new file with mode: 0644]
zlib/contrib/minizip/mztools.c
zlib/contrib/minizip/mztools.h
zlib/contrib/minizip/unzip.c
zlib/contrib/minizip/unzip.h
zlib/contrib/minizip/zip.c
zlib/contrib/pascal/zlibd32.mak
zlib/contrib/pascal/zlibpas.pas
zlib/contrib/puff/Makefile
zlib/contrib/puff/puff.c
zlib/contrib/puff/puff.h
zlib/contrib/puff/pufftest.c [new file with mode: 0644]
zlib/contrib/puff/zeros.raw
zlib/contrib/testzlib/testzlib.c
zlib/contrib/vstudio/readme.txt
zlib/contrib/vstudio/vc10/miniunz.vcxproj.user [deleted file]
zlib/contrib/vstudio/vc10/minizip.vcxproj.user [deleted file]
zlib/contrib/vstudio/vc10/testzlib.vcxproj.user [deleted file]
zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.user [deleted file]
zlib/contrib/vstudio/vc10/zlib.rc
zlib/contrib/vstudio/vc10/zlibstat.vcxproj
zlib/contrib/vstudio/vc10/zlibstat.vcxproj.user [deleted file]
zlib/contrib/vstudio/vc10/zlibvc.def
zlib/contrib/vstudio/vc10/zlibvc.vcxproj
zlib/contrib/vstudio/vc10/zlibvc.vcxproj.user [deleted file]
zlib/contrib/vstudio/vc11/miniunz.vcxproj [new file with mode: 0644]
zlib/contrib/vstudio/vc11/minizip.vcxproj [new file with mode: 0644]
zlib/contrib/vstudio/vc11/testzlib.vcxproj [new file with mode: 0644]
zlib/contrib/vstudio/vc11/testzlibdll.vcxproj [new file with mode: 0644]
zlib/contrib/vstudio/vc11/zlib.rc [new file with mode: 0644]
zlib/contrib/vstudio/vc11/zlibstat.vcxproj [new file with mode: 0644]
zlib/contrib/vstudio/vc11/zlibvc.def [new file with mode: 0644]
zlib/contrib/vstudio/vc11/zlibvc.sln [new file with mode: 0644]
zlib/contrib/vstudio/vc11/zlibvc.vcxproj [new file with mode: 0644]
zlib/contrib/vstudio/vc9/zlib.rc
zlib/contrib/vstudio/vc9/zlibvc.def
zlib/contrib_preassembled/masmx64/gvmat64.obj [deleted file]
zlib/contrib_preassembled/masmx64/inffasx64.obj [deleted file]
zlib/contrib_preassembled/masmx86/inffas32.obj [deleted file]
zlib/contrib_preassembled/masmx86/match686.obj [deleted file]
zlib/contrib_preassembled/testzlib/rdtsc64.obj [deleted file]
zlib/crc32.c
zlib/crc32.h
zlib/definevcvars.bat [deleted file]
zlib/definevcvars_x64buildmachine.bat [deleted file]
zlib/deflate.c
zlib/deflate.h
zlib/doc/algorithm.txt
zlib/example.c [deleted file]
zlib/examples/enough.c
zlib/examples/gun.c
zlib/examples/gzappend.c
zlib/examples/gzjoin.c
zlib/examples/gzlog.c
zlib/examples/gzlog.h
zlib/examples/zran.c
zlib/gzguts.h
zlib/gzlib.c
zlib/gzread.c
zlib/gzwrite.c
zlib/infback.c
zlib/inffas8664.c [deleted file]
zlib/inffast.c
zlib/inffixed.h
zlib/inflate.c
zlib/inftrees.c
zlib/make_vms.com
zlib/minigzip.c [deleted file]
zlib/msdos/Makefile.bor
zlib/msdos/Makefile.msc
zlib/msdos/Makefile.tc
zlib/old/Makefile.emx [new file with mode: 0644]
zlib/old/as400/bndsrc [deleted file]
zlib/old/as400/compile.clp [deleted file]
zlib/old/as400/readme.txt [deleted file]
zlib/old/as400/zlib.inc [deleted file]
zlib/old/visualc6/README.txt [deleted file]
zlib/old/visualc6/example.dsp [deleted file]
zlib/old/visualc6/minigzip.dsp [deleted file]
zlib/old/visualc6/zlib.dsp [deleted file]
zlib/old/visualc6/zlib.dsw [deleted file]
zlib/qnx/package.qpg
zlib/test/example.c [new file with mode: 0644]
zlib/test/infcover.c [new file with mode: 0644]
zlib/test/minigzip.c [new file with mode: 0644]
zlib/treebuild.xml
zlib/trees.c
zlib/uncompr.c
zlib/win32/Makefile.bor
zlib/win32/Makefile.emx [deleted file]
zlib/win32/Makefile.gcc
zlib/win32/Makefile.msc
zlib/win32/README-WIN32.txt
zlib/win32/zlib.def
zlib/win32/zlib1.rc
zlib/zconf.h
zlib/zconf.h.cmakein
zlib/zconf.h.in
zlib/zlib.3
zlib/zlib.3.pdf
zlib/zlib.h
zlib/zlib.map
zlib/zlib.pc.cmakein [new file with mode: 0644]
zlib/zutil.c
zlib/zutil.h

index a64fe0b..0c0247c 100644 (file)
@@ -3,9 +3,16 @@ 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()
+set(VERSION "1.2.8")
+
+option(ASM686 "Enable building i686 assembly implementation")
+option(AMD64 "Enable building amd64 assembly implementation")
+
+set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
+set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
+set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
+set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
+set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
 
 include(CheckTypeSize)
 include(CheckFunctionExists)
@@ -56,23 +63,27 @@ if(MSVC)
     set(CMAKE_DEBUG_POSTFIX "d")
     add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
     add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
+    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 endif()
 
 if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
     # If we're doing an out of source build and the user has a zconf.h
     # in their source tree...
     if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
-        message(FATAL_ERROR
-            "You must remove ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h "
-            "from the source tree.  This file is included with zlib "
-            "but CMake generates this file for you automatically "
-            "in the build directory.")
+        message(STATUS "Renaming")
+        message(STATUS "    ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h")
+        message(STATUS "to 'zconf.h.included' because this file is included with zlib")
+        message(STATUS "but CMake generates it automatically in the build directory.")
+        file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included)
   endif()
 endif()
 
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
-               ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
+set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc)
+configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
+               ${ZLIB_PC} @ONLY)
+configure_file(        ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
+               ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
+include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
 
 
 #============================================================================
@@ -110,29 +121,71 @@ set(ZLIB_SRCS
     trees.c
     uncompr.c
     zutil.c
-    win32/zlib1.rc
 )
 
+if(NOT MINGW)
+    set(ZLIB_DLL_SRCS
+        win32/zlib1.rc # If present will override custom build rule below.
+    )
+endif()
+
+if(CMAKE_COMPILER_IS_GNUCC)
+    if(ASM686)
+        set(ZLIB_ASMS contrib/asm686/match.S)
+    elseif (AMD64)
+        set(ZLIB_ASMS contrib/amd64/amd64-match.S)
+    endif ()
+
+       if(ZLIB_ASMS)
+               add_definitions(-DASMV)
+               set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE)
+       endif()
+endif()
+
+if(MSVC)
+    if(ASM686)
+               ENABLE_LANGUAGE(ASM_MASM)
+        set(ZLIB_ASMS
+                       contrib/masmx86/inffas32.asm
+                       contrib/masmx86/match686.asm
+               )
+    elseif (AMD64)
+               ENABLE_LANGUAGE(ASM_MASM)
+        set(ZLIB_ASMS
+                       contrib/masmx64/gvmat64.asm
+                       contrib/masmx64/inffasx64.asm
+               )
+    endif()
+
+       if(ZLIB_ASMS)
+               add_definitions(-DASMV -DASMINF)
+       endif()
+endif()
+
 # parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
-string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*"
+string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
     "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
 
 if(MINGW)
     # This gets us DLL resource information when compiling on MinGW.
+    if(NOT CMAKE_RC_COMPILER)
+        set(CMAKE_RC_COMPILER windres.exe)
+    endif()
+
     add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
-                       COMMAND windres.exe
+                       COMMAND ${CMAKE_RC_COMPILER}
                             -D GCC_WINDRES
                             -I ${CMAKE_CURRENT_SOURCE_DIR}
                             -I ${CMAKE_CURRENT_BINARY_DIR}
                             -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
                             -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
-    set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
+    set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
 endif(MINGW)
 
-add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
 set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
-
 set_target_properties(zlib PROPERTIES SOVERSION 1)
 
 if(NOT CYGWIN)
@@ -148,43 +201,49 @@ endif()
 
 if(UNIX)
     # On unix-like platforms the library is almost always called libz
-   set_target_properties(zlib PROPERTIES OUTPUT_NAME z)
+   set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)
+   if(NOT APPLE)
+     set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"")
+   endif()
 elseif(BUILD_SHARED_LIBS AND WIN32)
     # Creates zlib1.dll when building shared library version
     set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
 endif()
 
 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
-    install(TARGETS zlib
-        RUNTIME DESTINATION bin
-        ARCHIVE DESTINATION lib
-        LIBRARY DESTINATION lib )
+    install(TARGETS zlib zlibstatic
+        RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
+        ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
+        LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
 endif()
 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
-    install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include)
+    install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}")
+endif()
+if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
+    install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3")
 endif()
 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
-    install(FILES zlib.3 DESTINATION share/man/man3)
+    install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}")
 endif()
 
 #============================================================================
 # Example binaries
 #============================================================================
 
-add_executable(example example.c)
+add_executable(example test/example.c)
 target_link_libraries(example zlib)
 add_test(example example)
 
-add_executable(minigzip minigzip.c)
+add_executable(minigzip test/minigzip.c)
 target_link_libraries(minigzip zlib)
 
 if(HAVE_OFF64_T)
-    add_executable(example64 example.c)
+    add_executable(example64 test/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)
+    add_executable(minigzip64 test/minigzip.c)
     target_link_libraries(minigzip64 zlib)
     set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
 endif()
index f310bb0..f22aaba 100644 (file)
 
                 ChangeLog file for zlib
 
+Changes in 1.2.8 (28 Apr 2013)
+- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
+- Do not force Z_CONST for C++
+- Clean up contrib/vstudio [Ro§]
+- Correct spelling error in zlib.h
+- Fix mixed line endings in contrib/vstudio
+
+Changes in 1.2.7.3 (13 Apr 2013)
+- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc
+
+Changes in 1.2.7.2 (13 Apr 2013)
+- Change check for a four-byte type back to hexadecimal
+- Fix typo in win32/Makefile.msc
+- Add casts in gzwrite.c for pointer differences
+
+Changes in 1.2.7.1 (24 Mar 2013)
+- Replace use of unsafe string functions with snprintf if available
+- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink]
+- Fix gzgetc undefine when Z_PREFIX set [Turk]
+- Eliminate use of mktemp in Makefile (not always available)
+- Fix bug in 'F' mode for gzopen()
+- Add inflateGetDictionary() function
+- Correct comment in deflate.h
+- Use _snprintf for snprintf in Microsoft C
+- On Darwin, only use /usr/bin/libtool if libtool is not Apple
+- Delete "--version" file if created by "ar --version" [Richard G.]
+- Fix configure check for veracity of compiler error return codes
+- Fix CMake compilation of static lib for MSVC2010 x64
+- Remove unused variable in infback9.c
+- Fix argument checks in gzlog_compress() and gzlog_write()
+- Clean up the usage of z_const and respect const usage within zlib
+- Clean up examples/gzlog.[ch] comparisons of different types
+- Avoid shift equal to bits in type (caused endless loop)
+- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix memory allocation error in examples/zran.c [Nor]
+- Fix bug where gzopen(), gzclose() would write an empty file
+- Fix bug in gzclose() when gzwrite() runs out of memory
+- Check for input buffer malloc failure in examples/gzappend.c
+- Add note to contrib/blast to use binary mode in stdio
+- Fix comparisons of differently signed integers in contrib/blast
+- Check for invalid code length codes in contrib/puff
+- Fix serious but very rare decompression bug in inftrees.c
+- Update inflateBack() comments, since inflate() can be faster
+- Use underscored I/O function names for WINAPI_FAMILY
+- Add _tr_flush_bits to the external symbols prefixed by --zprefix
+- Add contrib/vstudio/vc10 pre-build step for static only
+- Quote --version-script argument in CMakeLists.txt
+- Don't specify --version-script on Apple platforms in CMakeLists.txt
+- Fix casting error in contrib/testzlib/testzlib.c
+- Fix types in contrib/minizip to match result of get_crc_table()
+- Simplify contrib/vstudio/vc10 with 'd' suffix
+- Add TOP support to win32/Makefile.msc
+- Suport i686 and amd64 assembler builds in CMakeLists.txt
+- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
+- Add vc11 and vc12 build files to contrib/vstudio
+- Add gzvprintf() as an undocumented function in zlib
+- Fix configure for Sun shell
+- Remove runtime check in configure for four-byte integer type
+- Add casts and consts to ease user conversion to C++
+- Add man pages for minizip and miniunzip
+- In Makefile uninstall, don't rm if preceding cd fails
+- Do not return Z_BUF_ERROR if deflateParam() has nothing to write
+
+Changes in 1.2.7 (2 May 2012)
+- Replace use of memmove() with a simple copy for portability
+- Test for existence of strerror
+- Restore gzgetc_ for backward compatibility with 1.2.6
+- Fix build with non-GNU make on Solaris
+- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
+- Include unistd.h for Watcom C
+- Use __WATCOMC__ instead of __WATCOM__
+- Do not use the visibility attribute if NO_VIZ defined
+- Improve the detection of no hidden visibility attribute
+- Avoid using __int64 for gcc or solo compilation
+- Cast to char * in gzprintf to avoid warnings [Zinser]
+- Fix make_vms.com for VAX [Zinser]
+- Don't use library or built-in byte swaps
+- Simplify test and use of gcc hidden attribute
+- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
+- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
+- Fix bug in test/minigzip.c for configure --solo
+- Fix contrib/vstudio project link errors [Mohanathas]
+- Add ability to choose the builder in make_vms.com [Schweda]
+- Add DESTDIR support to mingw32 win32/Makefile.gcc
+- Fix comments in win32/Makefile.gcc for proper usage
+- Allow overriding the default install locations for cmake
+- Generate and install the pkg-config file with cmake
+- Build both a static and a shared version of zlib with cmake
+- Include version symbols for cmake builds
+- If using cmake with MSVC, add the source directory to the includes
+- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
+- Move obsolete emx makefile to old [Truta]
+- Allow the use of -Wundef when compiling or using zlib
+- Avoid the use of the -u option with mktemp
+- Improve inflate() documentation on the use of Z_FINISH
+- Recognize clang as gcc
+- Add gzopen_w() in Windows for wide character path names
+- Rename zconf.h in CMakeLists.txt to move it out of the way
+- Add source directory in CMakeLists.txt for building examples
+- Look in build directory for zlib.pc in CMakeLists.txt
+- Remove gzflags from zlibvc.def in vc9 and vc10
+- Fix contrib/minizip compilation in the MinGW environment
+- Update ./configure for Solaris, support --64 [Mooney]
+- Remove -R. from Solaris shared build (possible security issue)
+- Avoid race condition for parallel make (-j) running example
+- Fix type mismatch between get_crc_table() and crc_table
+- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
+- Fix the path to zlib.map in CMakeLists.txt
+- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
+- Add instructions to win32/Makefile.gcc for shared install [Torri]
+
+Changes in 1.2.6.1 (12 Feb 2012)
+- Avoid the use of the Objective-C reserved name "id"
+- Include io.h in gzguts.h for Microsoft compilers
+- Fix problem with ./configure --prefix and gzgetc macro
+- Include gz_header definition when compiling zlib solo
+- Put gzflags() functionality back in zutil.c
+- Avoid library header include in crc32.c for Z_SOLO
+- Use name in GCC_CLASSIC as C compiler for coverage testing, if set
+- Minor cleanup in contrib/minizip/zip.c [Vollant]
+- Update make_vms.com [Zinser]
+- Remove unnecessary gzgetc_ function
+- Use optimized byte swap operations for Microsoft and GNU [Snyder]
+- Fix minor typo in zlib.h comments [Rzesniowiecki]
+
+Changes in 1.2.6 (29 Jan 2012)
+- Update the Pascal interface in contrib/pascal
+- Fix function numbers for gzgetc_ in zlibvc.def files
+- Fix configure.ac for contrib/minizip [Schiffer]
+- Fix large-entry detection in minizip on 64-bit systems [Schiffer]
+- Have ./configure use the compiler return code for error indication
+- Fix CMakeLists.txt for cross compilation [McClure]
+- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes]
+- Fix compilation of contrib/minizip on FreeBSD [Marquez]
+- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath]
+- Include io.h for Turbo C / Borland C on all platforms [Truta]
+- Make version explicit in contrib/minizip/configure.ac [Bosmans]
+- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant]
+- Minor cleanup up contrib/minizip/unzip.c [Vollant]
+- Fix bug when compiling minizip with C++ [Vollant]
+- Protect for long name and extra fields in contrib/minizip [Vollant]
+- Avoid some warnings in contrib/minizip [Vollant]
+- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip
+- Add missing libs to minizip linker command
+- Add support for VPATH builds in contrib/minizip
+- Add an --enable-demos option to contrib/minizip/configure
+- Add the generation of configure.log by ./configure
+- Exit when required parameters not provided to win32/Makefile.gcc
+- Have gzputc return the character written instead of the argument
+- Use the -m option on ldconfig for BSD systems [Tobias]
+- Correct in zlib.map when deflateResetKeep was added
+
+Changes in 1.2.5.3 (15 Jan 2012)
+- Restore gzgetc function for binary compatibility
+- Do not use _lseeki64 under Borland C++ [Truta]
+- Update win32/Makefile.msc to build test/*.c [Truta]
+- Remove old/visualc6 given CMakefile and other alternatives
+- Update AS400 build files and documentation [Monnerat]
+- Update win32/Makefile.gcc to build test/*.c [Truta]
+- Permit stronger flushes after Z_BLOCK flushes
+- Avoid extraneous empty blocks when doing empty flushes
+- Permit Z_NULL arguments to deflatePending
+- Allow deflatePrime() to insert bits in the middle of a stream
+- Remove second empty static block for Z_PARTIAL_FLUSH
+- Write out all of the available bits when using Z_BLOCK
+- Insert the first two strings in the hash table after a flush
+
+Changes in 1.2.5.2 (17 Dec 2011)
+- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
+- use relative symlinks for shared libs
+- Avoid searching past window for Z_RLE strategy
+- Assure that high-water mark initialization is always applied in deflate
+- Add assertions to fill_window() in deflate.c to match comments
+- Update python link in README
+- Correct spelling error in gzread.c
+- Fix bug in gzgets() for a concatenated empty gzip stream
+- Correct error in comment for gz_make()
+- Change gzread() and related to ignore junk after gzip streams
+- Allow gzread() and related to continue after gzclearerr()
+- Allow gzrewind() and gzseek() after a premature end-of-file
+- Simplify gzseek() now that raw after gzip is ignored
+- Change gzgetc() to a macro for speed (~40% speedup in testing)
+- Fix gzclose() to return the actual error last encountered
+- Always add large file support for windows
+- Include zconf.h for windows large file support
+- Include zconf.h.cmakein for windows large file support
+- Update zconf.h.cmakein on make distclean
+- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
+- Clarify how gzopen() appends in zlib.h comments
+- Correct documentation of gzdirect() since junk at end now ignored
+- Add a transparent write mode to gzopen() when 'T' is in the mode
+- Update python link in zlib man page
+- Get inffixed.h and MAKEFIXED result to match
+- Add a ./config --solo option to make zlib subset with no libary use
+- Add undocumented inflateResetKeep() function for CAB file decoding
+- Add --cover option to ./configure for gcc coverage testing
+- Add #define ZLIB_CONST option to use const in the z_stream interface
+- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
+- Note behavior of uncompress() to provide as much data as it can
+- Add files in contrib/minizip to aid in building libminizip
+- Split off AR options in Makefile.in and configure
+- Change ON macro to Z_ARG to avoid application conflicts
+- Facilitate compilation with Borland C++ for pragmas and vsnprintf
+- Include io.h for Turbo C / Borland C++
+- Move example.c and minigzip.c to test/
+- Simplify incomplete code table filling in inflate_table()
+- Remove code from inflate.c and infback.c that is impossible to execute
+- Test the inflate code with full coverage
+- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
+- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
+- Fix gzwrite.c to accommodate reduced memory zlib compilation
+- Have inflate() with Z_FINISH avoid the allocation of a window
+- Do not set strm->adler when doing raw inflate
+- Fix gzeof() to behave just like feof() when read is not past end of file
+- Fix bug in gzread.c when end-of-file is reached
+- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
+- Document gzread() capability to read concurrently written files
+- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]
+
+Changes in 1.2.5.1 (10 Sep 2011)
+- Update FAQ entry on shared builds (#13)
+- Avoid symbolic argument to chmod in Makefile.in
+- Fix bug and add consts in contrib/puff [Oberhumer]
+- Update contrib/puff/zeros.raw test file to have all block types
+- Add full coverage test for puff in contrib/puff/Makefile
+- Fix static-only-build install in Makefile.in
+- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno]
+- Add libz.a dependency to shared in Makefile.in for parallel builds
+- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
+- Replace $(...) with `...` in configure for non-bash sh [Bowler]
+- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen]
+- Add solaris* to Linux* in configure to allow gcc use [Groffen]
+- Add *bsd* to Linux* case in configure [Bar-Lev]
+- Add inffast.obj to dependencies in win32/Makefile.msc
+- Correct spelling error in deflate.h [Kohler]
+- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc
+- Add test to configure for GNU C looking for gcc in output of $cc -v
+- Add zlib.pc generation to win32/Makefile.gcc [Weigelt]
+- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
+- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
+- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
+- Make stronger test in zconf.h to include unistd.h for LFS
+- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack]
+- Fix zlib.h LFS support when Z_PREFIX used
+- Add updated as400 support (removed from old) [Monnerat]
+- Avoid deflate sensitivity to volatile input data
+- Avoid division in adler32_combine for NO_DIVIDE
+- Clarify the use of Z_FINISH with deflateBound() amount of space
+- Set binary for output file in puff.c
+- Use u4 type for crc_table to avoid conversion warnings
+- Apply casts in zlib.h to avoid conversion warnings
+- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
+- Improve inflateSync() documentation to note indeterminancy
+- Add deflatePending() function to return the amount of pending output
+- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
+- Add a check in configure for stdarg.h, use for gzprintf()
+- Check that pointers fit in ints when gzprint() compiled old style
+- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
+- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
+- Add debug records in assmebler code [Londer]
+- Update RFC references to use http://tools.ietf.org/html/... [Li]
+- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
+
 Changes in 1.2.5 (19 Apr 2010)
 - Disable visibility attribute in win32/Makefile.gcc [Bar-Lev]
 - Default to libdir as sharedlibdir in configure [Nieder]
 - Update copyright dates on modified source files
 - Update trees.c to be able to generate modified trees.h
 - Exit configure for MinGW, suggesting win32/Makefile.gcc
+- Check for NULL path in gz_open [Homurlu]
 
 Changes in 1.2.4.5 (18 Apr 2010)
 - Set sharedlibdir in configure [Torok]
@@ -261,7 +525,7 @@ Changes in 1.2.3.4 (21 Dec 2009)
 - 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]
+- Correct spelling errors in zlib.h [Willem, Sobrado]
 - 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
index 1a22750..99b7cf9 100644 (file)
--- a/zlib/FAQ
+++ b/zlib/FAQ
@@ -44,8 +44,8 @@ The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
 
  6. Where's the zlib documentation (man pages, etc.)?
 
-    It's in zlib.h .  Examples of zlib usage are in the files example.c and
-    minigzip.c, with more in examples/ .
+    It's in zlib.h .  Examples of zlib usage are in the files test/example.c
+    and test/minigzip.c, with more in examples/ .
 
  7. Why don't you use GNU autoconf or libtool or ...?
 
@@ -84,8 +84,10 @@ The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
 
 13. How can I make a Unix shared library?
 
-    make clean
-    ./configure -s
+    By default a shared (and a static) library is built for Unix.  So:
+
+    make distclean
+    ./configure
     make
 
 14. How do I install a shared zlib library on Unix?
@@ -325,7 +327,7 @@ The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
     correctly points to the zlib specification in RFC 1950 for the "deflate"
     transfer encoding, there have been reports of servers and browsers that
     incorrectly produce or expect raw deflate data per the deflate
-    specficiation in RFC 1951, most notably Microsoft.  So even though the
+    specification in RFC 1951, most notably Microsoft.  So even though the
     "deflate" transfer encoding using the zlib format would be the more
     efficient approach (and in fact exactly what the zlib format was designed
     for), using the "gzip" transfer encoding is probably more reliable due to
index f6c51ca..2ba0641 100644 (file)
@@ -7,6 +7,9 @@ Makefile.in     template for Unix Makefile
 README          guess what
 configure       configure script for Unix
 make_vms.com    makefile for VMS
+test/example.c  zlib usages examples for build testing
+test/minigzip.c minimal gzip-like functionality for build testing
+test/infcover.c inf*.c code coverage for build coverage testing
 treebuild.xml   XML description of source file dependencies
 zconf.h.cmakein zconf.h template for cmake
 zconf.h.in      zconf.h template for configure
@@ -14,9 +17,11 @@ zlib.3          Man page for zlib
 zlib.3.pdf      Man page in PDF format
 zlib.map        Linux symbol information
 zlib.pc.in      Template for pkg-config descriptor
+zlib.pc.cmakein zlib.pc template for cmake
 zlib2ansi       perl script to convert source files for C++ compilation
 
 amiga/          makefiles for Amiga SAS C
+as400/          makefiles for AS/400
 doc/            documentation for formats and algorithms
 msdos/          makefiles for MSDOS
 nintendods/     makefile for Nintendo DS
@@ -56,10 +61,8 @@ uncompr.c
 zutil.c
 zutil.h
 
-                source files for sample programs:
-example.c
-minigzip.c
-See examples/README.examples for more
+                source files for sample programs
+See examples/README.examples
 
-                unsupported contribution by third parties
+                unsupported contributions by third parties
 See contrib/README.contrib
index bb7ad2c..6bba86c 100644 (file)
@@ -1,257 +1,5 @@
-# Makefile for zlib
-# Copyright (C) 1995-2010 Jean-loup Gailly.
-# For conditions of distribution and use, see copyright notice in zlib.h
+all:
+       -@echo "Please use ./configure first.  Thank you."
 
-# To compile and test, type:
-#    ./configure; make test
-# Normally configure builds both a static and a shared library.
-# If you want to build just a static library, use: ./configure --static
-
-# To use the asm code, type:
-#    cp contrib/asm?86/match.S ./match.S
-#    make LOC=-DASMV OBJA=match.o
-
-# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
-#    make install
-# To install in $HOME instead of /usr/local, use:
-#    make install prefix=$HOME
-
-CC=gcc
-
-CFLAGS=-O3
-#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
-#CFLAGS=-g -DDEBUG
-#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-#           -Wstrict-prototypes -Wmissing-prototypes
-
-SFLAGS=-O3 -fPIC
-LDFLAGS= -L. libz.a
-TEST_LDFLAGS=-L. libz.a
-LDSHARED=gcc -dynamiclib -install_name ${exec_prefix}/lib/libz.1.dylib -compatibility_version 1 -current_version 1.2.5
-CPP=gcc -E
-
-STATICLIB=libz.a
-SHAREDLIB=libz.dylib
-SHAREDLIBV=libz.1.2.5.dylib
-SHAREDLIBM=libz.1.dylib
-LIBS=$(STATICLIB) $(SHAREDLIBV)
-
-AR=ar rc
-RANLIB=ranlib
-LDCONFIG=ldconfig
-LDSHAREDLIBC=-lc
-TAR=tar
-SHELL=/bin/sh
-EXE=
-
-prefix =/usr/local
-exec_prefix =${prefix}
-libdir =${exec_prefix}/lib
-sharedlibdir =${libdir}
-includedir =${prefix}/include
-mandir =${prefix}/share/man
-man3dir = ${mandir}/man3
-pkgconfigdir = ${libdir}/pkgconfig
-
-OBJC = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.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 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 =
-PIC_OBJA =
-
-OBJS = $(OBJC) $(OBJA)
-
-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
-
-test: all teststatic testshared
-
-teststatic: static
-       @if echo hello world | ./minigzip | ./minigzip -d && ./example; then \
-         echo '                *** zlib test OK ***'; \
-       else \
-         echo '                *** zlib test FAILED ***'; false; \
-       fi
-       -@rm -f foo.gz
-
-testshared: shared
-       @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; \
-       if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh; then \
-         echo '                *** zlib shared test OK ***'; \
-       else \
-         echo '                *** zlib shared test FAILED ***'; false; \
-       fi
-       -@rm -f foo.gz
-
-test64: all64
-       @if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64; then \
-         echo '                *** zlib 64-bit test OK ***'; \
-       else \
-         echo '                *** zlib 64-bit test FAILED ***'; false; \
-       fi
-       -@rm -f foo.gz
-
-libz.a: $(OBJS)
-       $(AR) $@ $(OBJS)
-       -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
-
-match.o: match.S
-       $(CPP) match.S > _match.s
-       $(CC) -c _match.s
-       mv _match.o match.o
-       rm -f _match.s
-
-match.lo: match.S
-       $(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
-       $(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ example.c
-
-minigzip64.o: minigzip.c zlib.h zconf.h
-       $(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ minigzip.c
-
-.SUFFIXES: .lo
-
-.c.lo:
-       -@mkdir objs 2>/dev/null || test -d objs
-       $(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
-       -@mv objs/$*.o $@
-
-$(SHAREDLIBV): $(PIC_OBJS)
-       $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
-       rm -f $(SHAREDLIB) $(SHAREDLIBM)
-       ln -s $@ $(SHAREDLIB)
-       ln -s $@ $(SHAREDLIBM)
-       -@rmdir objs
-
-example$(EXE): example.o $(STATICLIB)
-       $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS)
-
-minigzip$(EXE): minigzip.o $(STATICLIB)
-       $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
-
-examplesh$(EXE): example.o $(SHAREDLIBV)
-       $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
-
-minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
-       $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
-
-example64$(EXE): example64.o $(STATICLIB)
-       $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
-
-minigzip64$(EXE): minigzip64.o $(STATICLIB)
-       $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_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)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
-       -@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi
-       -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
-       cp $(STATICLIB) $(DESTDIR)$(libdir)
-       cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)
-       cd $(DESTDIR)$(libdir); chmod u=rw,go=r $(STATICLIB)
-       -@(cd $(DESTDIR)$(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1
-       -@cd $(DESTDIR)$(sharedlibdir); if test "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
-         chmod 755 $(SHAREDLIBV); \
-         rm -f $(SHAREDLIB) $(SHAREDLIBM); \
-         ln -s $(SHAREDLIBV) $(SHAREDLIB); \
-         ln -s $(SHAREDLIBV) $(SHAREDLIBM); \
-         ($(LDCONFIG) || true)  >/dev/null 2>&1; \
-       fi
-       cp zlib.3 $(DESTDIR)$(man3dir)
-       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
-# ldconfig is for Linux
-
-install: install-libs
-       -@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi
-       cp zlib.h zconf.h $(DESTDIR)$(includedir)
-       chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
-
-uninstall:
-       cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h
-       cd $(DESTDIR)$(libdir); rm -f libz.a; \
-       if test "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
-         rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
-       fi
-       cd $(DESTDIR)$(man3dir); rm -f zlib.3
-       cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc
-
-docs: zlib.3.pdf
-
-zlib.3.pdf: zlib.3
-       groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
-
-zconf.h.in: zconf.h.cmakein
-       sed "/^#cmakedefine/D" < zconf.h.cmakein > zconf.h.in
-       touch -r zconf.h.cmakein zconf.h.in
-
-zconf: zconf.h.in
-       cp -p zconf.h.in zconf.h
-
-mostlyclean: clean
-clean:
-       rm -f *.o *.lo *~ \
-          example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
-          example64$(EXE) minigzip64$(EXE) \
-          libz.* foo.gz so_locations \
-          _match.s maketree contrib/infback9/*.o
-       rm -rf objs
-
-maintainer-clean: distclean
-distclean: clean zconf docs
-       rm -f Makefile zlib.pc
-       -@rm -f .DS_Store
-       -@printf 'all:\n\t-@echo "Please use ./configure first.  Thank you."\n' > Makefile
-       -@printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile
-       -@touch -r Makefile.in Makefile
-
-tags:
-       etags *.[ch]
-
-depend:
-       makedepend -- $(CFLAGS) -- *.[ch]
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-adler32.o zutil.o: zutil.h zlib.h zconf.h
-gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h
-compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h
-crc32.o: zutil.h zlib.h zconf.h crc32.h
-deflate.o: deflate.h zutil.h zlib.h zconf.h
-infback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
-inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-inftrees.o: zutil.h zlib.h zconf.h inftrees.h
-trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
-
-adler32.lo zutil.lo: zutil.h zlib.h zconf.h
-gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h
-compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h
-crc32.lo: zutil.h zlib.h zconf.h crc32.h
-deflate.lo: deflate.h zutil.h zlib.h zconf.h
-infback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
-inffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-inftrees.lo: zutil.h zlib.h zconf.h inftrees.h
-trees.lo: deflate.h zutil.h zlib.h zconf.h trees.h
+distclean:
+       make -f Makefile.in distclean
index 5b15bd0..c61aa30 100644 (file)
@@ -1,5 +1,5 @@
 # Makefile for zlib
-# Copyright (C) 1995-2010 Jean-loup Gailly.
+# Copyright (C) 1995-2013 Jean-loup Gailly, Mark Adler
 # For conditions of distribution and use, see copyright notice in zlib.h
 
 # To compile and test, type:
@@ -32,11 +32,12 @@ CPP=$(CC) -E
 
 STATICLIB=libz.a
 SHAREDLIB=libz.so
-SHAREDLIBV=libz.so.1.2.5
+SHAREDLIBV=libz.so.1.2.8
 SHAREDLIBM=libz.so.1
 LIBS=$(STATICLIB) $(SHAREDLIBV)
 
-AR=ar rc
+AR=ar
+ARFLAGS=rc
 RANLIB=ranlib
 LDCONFIG=ldconfig
 LDSHAREDLIBC=-lc
@@ -53,11 +54,13 @@ mandir = ${prefix}/share/man
 man3dir = ${mandir}/man3
 pkgconfigdir = ${libdir}/pkgconfig
 
-OBJC = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \
-       gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
+OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
+OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
+OBJC = $(OBJZ) $(OBJG)
 
-PIC_OBJC = adler32.lo compress.lo crc32.lo deflate.lo gzclose.lo gzlib.lo gzread.lo \
-       gzwrite.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo
+PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo
+PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
+PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
 
 # to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo
 OBJA =
@@ -80,35 +83,49 @@ check: test
 test: all teststatic testshared
 
 teststatic: static
-       @if echo hello world | ./minigzip | ./minigzip -d && ./example; then \
+       @TMPST=tmpst_$$; \
+       if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
          echo '                *** zlib test OK ***'; \
        else \
          echo '                *** zlib test FAILED ***'; false; \
-       fi
-       -@rm -f foo.gz
+       fi; \
+       rm -f $$TMPST
 
 testshared: shared
        @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; \
-       if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh; then \
+       TMPSH=tmpsh_$$; \
+       if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
          echo '                *** zlib shared test OK ***'; \
        else \
          echo '                *** zlib shared test FAILED ***'; false; \
-       fi
-       -@rm -f foo.gz
+       fi; \
+       rm -f $$TMPSH
 
 test64: all64
-       @if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64; then \
+       @TMP64=tmp64_$$; \
+       if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
          echo '                *** zlib 64-bit test OK ***'; \
        else \
          echo '                *** zlib 64-bit test FAILED ***'; false; \
-       fi
-       -@rm -f foo.gz
+       fi; \
+       rm -f $$TMP64
+
+infcover.o: test/infcover.c zlib.h zconf.h
+       $(CC) $(CFLAGS) -I. -c -o $@ test/infcover.c
+
+infcover: infcover.o libz.a
+       $(CC) $(CFLAGS) -o $@ infcover.o libz.a
+
+cover: infcover
+       rm -f *.gcda
+       ./infcover
+       gcov inf*.c
 
 libz.a: $(OBJS)
-       $(AR) $@ $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
        -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
 
 match.o: match.S
@@ -123,11 +140,17 @@ match.lo: match.S
        mv _match.o match.lo
        rm -f _match.s
 
-example64.o: example.c zlib.h zconf.h
-       $(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ example.c
+example.o: test/example.c zlib.h zconf.h
+       $(CC) $(CFLAGS) -I. -c -o $@ test/example.c
+
+minigzip.o: test/minigzip.c zlib.h zconf.h
+       $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c
+
+example64.o: test/example.c zlib.h zconf.h
+       $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/example.c
 
-minigzip64.o: minigzip.c zlib.h zconf.h
-       $(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ minigzip.c
+minigzip64.o: test/minigzip.c zlib.h zconf.h
+       $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/minigzip.c
 
 .SUFFIXES: .lo
 
@@ -136,7 +159,7 @@ minigzip64.o: minigzip.c zlib.h zconf.h
        $(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
        -@mv objs/$*.o $@
 
-$(SHAREDLIBV): $(PIC_OBJS)
+placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
        $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
        rm -f $(SHAREDLIB) $(SHAREDLIBM)
        ln -s $@ $(SHAREDLIB)
@@ -168,14 +191,16 @@ install-libs: $(LIBS)
        -@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi
        -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
        cp $(STATICLIB) $(DESTDIR)$(libdir)
-       cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)
-       cd $(DESTDIR)$(libdir); chmod u=rw,go=r $(STATICLIB)
-       -@(cd $(DESTDIR)$(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1
-       -@cd $(DESTDIR)$(sharedlibdir); if test "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
-         chmod 755 $(SHAREDLIBV); \
-         rm -f $(SHAREDLIB) $(SHAREDLIBM); \
-         ln -s $(SHAREDLIBV) $(SHAREDLIB); \
-         ln -s $(SHAREDLIBV) $(SHAREDLIBM); \
+       chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
+       -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
+       -@if test -n "$(SHAREDLIBV)"; then \
+         cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \
+         echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \
+         chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
+         echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \
+         rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
+         ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \
+         ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
          ($(LDCONFIG) || true)  >/dev/null 2>&1; \
        fi
        cp zlib.3 $(DESTDIR)$(man3dir)
@@ -191,22 +216,25 @@ install: install-libs
        chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
 
 uninstall:
-       cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h
-       cd $(DESTDIR)$(libdir); rm -f libz.a; \
-       if test "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
+       cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h
+       cd $(DESTDIR)$(libdir) && rm -f libz.a; \
+       if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
          rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
        fi
-       cd $(DESTDIR)$(man3dir); rm -f zlib.3
-       cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc
+       cd $(DESTDIR)$(man3dir) && rm -f zlib.3
+       cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc
 
 docs: zlib.3.pdf
 
 zlib.3.pdf: zlib.3
        groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
 
-zconf.h.in: zconf.h.cmakein
-       sed "/^#cmakedefine/D" < zconf.h.cmakein > zconf.h.in
-       touch -r zconf.h.cmakein zconf.h.in
+zconf.h.cmakein: zconf.h.in
+       -@ TEMPFILE=zconfh_$$; \
+       echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\
+       sed -f $$TEMPFILE zconf.h.in > zconf.h.cmakein &&\
+       touch -r zconf.h.in zconf.h.cmakein &&\
+       rm $$TEMPFILE
 
 zconf: zconf.h.in
        cp -p zconf.h.in zconf.h
@@ -216,13 +244,16 @@ clean:
        rm -f *.o *.lo *~ \
           example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
           example64$(EXE) minigzip64$(EXE) \
+          infcover \
           libz.* foo.gz so_locations \
           _match.s maketree contrib/infback9/*.o
        rm -rf objs
+       rm -f *.gcda *.gcno *.gcov
+       rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
 
 maintainer-clean: distclean
-distclean: clean zconf docs
-       rm -f Makefile zlib.pc
+distclean: clean zconf zconf.h.cmakein docs
+       rm -f Makefile zlib.pc configure.log
        -@rm -f .DS_Store
        -@printf 'all:\n\t-@echo "Please use ./configure first.  Thank you."\n' > Makefile
        -@printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile
index d4219bf..5ca9d12 100644 (file)
@@ -1,22 +1,22 @@
 ZLIB DATA COMPRESSION LIBRARY
 
-zlib 1.2.5 is a general purpose data compression library.  All the code is
+zlib 1.2.8 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
 (Request for Comments) 1950 to 1952 in the files
-http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
-and rfc1952.txt (gzip format).
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
 
 All functions of the compression library are documented in the file zlib.h
 (volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
-of the library is given in the file example.c which also tests that the library
-is working correctly.  Another example is given in the file minigzip.c.  The
-compression library itself is composed of all source files except example.c and
-minigzip.c.
+of the library is given in the file test/example.c which also tests that
+the library is working correctly.  Another example is given in the file
+test/minigzip.c.  The compression library itself is composed of all source
+files in the root directory.
 
 To compile all files and run the test program, follow the instructions given at
 the top of Makefile.in.  In short "./configure; make test", and if that goes
-well, "make install" should work for most flavors of Unix.  For Windows, use one
-of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
+well, "make install" should work for most flavors of Unix.  For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
 make_vms.com.
 
 Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
@@ -31,7 +31,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 at
 http://marknelson.us/1997/01/01/zlib-engine/ .
 
-The changes made in version 1.2.5 are documented in the file ChangeLog.
+The changes made in version 1.2.8 are documented in the file ChangeLog.
 
 Unsupported third party contributions are provided in directory contrib/ .
 
@@ -44,7 +44,7 @@ http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
 
 A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
 available in Python 1.5 and later versions, see
-http://www.python.org/doc/lib/module-zlib.html .
+http://docs.python.org/library/zlib.html .
 
 zlib is built into tcl: http://wiki.tcl.tk/4610 .
 
@@ -84,7 +84,7 @@ Acknowledgments:
 
 Copyright notice:
 
- (C) 1995-2010 Jean-loup Gailly and Mark Adler
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
index 65ad6a5..a868f07 100644 (file)
@@ -1,5 +1,5 @@
 /* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2007 Mark Adler
+ * Copyright (C) 1995-2011 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,9 +9,9 @@
 
 #define local static
 
-local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
 
-#define BASE 65521UL    /* largest prime smaller than 65536 */
+#define BASE 65521      /* largest prime smaller than 65536 */
 #define NMAX 5552
 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
 
@@ -21,39 +21,44 @@ local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2);
 #define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
 #define DO16(buf)   DO8(buf,0); DO8(buf,8);
 
-/* use NO_DIVIDE if your processor does not do division in hardware */
+/* use NO_DIVIDE if your processor does not do division in hardware --
+   try it both ways to see which is faster */
 #ifdef NO_DIVIDE
-#  define MOD(a) \
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+   (thank you to John Reiser for pointing this out) */
+#  define CHOP(a) \
+    do { \
+        unsigned long tmp = a >> 16; \
+        a &= 0xffffUL; \
+        a += (tmp << 4) - tmp; \
+    } while (0)
+#  define MOD28(a) \
     do { \
-        if (a >= (BASE << 16)) a -= (BASE << 16); \
-        if (a >= (BASE << 15)) a -= (BASE << 15); \
-        if (a >= (BASE << 14)) a -= (BASE << 14); \
-        if (a >= (BASE << 13)) a -= (BASE << 13); \
-        if (a >= (BASE << 12)) a -= (BASE << 12); \
-        if (a >= (BASE << 11)) a -= (BASE << 11); \
-        if (a >= (BASE << 10)) a -= (BASE << 10); \
-        if (a >= (BASE << 9)) a -= (BASE << 9); \
-        if (a >= (BASE << 8)) a -= (BASE << 8); \
-        if (a >= (BASE << 7)) a -= (BASE << 7); \
-        if (a >= (BASE << 6)) a -= (BASE << 6); \
-        if (a >= (BASE << 5)) a -= (BASE << 5); \
-        if (a >= (BASE << 4)) a -= (BASE << 4); \
-        if (a >= (BASE << 3)) a -= (BASE << 3); \
-        if (a >= (BASE << 2)) a -= (BASE << 2); \
-        if (a >= (BASE << 1)) a -= (BASE << 1); \
+        CHOP(a); \
         if (a >= BASE) a -= BASE; \
     } while (0)
-#  define MOD4(a) \
+#  define MOD(a) \
     do { \
-        if (a >= (BASE << 4)) a -= (BASE << 4); \
-        if (a >= (BASE << 3)) a -= (BASE << 3); \
-        if (a >= (BASE << 2)) a -= (BASE << 2); \
-        if (a >= (BASE << 1)) a -= (BASE << 1); \
+        CHOP(a); \
+        MOD28(a); \
+    } while (0)
+#  define MOD63(a) \
+    do { /* this assumes a is not negative */ \
+        z_off64_t tmp = a >> 32; \
+        a &= 0xffffffffL; \
+        a += (tmp << 8) - (tmp << 5) + tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
         if (a >= BASE) a -= BASE; \
     } while (0)
 #else
 #  define MOD(a) a %= BASE
-#  define MOD4(a) a %= BASE
+#  define MOD28(a) a %= BASE
+#  define MOD63(a) a %= BASE
 #endif
 
 /* ========================================================================= */
@@ -92,7 +97,7 @@ uLong ZEXPORT adler32(adler, buf, len)
         }
         if (adler >= BASE)
             adler -= BASE;
-        MOD4(sum2);             /* only added so many BASE's */
+        MOD28(sum2);            /* only added so many BASE's */
         return adler | (sum2 << 16);
     }
 
@@ -137,8 +142,13 @@ local uLong adler32_combine_(adler1, adler2, len2)
     unsigned long sum2;
     unsigned rem;
 
+    /* for negative len, return invalid adler32 as a clue for debugging */
+    if (len2 < 0)
+        return 0xffffffffUL;
+
     /* the derivation of this formula is left as an exercise for the reader */
-    rem = (unsigned)(len2 % BASE);
+    MOD63(len2);                /* assumes len2 >= 0 */
+    rem = (unsigned)len2;
     sum1 = adler1 & 0xffff;
     sum2 = rem * sum1;
     MOD(sum2);
diff --git a/zlib/as400/bndsrc b/zlib/as400/bndsrc
new file mode 100644 (file)
index 0000000..98814fd
--- /dev/null
@@ -0,0 +1,215 @@
+STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB')
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/*   Version 1.1.3 entry points.                                    */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/*   *MODULE      ADLER32      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("adler32")
+
+/********************************************************************/
+/*   *MODULE      COMPRESS     ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("compress")
+  EXPORT SYMBOL("compress2")
+
+/********************************************************************/
+/*   *MODULE      CRC32        ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("crc32")
+  EXPORT SYMBOL("get_crc_table")
+
+/********************************************************************/
+/*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("deflate")
+  EXPORT SYMBOL("deflateEnd")
+  EXPORT SYMBOL("deflateSetDictionary")
+  EXPORT SYMBOL("deflateCopy")
+  EXPORT SYMBOL("deflateReset")
+  EXPORT SYMBOL("deflateParams")
+  EXPORT SYMBOL("deflatePrime")
+  EXPORT SYMBOL("deflateInit_")
+  EXPORT SYMBOL("deflateInit2_")
+
+/********************************************************************/
+/*   *MODULE      GZIO         ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("gzopen")
+  EXPORT SYMBOL("gzdopen")
+  EXPORT SYMBOL("gzsetparams")
+  EXPORT SYMBOL("gzread")
+  EXPORT SYMBOL("gzwrite")
+  EXPORT SYMBOL("gzprintf")
+  EXPORT SYMBOL("gzputs")
+  EXPORT SYMBOL("gzgets")
+  EXPORT SYMBOL("gzputc")
+  EXPORT SYMBOL("gzgetc")
+  EXPORT SYMBOL("gzflush")
+  EXPORT SYMBOL("gzseek")
+  EXPORT SYMBOL("gzrewind")
+  EXPORT SYMBOL("gztell")
+  EXPORT SYMBOL("gzeof")
+  EXPORT SYMBOL("gzclose")
+  EXPORT SYMBOL("gzerror")
+
+/********************************************************************/
+/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("inflate")
+  EXPORT SYMBOL("inflateEnd")
+  EXPORT SYMBOL("inflateSetDictionary")
+  EXPORT SYMBOL("inflateSync")
+  EXPORT SYMBOL("inflateReset")
+  EXPORT SYMBOL("inflateInit_")
+  EXPORT SYMBOL("inflateInit2_")
+  EXPORT SYMBOL("inflateSyncPoint")
+
+/********************************************************************/
+/*   *MODULE      UNCOMPR      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("uncompress")
+
+/********************************************************************/
+/*   *MODULE      ZUTIL        ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("zlibVersion")
+  EXPORT SYMBOL("zError")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/*   Version 1.2.1 additional entry points.                         */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/*   *MODULE      COMPRESS     ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("compressBound")
+
+/********************************************************************/
+/*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("deflateBound")
+
+/********************************************************************/
+/*   *MODULE      GZIO         ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("gzungetc")
+  EXPORT SYMBOL("gzclearerr")
+
+/********************************************************************/
+/*   *MODULE      INFBACK      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("inflateBack")
+  EXPORT SYMBOL("inflateBackEnd")
+  EXPORT SYMBOL("inflateBackInit_")
+
+/********************************************************************/
+/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("inflateCopy")
+
+/********************************************************************/
+/*   *MODULE      ZUTIL        ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("zlibCompileFlags")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/*   Version 1.2.5 additional entry points.                         */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/*   *MODULE      ADLER32      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("adler32_combine")
+  EXPORT SYMBOL("adler32_combine64")
+
+/********************************************************************/
+/*   *MODULE      CRC32        ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("crc32_combine")
+  EXPORT SYMBOL("crc32_combine64")
+
+/********************************************************************/
+/*   *MODULE      GZLIB        ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("gzbuffer")
+  EXPORT SYMBOL("gzoffset")
+  EXPORT SYMBOL("gzoffset64")
+  EXPORT SYMBOL("gzopen64")
+  EXPORT SYMBOL("gzseek64")
+  EXPORT SYMBOL("gztell64")
+
+/********************************************************************/
+/*   *MODULE      GZREAD       ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("gzclose_r")
+
+/********************************************************************/
+/*   *MODULE      GZWRITE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("gzclose_w")
+
+/********************************************************************/
+/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("inflateMark")
+  EXPORT SYMBOL("inflatePrime")
+  EXPORT SYMBOL("inflateReset2")
+  EXPORT SYMBOL("inflateUndermine")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/*   Version 1.2.6 additional entry points.                         */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/*   *MODULE      DEFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("deflateResetKeep")
+  EXPORT SYMBOL("deflatePending")
+
+/********************************************************************/
+/*   *MODULE      GZWRITE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("gzgetc_")
+
+/********************************************************************/
+/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("inflateResetKeep")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/*   Version 1.2.8 additional entry points.                         */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/*   *MODULE      INFLATE      ZLIB         01/02/01  00:15:09      */
+/********************************************************************/
+
+  EXPORT SYMBOL("inflateGetDictionary")
+
+ENDPGMEXP
diff --git a/zlib/as400/compile.clp b/zlib/as400/compile.clp
new file mode 100644 (file)
index 0000000..e3f47c6
--- /dev/null
@@ -0,0 +1,110 @@
+/******************************************************************************/
+/*                                                                            */
+/*  ZLIB                                                                      */
+/*                                                                            */
+/*    Compile sources into modules and link them into a service program.      */
+/*                                                                            */
+/******************************************************************************/
+
+             PGM
+
+/*      Configuration adjustable parameters.                                  */
+
+             DCL        VAR(&SRCLIB) TYPE(*CHAR) LEN(10) +
+                          VALUE('ZLIB')                         /* Source library. */
+             DCL        VAR(&SRCFILE) TYPE(*CHAR) LEN(10) +
+                          VALUE('SOURCES')                      /* Source member file. */
+             DCL        VAR(&CTLFILE) TYPE(*CHAR) LEN(10) +
+                          VALUE('TOOLS')                        /* Control member file. */
+
+             DCL        VAR(&MODLIB) TYPE(*CHAR) LEN(10) +
+                          VALUE('ZLIB')                         /* Module library. */
+
+             DCL        VAR(&SRVLIB) TYPE(*CHAR) LEN(10) +
+                          VALUE('LGPL')                         /* Service program library. */
+
+             DCL        VAR(&CFLAGS) TYPE(*CHAR) +
+                          VALUE('OPTIMIZE(40)')                 /* Compile options. */
+
+             DCL        VAR(&TGTRLS) TYPE(*CHAR) +
+                          VALUE('V5R3M0')                       /* Target release. */
+
+
+/*      Working storage.                                                      */
+
+             DCL        VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300)    /* Command length. */
+             DCL        VAR(&CMD) TYPE(*CHAR) LEN(512)
+             DCL        VAR(&FIXDCMD) TYPE(*CHAR) LEN(512)
+
+
+/*      Compile sources into modules.                                         */
+
+             CHGVAR     VAR(&FIXDCMD) VALUE('CRTCMOD' *BCAT &CFLAGS *BCAT      +
+                        'SYSIFCOPT(*IFS64IO)' *BCAT                            +
+                        'DEFINE(''_LARGEFILE64_SOURCE''' *BCAT                 +
+                        '''_LFS64_LARGEFILE=1'') TGTRLS(' *TCAT &TGTRLS *TCAT  +
+                        ') SRCFILE(' *TCAT &SRCLIB *TCAT '/' *TCAT             +
+                        &SRCFILE *TCAT ') MODULE(' *TCAT &MODLIB *TCAT '/')
+
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ADLER32)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'COMPRESS)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'CRC32)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'DEFLATE)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZCLOSE)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZLIB)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZREAD)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZWRITE)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFBACK)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFFAST)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFLATE)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFTREES)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'TREES)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'UNCOMPR)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+             CHGVAR     VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ZUTIL)')
+             CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+
+/*      Link modules into a service program.                                  */
+
+             CRTSRVPGM  SRVPGM(&SRVLIB/ZLIB) +
+                          MODULE(&MODLIB/ADLER32     &MODLIB/COMPRESS    +
+                                 &MODLIB/CRC32       &MODLIB/DEFLATE     +
+                                 &MODLIB/GZCLOSE     &MODLIB/GZLIB       +
+                                 &MODLIB/GZREAD      &MODLIB/GZWRITE     +
+                                 &MODLIB/INFBACK     &MODLIB/INFFAST     +
+                                 &MODLIB/INFLATE     &MODLIB/INFTREES    +
+                                 &MODLIB/TREES       &MODLIB/UNCOMPR     +
+                                 &MODLIB/ZUTIL)                          +
+                          SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC)       +
+                          TEXT('ZLIB 1.2.8') TGTRLS(&TGTRLS)
+
+             ENDPGM
diff --git a/zlib/as400/readme.txt b/zlib/as400/readme.txt
new file mode 100644 (file)
index 0000000..7b5d93b
--- /dev/null
@@ -0,0 +1,115 @@
+        ZLIB version 1.2.8 for AS400 installation instructions
+
+I) From an AS400 *SAVF file:
+
+1)      Unpacking archive to an AS400 save file
+
+On the AS400:
+
+_       Create the ZLIB AS400 library:
+
+        CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library')
+
+_       Create a work save file, for example:
+
+                CRTSAVF FILE(ZLIB/ZLIBSAVF)
+
+On a PC connected to the target AS400:
+
+_       Unpack the save file image to a PC file "ZLIBSAVF"
+_       Upload this file into the save file on the AS400, for example
+                using ftp in BINARY mode.
+
+
+2)      Populating the ZLIB AS400 source library
+
+On the AS400:
+
+_       Extract the saved objects into the ZLIB AS400 library using:
+
+RSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB)
+
+
+3)      Customize installation:
+
+_       Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed,
+                according to the comments.
+
+_       Compile this member with:
+
+        CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE)
+
+
+4)      Compile and generate the service program:
+
+_       This can now be done by executing:
+
+        CALL PGM(ZLIB/COMPILE)
+
+
+
+II) From the original source distribution:
+
+1)      On the AS400, create the source library:
+
+        CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library')
+
+2)      Create the source files:
+
+        CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules')
+        CRTSRCPF FILE(ZLIB/H)       RCDLEN(112) TEXT('ZLIB library includes')
+        CRTSRCPF FILE(ZLIB/TOOLS)   RCDLEN(112) TEXT('ZLIB library control utilities')
+
+3)      From the machine hosting the distribution files, upload them (with
+                FTP in text mode, for example) according to the following table:
+
+    Original    AS400   AS400    AS400 AS400
+    file        file    member   type  description
+                SOURCES                Original ZLIB C subprogram sources
+    adler32.c           ADLER32  C     ZLIB - Compute the Adler-32 checksum of a dta strm
+    compress.c          COMPRESS C     ZLIB - Compress a memory buffer
+    crc32.c             CRC32    C     ZLIB - Compute the CRC-32 of a data stream
+    deflate.c           DEFLATE  C     ZLIB - Compress data using the deflation algorithm
+    gzclose.c           GZCLOSE  C     ZLIB - Close .gz files
+    gzlib.c             GZLIB    C     ZLIB - Miscellaneous .gz files IO support
+    gzread.c            GZREAD   C     ZLIB - Read .gz files
+    gzwrite.c           GZWRITE  C     ZLIB - Write .gz files
+    infback.c           INFBACK  C     ZLIB - Inflate using a callback interface
+    inffast.c           INFFAST  C     ZLIB - Fast proc. literals & length/distance pairs
+    inflate.c           INFLATE  C     ZLIB - Interface to inflate modules
+    inftrees.c          INFTREES C     ZLIB - Generate Huffman trees for efficient decode
+    trees.c             TREES    C     ZLIB - Output deflated data using Huffman coding
+    uncompr.c           UNCOMPR  C     ZLIB - Decompress a memory buffer
+    zutil.c             ZUTIL    C     ZLIB - Target dependent utility functions
+                H                      Original ZLIB C and ILE/RPG include files
+    crc32.h             CRC32    C     ZLIB - CRC32 tables
+    deflate.h           DEFLATE  C     ZLIB - Internal compression state
+    gzguts.h            GZGUTS   C     ZLIB - Definitions for the gzclose module
+    inffast.h           INFFAST  C     ZLIB - Header to use inffast.c
+    inffixed.h          INFFIXED C     ZLIB - Table for decoding fixed codes
+    inflate.h           INFLATE  C     ZLIB - Internal inflate state definitions
+    inftrees.h          INFTREES C     ZLIB - Header to use inftrees.c
+    trees.h             TREES    C     ZLIB - Created automatically with -DGEN_TREES_H
+    zconf.h             ZCONF    C     ZLIB - Compression library configuration
+    zlib.h              ZLIB     C     ZLIB - Compression library C user interface
+    as400/zlib.inc      ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface
+    zutil.h             ZUTIL    C     ZLIB - Internal interface and configuration
+                TOOLS                  Building source software & AS/400 README
+    as400/bndsrc        BNDSRC         Entry point exportation list
+    as400/compile.clp   COMPILE  CLP   Compile sources & generate service program
+    as400/readme.txt    README   TXT   Installation instructions
+
+4)      Continue as in I)3).
+
+
+
+
+Notes:  For AS400 ILE RPG programmers, a /copy member defining the ZLIB
+                API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC).
+                Please read comments in this member for more information.
+
+        Remember that most foreign textual data are ASCII coded: this
+                implementation does not handle conversion from/to ASCII, so
+                text data code conversions must be done explicitely.
+
+        Mainly for the reason above, always open zipped files in binary mode.
diff --git a/zlib/as400/zlib.inc b/zlib/as400/zlib.inc
new file mode 100644 (file)
index 0000000..7341a6d
--- /dev/null
@@ -0,0 +1,451 @@
+      *  ZLIB.INC - Interface to the general purpose compression library
+      *
+      *  ILE RPG400 version by Patrick Monnerat, DATASPHERE.
+      *  Version 1.2.8
+      *
+      *
+      *  WARNING:
+      *     Procedures inflateInit(), inflateInit2(), deflateInit(),
+      *         deflateInit2() and inflateBackInit() need to be called with
+      *         two additional arguments:
+      *         the package version string and the stream control structure.
+      *         size. This is needed because RPG lacks some macro feature.
+      *         Call these procedures as:
+      *             inflateInit(...: ZLIB_VERSION: %size(z_stream))
+      *
+      /if not defined(ZLIB_H_)
+      /define ZLIB_H_
+      *
+      **************************************************************************
+      *                               Constants
+      **************************************************************************
+      *
+      *  Versioning information.
+      *
+     D ZLIB_VERSION    C                   '1.2.8'
+     D ZLIB_VERNUM     C                   X'1280'
+     D ZLIB_VER_MAJOR  C                   1
+     D ZLIB_VER_MINOR  C                   2
+     D ZLIB_VER_REVISION...
+     D                 C                   8
+     D ZLIB_VER_SUBREVISION...
+     D                 C                   0
+      *
+      *  Other equates.
+      *
+     D Z_NO_FLUSH      C                   0
+     D Z_PARTIAL_FLUSH...
+     D                 C                   1
+     D Z_SYNC_FLUSH    C                   2
+     D Z_FULL_FLUSH    C                   3
+     D Z_FINISH        C                   4
+     D Z_BLOCK         C                   5
+     D Z_TREES         C                   6
+      *
+     D Z_OK            C                   0
+     D Z_STREAM_END    C                   1
+     D Z_NEED_DICT     C                   2
+     D Z_ERRNO         C                   -1
+     D Z_STREAM_ERROR  C                   -2
+     D Z_DATA_ERROR    C                   -3
+     D Z_MEM_ERROR     C                   -4
+     D Z_BUF_ERROR     C                   -5
+     DZ_VERSION_ERROR  C                   -6
+      *
+     D Z_NO_COMPRESSION...
+     D                 C                   0
+     D Z_BEST_SPEED    C                   1
+     D Z_BEST_COMPRESSION...
+     D                 C                   9
+     D Z_DEFAULT_COMPRESSION...
+     D                 C                   -1
+      *
+     D Z_FILTERED      C                   1
+     D Z_HUFFMAN_ONLY  C                   2
+     D Z_RLE           C                   3
+     D Z_DEFAULT_STRATEGY...
+     D                 C                   0
+      *
+     D Z_BINARY        C                   0
+     D Z_ASCII         C                   1
+     D Z_UNKNOWN       C                   2
+      *
+     D Z_DEFLATED      C                   8
+      *
+     D Z_NULL          C                   0
+      *
+      **************************************************************************
+      *                                 Types
+      **************************************************************************
+      *
+     D z_streamp       S               *                                        Stream struct ptr
+     D gzFile          S               *                                        File pointer
+     D z_off_t         S             10i 0                                      Stream offsets
+     D z_off64_t       S             20i 0                                      Stream offsets
+      *
+      **************************************************************************
+      *                               Structures
+      **************************************************************************
+      *
+      *  The GZIP encode/decode stream support structure.
+      *
+     D z_stream        DS                  align based(z_streamp)
+     D  zs_next_in                     *                                        Next input byte
+     D  zs_avail_in                  10U 0                                      Byte cnt at next_in
+     D  zs_total_in                  10U 0                                      Total bytes read
+     D  zs_next_out                    *                                        Output buffer ptr
+     D  zs_avail_out                 10U 0                                      Room left @ next_out
+     D  zs_total_out                 10U 0                                      Total bytes written
+     D  zs_msg                         *                                        Last errmsg or null
+     D  zs_state                       *                                        Internal state
+     D  zs_zalloc                      *   procptr                              Int. state allocator
+     D  zs_free                        *   procptr                              Int. state dealloc.
+     D  zs_opaque                      *                                        Private alloc. data
+     D  zs_data_type                 10i 0                                      ASC/BIN best guess
+     D  zs_adler                     10u 0                                      Uncompr. adler32 val
+     D                               10U 0                                      Reserved
+     D                               10U 0                                      Ptr. alignment
+      *
+      **************************************************************************
+      *                     Utility function prototypes
+      **************************************************************************
+      *
+     D compress        PR            10I 0 extproc('compress')
+     D  dest                      65535    options(*varsize)                    Destination buffer
+     D  destLen                      10U 0                                      Destination length
+     D  source                    65535    const options(*varsize)              Source buffer
+     D  sourceLen                    10u 0 value                                Source length
+      *
+     D compress2       PR            10I 0 extproc('compress2')
+     D  dest                      65535    options(*varsize)                    Destination buffer
+     D  destLen                      10U 0                                      Destination length
+     D  source                    65535    const options(*varsize)              Source buffer
+     D  sourceLen                    10U 0 value                                Source length
+     D  level                        10I 0 value                                Compression level
+      *
+     D compressBound   PR            10U 0 extproc('compressBound')
+     D  sourceLen                    10U 0 value
+      *
+     D uncompress      PR            10I 0 extproc('uncompress')
+     D  dest                      65535    options(*varsize)                    Destination buffer
+     D  destLen                      10U 0                                      Destination length
+     D  source                    65535    const options(*varsize)              Source buffer
+     D  sourceLen                    10U 0 value                                Source length
+      *
+      /if not defined(LARGE_FILES)
+     D gzopen          PR                  extproc('gzopen')
+     D                                     like(gzFile)
+     D  path                           *   value options(*string)               File pathname
+     D  mode                           *   value options(*string)               Open mode
+      /else
+     D gzopen          PR                  extproc('gzopen64')
+     D                                     like(gzFile)
+     D  path                           *   value options(*string)               File pathname
+     D  mode                           *   value options(*string)               Open mode
+      *
+     D gzopen64        PR                  extproc('gzopen64')
+     D                                     like(gzFile)
+     D  path                           *   value options(*string)               File pathname
+     D  mode                           *   value options(*string)               Open mode
+      /endif
+      *
+     D gzdopen         PR                  extproc('gzdopen')
+     D                                     like(gzFile)
+     D  fd                           10I 0 value                                File descriptor
+     D  mode                           *   value options(*string)               Open mode
+      *
+     D gzbuffer        PR            10I 0 extproc('gzbuffer')
+     D  file                               value like(gzFile)                   File pointer
+     D  size                         10U 0 value
+      *
+     D gzsetparams     PR            10I 0 extproc('gzsetparams')
+     D  file                               value like(gzFile)                   File pointer
+     D  level                        10I 0 value
+     D  strategy                     10I 0 value
+      *
+     D gzread          PR            10I 0 extproc('gzread')
+     D  file                               value like(gzFile)                   File pointer
+     D  buf                       65535    options(*varsize)                    Buffer
+     D  len                          10u 0 value                                Buffer length
+      *
+     D gzwrite         PR            10I 0 extproc('gzwrite')
+     D  file                               value like(gzFile)                   File pointer
+     D  buf                       65535    const options(*varsize)              Buffer
+     D  len                          10u 0 value                                Buffer length
+      *
+     D gzputs          PR            10I 0 extproc('gzputs')
+     D  file                               value like(gzFile)                   File pointer
+     D  s                              *   value options(*string)               String to output
+      *
+     D gzgets          PR              *   extproc('gzgets')
+     D  file                               value like(gzFile)                   File pointer
+     D  buf                       65535    options(*varsize)                    Read buffer
+     D  len                          10i 0 value                                Buffer length
+      *
+     D gzputc          PR            10i 0 extproc('gzputc')
+     D  file                               value like(gzFile)                   File pointer
+     D  c                            10I 0 value                                Character to write
+      *
+     D gzgetc          PR            10i 0 extproc('gzgetc')
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzgetc_         PR            10i 0 extproc('gzgetc_')
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzungetc        PR            10i 0 extproc('gzungetc')
+     D  c                            10I 0 value                                Character to push
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzflush         PR            10i 0 extproc('gzflush')
+     D  file                               value like(gzFile)                   File pointer
+     D  flush                        10I 0 value                                Type of flush
+      *
+      /if not defined(LARGE_FILES)
+     D gzseek          PR                  extproc('gzseek')
+     D                                     like(z_off_t)
+     D  file                               value like(gzFile)                   File pointer
+     D  offset                             value like(z_off_t)                  Offset
+     D  whence                       10i 0 value                                Origin
+      /else
+     D gzseek          PR                  extproc('gzseek64')
+     D                                     like(z_off_t)
+     D  file                               value like(gzFile)                   File pointer
+     D  offset                             value like(z_off_t)                  Offset
+     D  whence                       10i 0 value                                Origin
+      *
+     D gzseek64        PR                  extproc('gzseek64')
+     D                                     like(z_off64_t)
+     D  file                               value like(gzFile)                   File pointer
+     D  offset                             value like(z_off64_t)                Offset
+     D  whence                       10i 0 value                                Origin
+      /endif
+      *
+     D gzrewind        PR            10i 0 extproc('gzrewind')
+     D  file                               value like(gzFile)                   File pointer
+      *
+      /if not defined(LARGE_FILES)
+     D gztell          PR                  extproc('gztell')
+     D                                     like(z_off_t)
+     D  file                               value like(gzFile)                   File pointer
+      /else
+     D gztell          PR                  extproc('gztell64')
+     D                                     like(z_off_t)
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gztell64        PR                  extproc('gztell64')
+     D                                     like(z_off64_t)
+     D  file                               value like(gzFile)                   File pointer
+      /endif
+      *
+      /if not defined(LARGE_FILES)
+     D gzoffset        PR                  extproc('gzoffset')
+     D                                     like(z_off_t)
+     D  file                               value like(gzFile)                   File pointer
+      /else
+     D gzoffset        PR                  extproc('gzoffset64')
+     D                                     like(z_off_t)
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzoffset64      PR                  extproc('gzoffset64')
+     D                                     like(z_off64_t)
+     D  file                               value like(gzFile)                   File pointer
+      /endif
+      *
+     D gzeof           PR            10i 0 extproc('gzeof')
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzclose_r       PR            10i 0 extproc('gzclose_r')
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzclose_w       PR            10i 0 extproc('gzclose_w')
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzclose         PR            10i 0 extproc('gzclose')
+     D  file                               value like(gzFile)                   File pointer
+      *
+     D gzerror         PR              *   extproc('gzerror')                   Error string
+     D  file                               value like(gzFile)                   File pointer
+     D  errnum                       10I 0                                      Error code
+      *
+     D gzclearerr      PR                  extproc('gzclearerr')
+     D  file                               value like(gzFile)                   File pointer
+      *
+      **************************************************************************
+      *                        Basic function prototypes
+      **************************************************************************
+      *
+     D zlibVersion     PR              *   extproc('zlibVersion')               Version string
+      *
+     D deflateInit     PR            10I 0 extproc('deflateInit_')              Init. compression
+     D  strm                               like(z_stream)                       Compression stream
+     D  level                        10I 0 value                                Compression level
+     D  version                        *   value options(*string)               Version string
+     D  stream_size                  10i 0 value                                Stream struct. size
+      *
+     D deflate         PR            10I 0 extproc('deflate')                   Compress data
+     D  strm                               like(z_stream)                       Compression stream
+     D  flush                        10I 0 value                                Flush type required
+      *
+     D deflateEnd      PR            10I 0 extproc('deflateEnd')                Termin. compression
+     D  strm                               like(z_stream)                       Compression stream
+      *
+     D inflateInit     PR            10I 0 extproc('inflateInit_')              Init. expansion
+     D  strm                               like(z_stream)                       Expansion stream
+     D  version                        *   value options(*string)               Version string
+     D  stream_size                  10i 0 value                                Stream struct. size
+      *
+     D inflate         PR            10I 0 extproc('inflate')                   Expand data
+     D  strm                               like(z_stream)                       Expansion stream
+     D  flush                        10I 0 value                                Flush type required
+      *
+     D inflateEnd      PR            10I 0 extproc('inflateEnd')                Termin. expansion
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+      **************************************************************************
+      *                        Advanced function prototypes
+      **************************************************************************
+      *
+     D deflateInit2    PR            10I 0 extproc('deflateInit2_')             Init. compression
+     D  strm                               like(z_stream)                       Compression stream
+     D  level                        10I 0 value                                Compression level
+     D  method                       10I 0 value                                Compression method
+     D  windowBits                   10I 0 value                                log2(window size)
+     D  memLevel                     10I 0 value                                Mem/cmpress tradeoff
+     D  strategy                     10I 0 value                                Compression stategy
+     D  version                        *   value options(*string)               Version string
+     D  stream_size                  10i 0 value                                Stream struct. size
+      *
+     D deflateSetDictionary...
+     D                 PR            10I 0 extproc('deflateSetDictionary')      Init. dictionary
+     D  strm                               like(z_stream)                       Compression stream
+     D  dictionary                65535    const options(*varsize)              Dictionary bytes
+     D  dictLength                   10U 0 value                                Dictionary length
+      *
+     D deflateCopy     PR            10I 0 extproc('deflateCopy')               Compress strm 2 strm
+     D  dest                               like(z_stream)                       Destination stream
+     D  source                             like(z_stream)                       Source stream
+      *
+     D deflateReset    PR            10I 0 extproc('deflateReset')              End and init. stream
+     D  strm                               like(z_stream)                       Compression stream
+      *
+     D deflateParams   PR            10I 0 extproc('deflateParams')             Change level & strat
+     D  strm                               like(z_stream)                       Compression stream
+     D  level                        10I 0 value                                Compression level
+     D  strategy                     10I 0 value                                Compression stategy
+      *
+     D deflateBound    PR            10U 0 extproc('deflateBound')              Change level & strat
+     D  strm                               like(z_stream)                       Compression stream
+     D  sourcelen                    10U 0 value                                Compression level
+      *
+     D deflatePending  PR            10I 0 extproc('deflatePending')            Change level & strat
+     D  strm                               like(z_stream)                       Compression stream
+     D  pending                      10U 0                                      Pending bytes
+     D  bits                         10I 0                                      Pending bits
+      *
+     D deflatePrime    PR            10I 0 extproc('deflatePrime')              Change level & strat
+     D  strm                               like(z_stream)                       Compression stream
+     D  bits                         10I 0 value                                # of bits to insert
+     D  value                        10I 0 value                                Bits to insert
+      *
+     D inflateInit2    PR            10I 0 extproc('inflateInit2_')             Init. expansion
+     D  strm                               like(z_stream)                       Expansion stream
+     D  windowBits                   10I 0 value                                log2(window size)
+     D  version                        *   value options(*string)               Version string
+     D  stream_size                  10i 0 value                                Stream struct. size
+      *
+     D inflateSetDictionary...
+     D                 PR            10I 0 extproc('inflateSetDictionary')      Init. dictionary
+     D  strm                               like(z_stream)                       Expansion stream
+     D  dictionary                65535    const options(*varsize)              Dictionary bytes
+     D  dictLength                   10U 0 value                                Dictionary length
+      *
+     D inflateGetDictionary...
+     D                 PR            10I 0 extproc('inflateGetDictionary')      Get dictionary
+     D  strm                               like(z_stream)                       Expansion stream
+     D  dictionary                65535    options(*varsize)                    Dictionary bytes
+     D  dictLength                   10U 0                                      Dictionary length
+      *
+     D inflateSync     PR            10I 0 extproc('inflateSync')               Sync. expansion
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+     D inflateCopy     PR            10I 0 extproc('inflateCopy')
+     D  dest                               like(z_stream)                       Destination stream
+     D  source                             like(z_stream)                       Source stream
+      *
+     D inflateReset    PR            10I 0 extproc('inflateReset')              End and init. stream
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+     D inflateReset2   PR            10I 0 extproc('inflateReset2')             End and init. stream
+     D  strm                               like(z_stream)                       Expansion stream
+     D  windowBits                   10I 0 value                                Log2(buffer size)
+      *
+     D inflatePrime    PR            10I 0 extproc('inflatePrime')              Insert bits
+     D  strm                               like(z_stream)                       Expansion stream
+     D  bits                         10I 0 value                                Bit count
+     D  value                        10I 0 value                                Bits to insert
+      *
+     D inflateMark     PR            10I 0 extproc('inflateMark')               Get inflate info
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+     D inflateBackInit...
+     D                 PR            10I 0 extproc('inflateBackInit_')
+     D  strm                               like(z_stream)                       Expansion stream
+     D  windowBits                   10I 0 value                                Log2(buffer size)
+     D  window                    65535    options(*varsize)                    Buffer
+     D  version                        *   value options(*string)               Version string
+     D  stream_size                  10i 0 value                                Stream struct. size
+      *
+     D inflateBack     PR            10I 0 extproc('inflateBack')
+     D  strm                               like(z_stream)                       Expansion stream
+     D  in                             *   value procptr                        Input function
+     D  in_desc                        *   value                                Input descriptor
+     D  out                            *   value procptr                        Output function
+     D  out_desc                       *   value                                Output descriptor
+      *
+     D inflateBackEnd  PR            10I 0 extproc('inflateBackEnd')
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+     D zlibCompileFlags...
+     D                 PR            10U 0 extproc('zlibCompileFlags')
+      *
+      **************************************************************************
+      *                        Checksum function prototypes
+      **************************************************************************
+      *
+     D adler32         PR            10U 0 extproc('adler32')                   New checksum
+     D  adler                        10U 0 value                                Old checksum
+     D  buf                       65535    const options(*varsize)              Bytes to accumulate
+     D  len                          10U 0 value                                Buffer length
+      *
+     D crc32           PR            10U 0 extproc('crc32')                     New checksum
+     D  crc                          10U 0 value                                Old checksum
+     D  buf                       65535    const options(*varsize)              Bytes to accumulate
+     D  len                          10U 0 value                                Buffer length
+      *
+      **************************************************************************
+      *                     Miscellaneous function prototypes
+      **************************************************************************
+      *
+     D zError          PR              *   extproc('zError')                    Error string
+     D  err                          10I 0 value                                Error code
+      *
+     D inflateSyncPoint...
+     D                 PR            10I 0 extproc('inflateSyncPoint')
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+     D get_crc_table   PR              *   extproc('get_crc_table')             Ptr to ulongs
+      *
+     D inflateUndermine...
+     D                 PR            10I 0 extproc('inflateUndermine')
+     D  strm                               like(z_stream)                       Expansion stream
+     D  arg                          10I 0 value                                Error code
+      *
+     D inflateResetKeep...
+     D                 PR            10I 0 extproc('inflateResetKeep')          End and init. stream
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+     D deflateResetKeep...
+     D                 PR            10I 0 extproc('deflateResetKeep')          End and init. stream
+     D  strm                               like(z_stream)                       Expansion stream
+      *
+      /endif
diff --git a/zlib/bin_Win32/zdll.exp b/zlib/bin_Win32/zdll.exp
deleted file mode 100644 (file)
index bb1fdbb..0000000
Binary files a/zlib/bin_Win32/zdll.exp and /dev/null differ
diff --git a/zlib/bin_Win32/zdll.lib b/zlib/bin_Win32/zdll.lib
deleted file mode 100644 (file)
index cd1c083..0000000
Binary files a/zlib/bin_Win32/zdll.lib and /dev/null differ
diff --git a/zlib/bin_Win32/zlib.lib b/zlib/bin_Win32/zlib.lib
deleted file mode 100644 (file)
index 10b75d4..0000000
Binary files a/zlib/bin_Win32/zlib.lib and /dev/null differ
diff --git a/zlib/bin_Win32/zlib.pdb b/zlib/bin_Win32/zlib.pdb
deleted file mode 100644 (file)
index ea18fb1..0000000
Binary files a/zlib/bin_Win32/zlib.pdb and /dev/null differ
diff --git a/zlib/bin_Win32/zlib1.dll b/zlib/bin_Win32/zlib1.dll
deleted file mode 100644 (file)
index 9ceab26..0000000
Binary files a/zlib/bin_Win32/zlib1.dll and /dev/null differ
diff --git a/zlib/bin_Win32/zlib1.dll.manifest b/zlib/bin_Win32/zlib1.dll.manifest
deleted file mode 100644 (file)
index 5b04466..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\r
-<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>\r
-  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">\r
-    <security>\r
-      <requestedPrivileges>\r
-        <requestedExecutionLevel level='asInvoker' uiAccess='false' />\r
-      </requestedPrivileges>\r
-    </security>\r
-  </trustInfo>\r
-  <dependency>\r
-    <dependentAssembly>\r
-      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />\r
-    </dependentAssembly>\r
-  </dependency>\r
-</assembly>\r
diff --git a/zlib/bin_Win32/zlib1.pdb b/zlib/bin_Win32/zlib1.pdb
deleted file mode 100644 (file)
index 11bb3f8..0000000
Binary files a/zlib/bin_Win32/zlib1.pdb and /dev/null differ
diff --git a/zlib/bin_Win32/zlib1.res b/zlib/bin_Win32/zlib1.res
deleted file mode 100644 (file)
index 08444ff..0000000
Binary files a/zlib/bin_Win32/zlib1.res and /dev/null differ
diff --git a/zlib/bin_x64/zdll.lib b/zlib/bin_x64/zdll.lib
deleted file mode 100644 (file)
index 87b038f..0000000
Binary files a/zlib/bin_x64/zdll.lib and /dev/null differ
diff --git a/zlib/bin_x64/zlib.lib b/zlib/bin_x64/zlib.lib
deleted file mode 100644 (file)
index f745c7d..0000000
Binary files a/zlib/bin_x64/zlib.lib and /dev/null differ
diff --git a/zlib/bin_x64/zlib1.dll b/zlib/bin_x64/zlib1.dll
deleted file mode 100644 (file)
index 0809ec2..0000000
Binary files a/zlib/bin_x64/zlib1.dll and /dev/null differ
diff --git a/zlib/bin_x64/zlib1.dll.manifest b/zlib/bin_x64/zlib1.dll.manifest
deleted file mode 100644 (file)
index 8734518..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\r
-<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>\r
-  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">\r
-    <security>\r
-      <requestedPrivileges>\r
-        <requestedExecutionLevel level='asInvoker' uiAccess='false' />\r
-      </requestedPrivileges>\r
-    </security>\r
-  </trustInfo>\r
-  <dependency>\r
-    <dependentAssembly>\r
-      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />\r
-    </dependentAssembly>\r
-  </dependency>\r
-</assembly>\r
diff --git a/zlib/build_x64.bat b/zlib/build_x64.bat
deleted file mode 100644 (file)
index f7f1b1a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-set path=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64;%path%\r
-\r
-rem   pushd "\Program Files (x86)\Microsoft Visual Studio 9.0"\vc\r
-rem   vcvarsall amd64\r
-rem   popd\r
-\r
-\r
-nmake -f win32/Makefile.msc OBJA="inffast.obj"\r
diff --git a/zlib/build_x86.bat b/zlib/build_x86.bat
deleted file mode 100644 (file)
index 1adc95e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-rem   pushd "\Program Files\Microsoft Visual Studio 9.0"\vc\r
-rem   vcvarall\r
-rem   popd\r
-\r
-\r
-nmake -f win32/Makefile.msc OBJA="inffast.obj"\r
diff --git a/zlib/clean.bat b/zlib/clean.bat
deleted file mode 100644 (file)
index 93e982a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-rem   pushd "\Program Files\Microsoft Visual Studio 9.0"\vc\r
-rem   vcvarall\r
-rem   popd\r
-\r
-\r
-nmake -f win32/Makefile.msc clean\r
-\r
index ea4dfbe..6e97626 100644 (file)
@@ -29,7 +29,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
     z_stream stream;
     int err;
 
-    stream.next_in = (Bytef*)source;
+    stream.next_in = (z_const Bytef *)source;
     stream.avail_in = (uInt)sourceLen;
 #ifdef MAXSEG_64K
     /* Check for source > 64K on 16-bit machine: */
index bd9edd2..b77a8a8 100644 (file)
 # If you have problems, try without defining CC and CFLAGS before reporting
 # an error.
 
+# start off configure.log
+echo -------------------- >> configure.log
+echo $0 $* >> configure.log
+date >> configure.log
+
+# set command prefix for cross-compilation
 if [ -n "${CHOST}" ]; then
-    uname="$(echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/')"
+    uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
     CROSS_PREFIX="${CHOST}-"
 fi
 
+# destination name for static library
 STATICLIB=libz.a
-LDFLAGS="${LDFLAGS} -L. ${STATICLIB}"
+
+# extract zlib version numbers from 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`
 VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
+
+# establish commands for library building
 if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then
     AR=${AR-"${CROSS_PREFIX}ar"}
-    test -n "${CROSS_PREFIX}" && echo Using ${AR}
+    test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
 else
     AR=${AR-"ar"}
-    test -n "${CROSS_PREFIX}" && echo Using ${AR}
+    test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
 fi
-AR_RC="${AR} rc"
+ARFLAGS=${ARFLAGS-"rc"}
 if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then
     RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"}
-    test -n "${CROSS_PREFIX}" && echo Using ${RANLIB}
+    test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log
 else
     RANLIB=${RANLIB-"ranlib"}
 fi
 if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then
     NM=${NM-"${CROSS_PREFIX}nm"}
-    test -n "${CROSS_PREFIX}" && echo Using ${NM}
+    test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log
 else
     NM=${NM-"nm"}
 fi
+
+# set defaults before processing command line options
 LDCONFIG=${LDCONFIG-"ldconfig"}
 LDSHAREDLIBC="${LDSHAREDLIBC--lc}"
+ARCHS=
 prefix=${prefix-/usr/local}
 exec_prefix=${exec_prefix-'${prefix}'}
 libdir=${libdir-'${exec_prefix}/lib'}
@@ -54,20 +67,39 @@ includedir=${includedir-'${prefix}/include'}
 mandir=${mandir-'${prefix}/share/man'}
 shared_ext='.so'
 shared=1
+solo=0
+cover=0
 zprefix=0
+zconst=0
 build64=0
 gcc=0
 old_cc="$CC"
 old_cflags="$CFLAGS"
+OBJC='$(OBJZ) $(OBJG)'
+PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
+
+# leave this script, optionally in a bad way
+leave()
+{
+  if test "$*" != "0"; then
+    echo "** $0 aborting." | tee -a configure.log
+  fi
+  rm -f $test.[co] $test $test$shared_ext $test.gcno ./--version
+  echo -------------------- >> configure.log
+  echo >> configure.log
+  echo >> configure.log
+  exit $1
+}
 
+# process command line options
 while test $# -ge 1
 do
 case "$1" in
     -h* | --help)
-      echo 'usage:'
-      echo '  configure [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]'
-      echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]'
-      echo '    [--includedir=INCLUDEDIR]'
+      echo 'usage:' | tee -a configure.log
+      echo '  configure [--const] [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]' | tee -a configure.log
+      echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log
+      echo '    [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log
         exit 0 ;;
     -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;;
     -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;;
@@ -81,51 +113,88 @@ case "$1" in
     -i* | --includedir) includedir="$2"; shift; shift ;;
     -s* | --shared | --enable-shared) shared=1; shift ;;
     -t | --static) shared=0; shift ;;
+    --solo) solo=1; shift ;;
+    --cover) cover=1; shift ;;
     -z* | --zprefix) zprefix=1; shift ;;
     -6* | --64) build64=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 ;;
+    -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;;
+    --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
+    --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
+    -c* | --const) zconst=1; shift ;;
+    *)
+      echo "unknown option: $1" | tee -a configure.log
+      echo "$0 --help for help" | tee -a configure.log
+      leave 1;;
     esac
 done
 
+# temporary file name
 test=ztest$$
+
+# put arguments in log, also put test file in log if used in arguments
+show()
+{
+  case "$*" in
+    *$test.c*)
+      echo === $test.c === >> configure.log
+      cat $test.c >> configure.log
+      echo === >> configure.log;;
+  esac
+  echo $* >> configure.log
+}
+
+# check for gcc vs. cc and set compile and link flags based on the system identified by uname
 cat > $test.c <<EOF
 extern int getchar();
 int hello() {return getchar();}
 EOF
 
-test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc...
+test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
 cc=${CC-${CROSS_PREFIX}gcc}
 cflags=${CFLAGS-"-O3"}
 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
 case "$cc" in
   *gcc*) gcc=1 ;;
+  *clang*) gcc=1 ;;
+esac
+case `$cc -v 2>&1` in
+  *gcc*) gcc=1 ;;
 esac
 
-if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
+show $cc -c $test.c
+if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then
+  echo ... using gcc >> configure.log
   CC="$cc"
+  CFLAGS="${CFLAGS--O3} ${ARCHS}"
   SFLAGS="${CFLAGS--O3} -fPIC"
-  CFLAGS="${CFLAGS--O3}"
+  LDFLAGS="${LDFLAGS} ${ARCHS}"
   if test $build64 -eq 1; then
     CFLAGS="${CFLAGS} -m64"
     SFLAGS="${SFLAGS} -m64"
   fi
   if test "${ZLIBGCCWARN}" = "YES"; then
-    CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
+    if test "$zconst" -eq 1; then
+      CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
+    else
+      CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
+    fi
   fi
   if test -z "$uname"; then
     uname=`(uname -s || echo unknown) 2>/dev/null`
   fi
   case "$uname" in
-  Linux* | linux* | GNU | GNU/* | *BSD | DragonFly) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
+  Linux* | linux* | GNU | GNU/* | solaris*)
+        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
+  *BSD | *bsd* | DragonFly)
+        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"}
+        LDCONFIG="ldconfig -m" ;;
   CYGWIN* | Cygwin* | cygwin* | OS/2*)
         EXE='.exe' ;;
-  MINGW*|mingw*)
+  MINGW* | mingw*)
 # temporary bypass
         rm -f $test.[co] $test $test$shared_ext
-        echo "Please use win32/Makefile.gcc instead."
-        exit 1
+        echo "Please use win32/Makefile.gcc instead." | tee -a configure.log
+        leave 1
         LDSHARED=${LDSHARED-"$cc -shared"}
         LDSHAREDLIBC=""
         EXE='.exe' ;;
@@ -142,17 +211,25 @@ if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
                  shared_ext='.sl'
                  SHAREDLIB='libz.sl' ;;
          esac ;;
-  Darwin*)   shared_ext='.dylib'
+  Darwin* | darwin*)
+             shared_ext='.dylib'
              SHAREDLIB=libz$shared_ext
              SHAREDLIBV=libz.$VER$shared_ext
              SHAREDLIBM=libz.$VER1$shared_ext
-             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} ;;
+             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"}
+             if libtool -V 2>&1 | grep Apple > /dev/null; then
+                 AR="libtool"
+             else
+                 AR="/usr/bin/libtool"
+             fi
+             ARFLAGS="-o" ;;
   *)             LDSHARED=${LDSHARED-"$cc -shared"} ;;
   esac
 else
   # find system name and corresponding cc options
   CC=${CC-cc}
   gcc=0
+  echo ... using $CC >> configure.log
   if test -z "$uname"; then
     uname=`(uname -sr || echo unknown) 2>/dev/null`
   fi
@@ -183,19 +260,34 @@ else
              CFLAGS=${CFLAGS-"-4 -O"}
              LDSHARED=${LDSHARED-"cc"}
              RANLIB=${RANLIB-"true"}
-             AR_RC="cc -A" ;;
+             AR="cc"
+             ARFLAGS="-A" ;;
   SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
              CFLAGS=${CFLAGS-"-O3"}
              LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;;
-  SunOS\ 5*) LDSHARED=${LDSHARED-"cc -G"}
-         case `(uname -m || echo unknown) 2>/dev/null` in
-         i86*)
-             SFLAGS=${CFLAGS-"-xpentium -fast -KPIC -R."}
-             CFLAGS=${CFLAGS-"-xpentium -fast"} ;;
-         *)
-             SFLAGS=${CFLAGS-"-fast -xcg92 -KPIC -R."}
-             CFLAGS=${CFLAGS-"-fast -xcg92"} ;;
-         esac ;;
+  SunOS\ 5* | solaris*)
+         LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"}
+         SFLAGS=${CFLAGS-"-fast -KPIC"}
+         CFLAGS=${CFLAGS-"-fast"}
+         if test $build64 -eq 1; then
+             # old versions of SunPRO/Workshop/Studio don't support -m64,
+             # but newer ones do.  Check for it.
+             flag64=`$CC -flags | egrep -- '^-m64'`
+             if test x"$flag64" != x"" ; then
+                 CFLAGS="${CFLAGS} -m64"
+                 SFLAGS="${SFLAGS} -m64"
+             else
+                 case `(uname -m || echo unknown) 2>/dev/null` in
+                   i86*)
+                     SFLAGS="$SFLAGS -xarch=amd64"
+                     CFLAGS="$CFLAGS -xarch=amd64" ;;
+                   *)
+                     SFLAGS="$SFLAGS -xarch=v9"
+                     CFLAGS="$CFLAGS -xarch=v9" ;;
+                 esac
+             fi
+         fi
+         ;;
   SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
              CFLAGS=${CFLAGS-"-O2"}
              LDSHARED=${LDSHARED-"ld"} ;;
@@ -225,25 +317,79 @@ else
   esac
 fi
 
+# destination names for shared library if not defined above
 SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
 SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
 SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}
 
+echo >> configure.log
+
+# define functions for testing compiler and library characteristics and logging the results
+
+cat > $test.c <<EOF
+#error error
+EOF
+if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
+  try()
+  {
+    show $*
+    test "`( $* ) 2>&1 | tee -a configure.log`" = ""
+  }
+  echo - using any output from compiler to indicate an error >> configure.log
+else
+try()
+{
+  show $*
+  ( $* ) >> configure.log 2>&1
+  ret=$?
+  if test $ret -ne 0; then
+    echo "(exit code "$ret")" >> configure.log
+  fi
+  return $ret
+}
+fi
+
+tryboth()
+{
+  show $*
+  got=`( $* ) 2>&1`
+  ret=$?
+  printf %s "$got" >> configure.log
+  if test $ret -ne 0; then
+    return $ret
+  fi
+  test "$got" = ""
+}
+
+cat > $test.c << EOF
+int foo() { return 0; }
+EOF
+echo "Checking for obsessive-compulsive compiler options..." >> configure.log
+if try $CC -c $CFLAGS $test.c; then
+  :
+else
+  echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
+  leave 1
+fi
+
+echo >> configure.log
+
+# see if shared library build supported
+cat > $test.c <<EOF
+extern int getchar();
+int hello() {return getchar();}
+EOF
 if test $shared -eq 1; then
-  echo Checking for shared library support...
+  echo Checking for shared library support... | tee -a configure.log
   # we must test in two steps (cc then ld), required at least on SunOS 4.x
-  if test "`($CC -w -c $SFLAGS $test.c) 2>&1`" = "" &&
-     test "`($LDSHARED $SFLAGS -o $test$shared_ext $test.o) 2>&1`" = ""; then
-    echo Building shared library $SHAREDLIBV with $CC.
+  if try $CC -w -c $SFLAGS $test.c &&
+     try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
+    echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
   elif test -z "$old_cc" -a -z "$old_cflags"; then
-    echo No shared library support.
+    echo No shared library support. | tee -a configure.log
     shared=0;
   else
-    echo Tested $CC -w -c $SFLAGS $test.c
-    $CC -w -c $SFLAGS $test.c
-    echo Tested $LDSHARED $SFLAGS -o $test$shared_ext $test.o
-    $LDSHARED $SFLAGS -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' | tee -a configure.log
     shared=0;
   fi
 fi
@@ -254,25 +400,43 @@ if test $shared -eq 0; then
   SHAREDLIB=""
   SHAREDLIBV=""
   SHAREDLIBM=""
-  echo Building static library $STATICLIB version $VER with $CC.
+  echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log
 else
   ALL="static shared"
   TEST="all teststatic testshared"
 fi
 
+# check for underscores in external names for use by assembler code
+CPP=${CPP-"$CC -E"}
+case $CFLAGS in
+  *ASMV*)
+    echo >> configure.log
+    show "$NM $test.o | grep _hello"
+    if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then
+      CPP="$CPP -DNO_UNDERLINE"
+      echo Checking for underline in external names... No. | tee -a configure.log
+    else
+      echo Checking for underline in external names... Yes. | tee -a configure.log
+    fi ;;
+esac
+
+echo >> configure.log
+
+# check for large file support, and if none, check for fseeko()
 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
+if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; 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."
+  echo "Checking for off64_t... Yes." | tee -a configure.log
+  echo "Checking for fseeko... Yes." | tee -a configure.log
 else
-  echo "Checking for off64_t... No."
+  echo "Checking for off64_t... No." | tee -a configure.log
+  echo >> configure.log
   cat > $test.c <<EOF
 #include <stdio.h>
 int main(void) {
@@ -280,272 +444,335 @@ int main(void) {
   return 0;
 }
 EOF
-  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
-    echo "Checking for fseeko... Yes."
+  if try $CC $CFLAGS -o $test $test.c; then
+    echo "Checking for fseeko... Yes." | tee -a configure.log
   else
     CFLAGS="${CFLAGS} -DNO_FSEEKO"
     SFLAGS="${SFLAGS} -DNO_FSEEKO"
-    echo "Checking for fseeko... No."
+    echo "Checking for fseeko... No." | tee -a configure.log
   fi
 fi
 
+echo >> configure.log
+
+# check for strerror() for use by gz* functions
+cat > $test.c <<EOF
+#include <string.h>
+#include <errno.h>
+int main() { return strlen(strerror(errno)); }
+EOF
+if try $CC $CFLAGS -o $test $test.c; then
+  echo "Checking for strerror... Yes." | tee -a configure.log
+else
+  CFLAGS="${CFLAGS} -DNO_STRERROR"
+  SFLAGS="${SFLAGS} -DNO_STRERROR"
+  echo "Checking for strerror... No." | tee -a configure.log
+fi
+
+# copy clean zconf.h for subsequent edits
 cp -p zconf.h.in zconf.h
 
+echo >> configure.log
+
+# check for unistd.h and save result in zconf.h
 cat > $test.c <<EOF
 #include <unistd.h>
 int main() { return 0; }
 EOF
-if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
+if try $CC -c $CFLAGS $test.c; then
   sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
   mv zconf.temp.h zconf.h
-  echo "Checking for unistd.h... Yes."
+  echo "Checking for unistd.h... Yes." | tee -a configure.log
+else
+  echo "Checking for unistd.h... No." | tee -a configure.log
+fi
+
+echo >> configure.log
+
+# check for stdarg.h and save result in zconf.h
+cat > $test.c <<EOF
+#include <stdarg.h>
+int main() { return 0; }
+EOF
+if try $CC -c $CFLAGS $test.c; then
+  sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
+  mv zconf.temp.h zconf.h
+  echo "Checking for stdarg.h... Yes." | tee -a configure.log
 else
-  echo "Checking for unistd.h... No."
+  echo "Checking for stdarg.h... No." | tee -a configure.log
 fi
 
+# if the z_ prefix was requested, save that in zconf.h
 if test $zprefix -eq 1; then
   sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h
   mv zconf.temp.h zconf.h
-  echo "Using z_ prefix on all symbols."
+  echo >> configure.log
+  echo "Using z_ prefix on all symbols." | tee -a configure.log
 fi
 
+# if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists
+if test $solo -eq 1; then
+  sed '/#define ZCONF_H/a\
+#define Z_SOLO
+
+' < zconf.h > zconf.temp.h
+  mv zconf.temp.h zconf.h
+OBJC='$(OBJZ)'
+PIC_OBJC='$(PIC_OBJZ)'
+fi
+
+# if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X
+if test $cover -eq 1; then
+  CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage"
+  if test -n "$GCC_CLASSIC"; then
+    CC=$GCC_CLASSIC
+  fi
+fi
+
+echo >> configure.log
+
+# conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions
+# (using stdarg or not), with or without "n" (proving size of buffer), and with or without a
+# return value.  The most secure result is vsnprintf() with a return value.  snprintf() with a
+# return value is secure as well, but then gzprintf() will be limited to 20 arguments.
 cat > $test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
 #include "zconf.h"
-
 int main()
 {
 #ifndef STDC
   choke me
 #endif
-
   return 0;
 }
 EOF
+if try $CC -c $CFLAGS $test.c; then
+  echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log
 
-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 >> configure.log
   cat > $test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
-
 int mytest(const char *fmt, ...)
 {
   char buf[20];
   va_list ap;
-
   va_start(ap, fmt);
   vsnprintf(buf, sizeof(buf), fmt, ap);
   va_end(ap);
   return 0;
 }
-
 int main()
 {
   return (mytest("Hello%d\n", 1));
 }
 EOF
+  if try $CC $CFLAGS -o $test $test.c; then
+    echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log
 
-  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
-    echo "Checking for vsnprintf() in stdio.h... Yes."
-
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
-
 int mytest(const char *fmt, ...)
 {
   int n;
   char buf[20];
   va_list ap;
-
   va_start(ap, fmt);
   n = vsnprintf(buf, sizeof(buf), fmt, ap);
   va_end(ap);
   return n;
 }
-
 int main()
 {
   return (mytest("Hello%d\n", 1));
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of vsnprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
       SFLAGS="$SFLAGS -DHAS_vsnprintf_void"
-      echo "Checking for return value of vsnprintf()... No."
-      echo "  WARNING: apparently vsnprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of vsnprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   else
     CFLAGS="$CFLAGS -DNO_vsnprintf"
     SFLAGS="$SFLAGS -DNO_vsnprintf"
-    echo "Checking for vsnprintf() in stdio.h... No."
-    echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib"
-    echo "  can build but will be open to possible buffer-overflow security"
-    echo "  vulnerabilities."
+    echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log
+    echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log
+    echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
+    echo "  vulnerabilities." | tee -a configure.log
 
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
 #include <stdarg.h>
-
 int mytest(const char *fmt, ...)
 {
   int n;
   char buf[20];
   va_list ap;
-
   va_start(ap, fmt);
   n = vsprintf(buf, fmt, ap);
   va_end(ap);
   return n;
 }
-
 int main()
 {
   return (mytest("Hello%d\n", 1));
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of vsprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_vsprintf_void"
       SFLAGS="$SFLAGS -DHAS_vsprintf_void"
-      echo "Checking for return value of vsprintf()... No."
-      echo "  WARNING: apparently vsprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of vsprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   fi
 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()." | tee -a configure.log
 
+  echo >> configure.log
   cat >$test.c <<EOF
 #include <stdio.h>
-
 int mytest()
 {
   char buf[20];
-
   snprintf(buf, sizeof(buf), "%s", "foo");
   return 0;
 }
-
 int main()
 {
   return (mytest());
 }
 EOF
 
-  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
-    echo "Checking for snprintf() in stdio.h... Yes."
+  if try $CC $CFLAGS -o $test $test.c; then
+    echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log
 
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
-
 int mytest()
 {
   char buf[20];
-
   return snprintf(buf, sizeof(buf), "%s", "foo");
 }
-
 int main()
 {
   return (mytest());
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of snprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of snprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_snprintf_void"
       SFLAGS="$SFLAGS -DHAS_snprintf_void"
-      echo "Checking for return value of snprintf()... No."
-      echo "  WARNING: apparently snprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of snprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   else
     CFLAGS="$CFLAGS -DNO_snprintf"
     SFLAGS="$SFLAGS -DNO_snprintf"
-    echo "Checking for snprintf() in stdio.h... No."
-    echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib"
-    echo "  can build but will be open to possible buffer-overflow security"
-    echo "  vulnerabilities."
+    echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log
+    echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log
+    echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
+    echo "  vulnerabilities." | tee -a configure.log
 
+    echo >> configure.log
     cat >$test.c <<EOF
 #include <stdio.h>
-
 int mytest()
 {
   char buf[20];
-
   return sprintf(buf, "%s", "foo");
 }
-
 int main()
 {
   return (mytest());
 }
 EOF
 
-    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-      echo "Checking for return value of sprintf()... Yes."
+    if try $CC -c $CFLAGS $test.c; then
+      echo "Checking for return value of sprintf()... Yes." | tee -a configure.log
     else
       CFLAGS="$CFLAGS -DHAS_sprintf_void"
       SFLAGS="$SFLAGS -DHAS_sprintf_void"
-      echo "Checking for return value of sprintf()... No."
-      echo "  WARNING: apparently sprintf() does not return a value. zlib"
-      echo "  can build but will be open to possible string-format security"
-      echo "  vulnerabilities."
+      echo "Checking for return value of sprintf()... No." | tee -a configure.log
+      echo "  WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log
+      echo "  can build but will be open to possible string-format security" | tee -a configure.log
+      echo "  vulnerabilities." | tee -a configure.log
     fi
   fi
 fi
 
+# see if we can hide zlib internal symbols that are linked between separate source files
 if test "$gcc" -eq 1; then
+  echo >> configure.log
   cat > $test.c <<EOF
-#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33)
-#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
-#else
-#  define ZLIB_INTERNAL
-#endif
+#define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
 int ZLIB_INTERNAL foo;
 int main()
 {
   return 0;
 }
 EOF
-  if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
-    echo "Checking for attribute(visibility) support... Yes."
+  if tryboth $CC -c $CFLAGS $test.c; then
+    CFLAGS="$CFLAGS -DHAVE_HIDDEN"
+    SFLAGS="$SFLAGS -DHAVE_HIDDEN"
+    echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log
   else
-    CFLAGS="$CFLAGS -DNO_VIZ"
-    SFLAGS="$SFLAGS -DNO_VIZ"
-    echo "Checking for attribute(visibility) support... No."
+    echo "Checking for attribute(visibility) support... No." | tee -a configure.log
   fi
 fi
 
-CPP=${CPP-"$CC -E"}
-case $CFLAGS in
-  *ASMV*)
-    if test "`$NM $test.o | grep _hello`" = ""; then
-      CPP="$CPP -DNO_UNDERLINE"
-      echo Checking for underline in external names... No.
-    else
-      echo Checking for underline in external names... Yes.
-    fi ;;
-esac
-
-rm -f $test.[co] $test $test$shared_ext
-
-# udpate Makefile
+# show the results in the log
+echo >> configure.log
+echo ALL = $ALL >> configure.log
+echo AR = $AR >> configure.log
+echo ARFLAGS = $ARFLAGS >> configure.log
+echo CC = $CC >> configure.log
+echo CFLAGS = $CFLAGS >> configure.log
+echo CPP = $CPP >> configure.log
+echo EXE = $EXE >> configure.log
+echo LDCONFIG = $LDCONFIG >> configure.log
+echo LDFLAGS = $LDFLAGS >> configure.log
+echo LDSHARED = $LDSHARED >> configure.log
+echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log
+echo OBJC = $OBJC >> configure.log
+echo PIC_OBJC = $PIC_OBJC >> configure.log
+echo RANLIB = $RANLIB >> configure.log
+echo SFLAGS = $SFLAGS >> configure.log
+echo SHAREDLIB = $SHAREDLIB >> configure.log
+echo SHAREDLIBM = $SHAREDLIBM >> configure.log
+echo SHAREDLIBV = $SHAREDLIBV >> configure.log
+echo STATICLIB = $STATICLIB >> configure.log
+echo TEST = $TEST >> configure.log
+echo VER = $VER >> configure.log
+echo Z_U4 = $Z_U4 >> configure.log
+echo exec_prefix = $exec_prefix >> configure.log
+echo includedir = $includedir >> configure.log
+echo libdir = $libdir >> configure.log
+echo mandir = $mandir >> configure.log
+echo prefix = $prefix >> configure.log
+echo sharedlibdir = $sharedlibdir >> configure.log
+echo uname = $uname >> configure.log
+
+# udpate Makefile with the configure results
 sed < Makefile.in "
 /^CC *=/s#=.*#=$CC#
 /^CFLAGS *=/s#=.*#=$CFLAGS#
@@ -557,7 +784,8 @@ sed < Makefile.in "
 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
-/^AR *=/s#=.*#=$AR_RC#
+/^AR *=/s#=.*#=$AR#
+/^ARFLAGS *=/s#=.*#=$ARFLAGS#
 /^RANLIB *=/s#=.*#=$RANLIB#
 /^LDCONFIG *=/s#=.*#=$LDCONFIG#
 /^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
@@ -568,10 +796,13 @@ sed < Makefile.in "
 /^sharedlibdir *=/s#=.*#=$sharedlibdir#
 /^includedir *=/s#=.*#=$includedir#
 /^mandir *=/s#=.*#=$mandir#
+/^OBJC *=/s#=.*#= $OBJC#
+/^PIC_OBJC *=/s#=.*#= $PIC_OBJC#
 /^all: */s#:.*#: $ALL#
 /^test: */s#:.*#: $TEST#
 " > Makefile
 
+# create zlib.pc with the configure results
 sed < zlib.pc.in "
 /^CC *=/s#=.*#=$CC#
 /^CFLAGS *=/s#=.*#=$CFLAGS#
@@ -581,7 +812,8 @@ sed < zlib.pc.in "
 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
-/^AR *=/s#=.*#=$AR_RC#
+/^AR *=/s#=.*#=$AR#
+/^ARFLAGS *=/s#=.*#=$ARFLAGS#
 /^RANLIB *=/s#=.*#=$RANLIB#
 /^EXE *=/s#=.*#=$EXE#
 /^prefix *=/s#=.*#=$prefix#
@@ -594,3 +826,6 @@ sed < zlib.pc.in "
 " | sed -e "
 s/\@VERSION\@/$VER/g;
 " > zlib.pc
+
+# done
+leave 0
index dd2285d..c66349b 100644 (file)
@@ -75,3 +75,4 @@ untgz/      by Pedro A. Aranda Gutierrez <paag@tid.es>
 
 vstudio/    by Gilles Vollant <info@winimage.com>
         Building a minizip-enhanced zlib with Microsoft Visual Studio
+        Includes vc11 from kreuzerkrieg and vc12 from davispuh
index 06817e1..fa42109 100644 (file)
 .text
 
 /* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
+.cfi_sections  .debug_frame
 
 longest_match:
 
+.cfi_startproc
 /* Save registers that the compiler may be using, and adjust %esp to   */
 /* make room for our stack frame.                                      */
 
                pushl   %ebp
+               .cfi_def_cfa_offset 8
+               .cfi_offset ebp, -8
                pushl   %edi
+               .cfi_def_cfa_offset 12
                pushl   %esi
+               .cfi_def_cfa_offset 16
                pushl   %ebx
+               .cfi_def_cfa_offset 20
                subl    $LocalVarsSize, %esp
+               .cfi_def_cfa_offset LocalVarsSize+20
 
 /* Retrieve the function arguments. %ecx will hold cur_match           */
 /* throughout the entire function. %edx will hold the pointer to the   */
@@ -108,7 +116,7 @@ longest_match:
 /* if (s->prev_length >= s->good_match) {                              */
 /*     chain_length >>= 2;                                             */
 /* }                                                                   */
-
                movl    dsPrevLen(%edx), %eax
                movl    dsGoodMatch(%edx), %ebx
                cmpl    %ebx, %eax
@@ -336,8 +344,14 @@ LookaheadRet:
 /* Restore the stack and return from whence we came.                   */
 
                addl    $LocalVarsSize, %esp
+               .cfi_def_cfa_offset 20
                popl    %ebx
+               .cfi_def_cfa_offset 16
                popl    %esi
+               .cfi_def_cfa_offset 12
                popl    %edi
+               .cfi_def_cfa_offset 8
                popl    %ebp
+               .cfi_def_cfa_offset 4
+.cfi_endproc
 match_init:    ret
index 4ce697a..69ef0fe 100644 (file)
@@ -1,7 +1,7 @@
 /* blast.c
- * Copyright (C) 2003 Mark Adler
+ * Copyright (C) 2003, 2012 Mark Adler
  * For conditions of distribution and use, see copyright notice in blast.h
- * version 1.1, 16 Feb 2003
+ * version 1.2, 24 Oct 2012
  *
  * blast.c decompresses data compressed by the PKWare Compression Library.
  * This function provides functionality similar to the explode() function of
@@ -22,6 +22,8 @@
  *
  * 1.0  12 Feb 2003     - First version
  * 1.1  16 Feb 2003     - Fixed distance check for > 4 GB uncompressed data
+ * 1.2  24 Oct 2012     - Add note about using binary mode in stdio
+ *                      - Fix comparisons of differently signed integers
  */
 
 #include <setjmp.h>             /* for setjmp(), longjmp(), and jmp_buf */
@@ -279,7 +281,7 @@ local int decomp(struct state *s)
     int dict;           /* log2(dictionary size) - 6 */
     int symbol;         /* decoded symbol, extra bits for distance */
     int len;            /* length for copy */
-    int dist;           /* distance for copy */
+    unsigned dist;      /* distance for copy */
     int copy;           /* copy counter */
     unsigned char *from, *to;   /* copy pointers */
     static int virgin = 1;                              /* build tables once */
index ce9e541..658cfd3 100644 (file)
@@ -1,6 +1,6 @@
 /* blast.h -- interface for blast.c
-  Copyright (C) 2003 Mark Adler
-  version 1.1, 16 Feb 2003
+  Copyright (C) 2003, 2012 Mark Adler
+  version 1.2, 24 Oct 2012
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the author be held liable for any damages
  * that library.  (Note: PKWare overused the "implode" verb, and the format
  * used by their library implode() function is completely different and
  * incompatible with the implode compression method supported by PKZIP.)
+ *
+ * The binary mode for stdio functions should be used to assure that the
+ * compressed data is not corrupted when read or written.  For example:
+ * fopen(..., "rb") and fopen(..., "wb").
  */
 
 
index 0d86fb5..a579974 100644 (file)
@@ -152,7 +152,7 @@ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
   const OutBuf: Pointer; BufSize: Integer);
 
 const
-  zlib_version = '1.2.5';
+  zlib_version = '1.2.8';
 
 type
   EZlibError = class(Exception);
index 0d0699a..9bb00b7 100644 (file)
@@ -63,9 +63,9 @@ uncompr.obj: uncompr.c zlib.h zconf.h
 
 zutil.obj: zutil.c zutil.h zlib.h zconf.h
 
-example.obj: example.c zlib.h zconf.h
+example.obj: test/example.c zlib.h zconf.h
 
-minigzip.obj: minigzip.c zlib.h zconf.h
+minigzip.obj: test/minigzip.c zlib.h zconf.h
 
 
 # For the sake of the old Borland make,
index 3bbcc8c..b273d54 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-// © Copyright Henrik Ravn 2004\r
+// © Copyright Henrik Ravn 2004\r
 //\r
 // Use, modification and distribution are subject to the Boost Software License, Version 1.0.\r
 // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
@@ -156,7 +156,7 @@ namespace DotZLibTests
         public void Info_Version()\r
         {\r
             Info info = new Info();\r
-            Assert.AreEqual("1.2.5", Info.Version);\r
+            Assert.AreEqual("1.2.8", Info.Version);\r
             Assert.AreEqual(32, info.SizeOfUInt);\r
             Assert.AreEqual(32, info.SizeOfULong);\r
             Assert.AreEqual(32, info.SizeOfPointer);\r
index 7bbe90c..05fb3e3 100644 (file)
@@ -222,14 +222,13 @@ out_func out;
 void FAR *out_desc;
 {
     struct inflate_state FAR *state;
-    unsigned char FAR *next;    /* next input */
+    z_const unsigned char FAR *next;    /* next input */
     unsigned char FAR *put;     /* next output */
     unsigned have;              /* available input */
     unsigned long left;         /* available output */
     inflate_mode mode;          /* current inflate mode */
     int lastblock;              /* true if processing last block */
     int wrap;                   /* true if the window has wrapped */
-    unsigned long write;        /* window write index */
     unsigned char FAR *window;  /* allocated sliding window, if needed */
     unsigned long hold;         /* bit buffer */
     unsigned bits;              /* bits in bit buffer */
@@ -259,7 +258,6 @@ void FAR *out_desc;
     strm->msg = Z_NULL;
     mode = TYPE;
     lastblock = 0;
-    write = 0;
     wrap = 0;
     window = state->window;
     next = strm->next_in;
index 306c5f1..4a73ad2 100644 (file)
@@ -1,5 +1,5 @@
 /* inftree9.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2010 Mark Adler
+ * Copyright (C) 1995-2013 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,7 +9,7 @@
 #define MAXBITS 15
 
 const char inflate9_copyright[] =
-   " inflate9 1.2.5 Copyright 1995-2010 Mark Adler ";
+   " inflate9 1.2.8 Copyright 1995-2013 Mark Adler ";
 /*
   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
@@ -64,7 +64,7 @@ unsigned short FAR *work;
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
         130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
-        133, 133, 133, 133, 144, 73, 195};
+        133, 133, 133, 133, 144, 72, 78};
     static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
         65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
diff --git a/zlib/contrib/masmx64/gvmat64.lst b/zlib/contrib/masmx64/gvmat64.lst
deleted file mode 100644 (file)
index 0b0b359..0000000
+++ /dev/null
@@ -1,666 +0,0 @@
-Microsoft (R) Macro Assembler (x64) Version 9.00.21022.08   06/15/10 10:54:08\r
-gvmat64.asm                                                 Page 1 - 1\r
-\r
-\r
-                               ;uInt longest_match_x64(\r
-                               ;    deflate_state *s,\r
-                               ;    IPos cur_match);                             /* current match */\r
-\r
-                               ; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86_64\r
-                               ;  (AMD64 on Athlon 64, Opteron, Phenom\r
-                               ;     and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)\r
-                               ; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.\r
-                               ;\r
-                               ; File written by Gilles Vollant, by converting to assembly the longest_match\r
-                               ;  from Jean-loup Gailly in deflate.c of zLib and infoZip zip.\r
-                               ;\r
-                               ;  and by taking inspiration on asm686 with masm, optimised assembly code\r
-                               ;        from Brian Raiter, written 1998\r
-                               ;\r
-                               ;  This software is provided 'as-is', without any express or implied\r
-                               ;  warranty.  In no event will the authors be held liable for any damages\r
-                               ;  arising from the use of this software.\r
-                               ;\r
-                               ;  Permission is granted to anyone to use this software for any purpose,\r
-                               ;  including commercial applications, and to alter it and redistribute it\r
-                               ;  freely, subject to the following restrictions:\r
-                               ;\r
-                               ;  1. The origin of this software must not be misrepresented; you must not\r
-                               ;     claim that you wrote the original software. If you use this software\r
-                               ;     in a product, an acknowledgment in the product documentation would be\r
-                               ;     appreciated but is not required.\r
-                               ;  2. Altered source versions must be plainly marked as such, and must not be\r
-                               ;     misrepresented as being the original software\r
-                               ;  3. This notice may not be removed or altered from any source distribution.\r
-                               ;\r
-                               ;\r
-                               ;\r
-                               ;         http://www.zlib.net\r
-                               ;         http://www.winimage.com/zLibDll\r
-                               ;         http://www.muppetlabs.com/~breadbox/software/assembly.html\r
-                               ;\r
-                               ; to compile this file for infozip Zip, I use option:\r
-                               ;   ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm\r
-                               ;\r
-                               ; to compile this file for zLib, I use option:\r
-                               ;   ml64.exe /Flgvmat64 /c /Zi gvmat64.asm\r
-                               ; Be carrefull to adapt zlib1222add below to your version of zLib\r
-                               ;   (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change\r
-                               ;    value of zlib1222add later)\r
-                               ;\r
-                               ; This file compile with Microsoft Macro Assembler (x64) for AMD64\r
-                               ;\r
-                               ;   ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK\r
-                               ;\r
-                               ;   (you can get Windows WDK with ml64 for AMD64 from\r
-                               ;      http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)\r
-                               ;\r
-\r
-\r
-                               ;uInt longest_match(s, cur_match)\r
-                               ;    deflate_state *s;\r
-                               ;    IPos cur_match;                             /* current match */\r
- 00000000                      .code\r
- 00000000                      longest_match PROC\r
-\r
-\r
-                               ;LocalVarsSize   equ 88\r
- = 00000048                     LocalVarsSize   equ 72\r
-\r
-                               ; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12\r
-                               ; free register :  r14,r15\r
-                               ; register can be saved : rsp\r
-\r
- = rsp + 8 - LocalVarsSize      chainlenwmask   equ  rsp + 8 - LocalVarsSize    ; high word: current chain len\r
-                                                                                ; low word: s->wmask\r
-                               ;window          equ  rsp + xx - LocalVarsSize   ; local copy of s->window ; stored in r10\r
-                               ;windowbestlen   equ  rsp + xx - LocalVarsSize   ; s->window + bestlen , use r10+r11\r
-                               ;scanstart       equ  rsp + xx - LocalVarsSize   ; first two bytes of string ; stored in r12w\r
-                               ;scanend         equ  rsp + xx - LocalVarsSize   ; last two bytes of string use ebx\r
-                               ;scanalign       equ  rsp + xx - LocalVarsSize   ; dword-misalignment of string r13\r
-                               ;bestlen         equ  rsp + xx - LocalVarsSize   ; size of best match so far -> r11d\r
-                               ;scan            equ  rsp + xx - LocalVarsSize   ; ptr to string wanting match -> r9\r
-                               IFDEF INFOZIP\r
-                               ELSE\r
- = (rsp + 16 - LocalVarsSiz     nicematch       equ  (rsp + 16 - LocalVarsSize) ; a good enough match size\r
-   e)\r
-                               ENDIF\r
-\r
- = rsp + 24 - LocalVarsSize    save_rdi        equ  rsp + 24 - LocalVarsSize\r
- = rsp + 32 - LocalVarsSize    save_rsi        equ  rsp + 32 - LocalVarsSize\r
- = rsp + 40 - LocalVarsSize    save_rbx        equ  rsp + 40 - LocalVarsSize\r
- = rsp + 48 - LocalVarsSize    save_rbp        equ  rsp + 48 - LocalVarsSize\r
- = rsp + 56 - LocalVarsSize    save_r12        equ  rsp + 56 - LocalVarsSize\r
- = rsp + 64 - LocalVarsSize    save_r13        equ  rsp + 64 - LocalVarsSize\r
-                               ;save_r14        equ  rsp + 72 - LocalVarsSize\r
-                               ;save_r15        equ  rsp + 80 - LocalVarsSize\r
-\r
-\r
-                               ; summary of register usage\r
-                               ; scanend     ebx\r
-                               ; scanendw    bx\r
-                               ; chainlenwmask   edx\r
-                               ; curmatch    rsi\r
-                               ; curmatchd   esi\r
-                               ; windowbestlen   r8\r
-                               ; scanalign   r9\r
-                               ; scanalignd  r9d\r
-                               ; window      r10\r
-                               ; bestlen     r11\r
-                               ; bestlend    r11d\r
-                               ; scanstart   r12d\r
-                               ; scanstartw  r12w\r
-                               ; scan        r13\r
-                               ; nicematch   r14d\r
-                               ; limit       r15\r
-                               ; limitd      r15d\r
-                               ; prev        rcx\r
-\r
-                               ;  all the +4 offsets are due to the addition of pending_buf_size (in zlib\r
-                               ;  in the deflate_state structure since the asm code was first written\r
-                               ;  (if you compile with zlib 1.0.4 or older, remove the +4).\r
-                               ;  Note : these value are good with a 8 bytes boundary pack structure\r
-\r
-\r
- = 00000102                        MAX_MATCH           equ     258\r
- = 00000003                        MIN_MATCH           equ     3\r
- = 00000106                        MIN_LOOKAHEAD       equ     (MAX_MATCH+MIN_MATCH+1)\r
-\r
-\r
-                               ;;; Offsets for fields in the deflate_state structure. These numbers\r
-                               ;;; are calculated from the definition of deflate_state, with the\r
-                               ;;; assumption that the compiler will dword-align the fields. (Thus,\r
-                               ;;; changing the definition of deflate_state could easily cause this\r
-                               ;;; program to crash horribly, without so much as a warning at\r
-                               ;;; compile time. Sigh.)\r
-\r
-                               ;  all the +zlib1222add offsets are due to the addition of fields\r
-                               ;  in zlib in the deflate_state structure since the asm code was first written\r
-                               ;  (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").\r
-                               ;  (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").\r
-                               ;  if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").\r
-\r
-\r
-                               IFDEF INFOZIP\r
-                               ELSE\r
-\r
-                                 IFNDEF zlib1222add\r
- = 00000008                        zlib1222add equ 8\r
-                                 ENDIF\r
- = 00000044                    dsWSize         equ 56+zlib1222add+(zlib1222add/2)\r
- = 0000004C                    dsWMask         equ 64+zlib1222add+(zlib1222add/2)\r
- = 00000050                    dsWindow        equ 72+zlib1222add\r
- = 00000060                    dsPrev          equ 88+zlib1222add\r
- = 00000088                    dsMatchLen      equ 128+zlib1222add\r
- = 0000008C                    dsPrevMatch     equ 132+zlib1222add\r
- = 00000094                    dsStrStart      equ 140+zlib1222add\r
- = 00000098                    dsMatchStart    equ 144+zlib1222add\r
- = 0000009C                    dsLookahead     equ 148+zlib1222add\r
- = 000000A0                    dsPrevLen       equ 152+zlib1222add\r
- = 000000A4                    dsMaxChainLen   equ 156+zlib1222add\r
- = 000000B4                    dsGoodMatch     equ 172+zlib1222add\r
- = 000000B8                    dsNiceMatch     equ 176+zlib1222add\r
-\r
- = [ rcx + dsWSize]            window_size     equ [ rcx + dsWSize]\r
- = [ rcx + dsWMask]            WMask           equ [ rcx + dsWMask]\r
- = [ rcx + dsWindow]           window_ad       equ [ rcx + dsWindow]\r
- = [ rcx + dsPrev]             prev_ad         equ [ rcx + dsPrev]\r
- = [ rcx + dsStrStart]         strstart        equ [ rcx + dsStrStart]\r
- = [ rcx + dsMatchStart]       match_start     equ [ rcx + dsMatchStart]\r
- = [ rcx + dsLookahead]                Lookahead       equ [ rcx + dsLookahead] ; 0ffffffffh on infozip\r
- = [ rcx + dsPrevLen]          prev_length     equ [ rcx + dsPrevLen]\r
- = [ rcx + dsMaxChainLen]      max_chain_length equ [ rcx + dsMaxChainLen]\r
- = [ rcx + dsGoodMatch]                good_match      equ [ rcx + dsGoodMatch]\r
- = [ rcx + dsNiceMatch]                nice_match      equ [ rcx + dsNiceMatch]\r
-                               ENDIF\r
-\r
-                               ; parameter 1 in r8(deflate state s), param 2 in rdx (cur match)\r
-\r
-                               ; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\r
-                               ; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\r
-                               ;\r
-                               ; All registers must be preserved across the call, except for\r
-                               ;   rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.\r
-\r
-\r
-\r
-                               ;;; Save registers that the compiler may be using, and adjust esp to\r
-                               ;;; make room for our stack frame.\r
-\r
-\r
-                               ;;; Retrieve the function arguments. r8d will hold cur_match\r
-                               ;;; throughout the entire function. edx will hold the pointer to the\r
-                               ;;; deflate_state structure during the function's setup (before\r
-                               ;;; entering the main loop.\r
-\r
-                               ; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)\r
-\r
-                               ; this clear high 32 bits of r8, which can be garbage in both r8 and rdx\r
-\r
- 00000000  48/ 89 7C 24                        mov [save_rdi],rdi\r
-          D0\r
- 00000005  48/ 89 74 24                        mov [save_rsi],rsi\r
-          D8\r
- 0000000A  48/ 89 5C 24                        mov [save_rbx],rbx\r
-          E0\r
- 0000000F  48/ 89 6C 24                        mov [save_rbp],rbp\r
-          E8\r
-                               IFDEF INFOZIP\r
-                               ELSE\r
- 00000014  44/ 8B C2                   mov r8d,edx\r
-                               ENDIF\r
- 00000017  4C/ 89 64 24                        mov [save_r12],r12\r
-          F0\r
- 0000001C  4C/ 89 6C 24                        mov [save_r13],r13\r
-          F8\r
-                               ;        mov [save_r14],r14\r
-                               ;        mov [save_r15],r15\r
-\r
-\r
-                               ;;; uInt wmask = s->w_mask;\r
-                               ;;; unsigned chain_length = s->max_chain_length;\r
-                               ;;; if (s->prev_length >= s->good_match) {\r
-                               ;;;     chain_length >>= 2;\r
-                               ;;; }\r
-\r
- 00000021  8B B9 000000A0              mov edi, prev_length\r
- 00000027  8B B1 000000B4              mov esi, good_match\r
- 0000002D  8B 41 4C                    mov eax, WMask\r
- 00000030  8B 99 000000A4              mov ebx, max_chain_length\r
- 00000036  3B FE                       cmp edi, esi\r
- 00000038  7C 03                       jl  LastMatchGood\r
- 0000003A  C1 EB 02                    shr ebx, 2\r
- 0000003D                      LastMatchGood:\r
-\r
-                               ;;; chainlen is decremented once beforehand so that the function can\r
-                               ;;; use the sign flag instead of the zero flag for the exit test.\r
-                               ;;; It is then shifted into the high word, to make room for the wmask\r
-                               ;;; value, which it will always accompany.\r
-\r
- 0000003D  FF CB                       dec ebx\r
- 0000003F  C1 E3 10                    shl ebx, 16\r
- 00000042  0B D8                       or  ebx, eax\r
-\r
-                               ;;; on zlib only\r
-                               ;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;\r
-\r
-                               IFDEF INFOZIP\r
-                               ELSE\r
- 00000044  8B 81 000000B8              mov eax, nice_match\r
- 0000004A  89 5C 24 C0                 mov [chainlenwmask], ebx\r
- 0000004E  44/ 8B 91                   mov r10d, Lookahead\r
-          0000009C\r
- 00000055  44/ 3B D0                   cmp r10d, eax\r
- 00000058  44/ 0F 4D D0                        cmovnl r10d, eax\r
- 0000005C  44/ 89 54 24                        mov [nicematch],r10d\r
-          C8\r
-                               ENDIF\r
-\r
-                               ;;; register Bytef *scan = s->window + s->strstart;\r
- 00000061  4C/ 8B 51 50                        mov r10, window_ad\r
- 00000065  8B A9 00000094              mov ebp, strstart\r
- 0000006B  4E/ 8D 6C 15                        lea r13, [r10 + rbp]\r
-          00\r
-\r
-                               ;;; Determine how many bytes the scan ptr is off from being\r
-                               ;;; dword-aligned.\r
-\r
- 00000070  4D/ 8B CD                    mov r9,r13\r
- 00000073  49/ F7 DD                    neg r13\r
- 00000076  49/ 83 E5 03                         and r13,3\r
-\r
-                               ;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?\r
-                               ;;;     s->strstart - (IPos)MAX_DIST(s) : NIL;\r
-                               IFDEF INFOZIP\r
-                               ELSE\r
- 0000007A  8B 41 44                    mov eax, window_size\r
- 0000007D  2D 00000106                 sub eax, MIN_LOOKAHEAD\r
-                               ENDIF\r
- 00000082  33 FF                       xor edi,edi\r
- 00000084  2B E8                       sub ebp, eax\r
-\r
- 00000086  44/ 8B 99                   mov r11d, prev_length\r
-          000000A0\r
-\r
- 0000008D  0F 4E EF                    cmovng ebp,edi\r
-\r
-                               ;;; int best_len = s->prev_length;\r
-\r
-\r
-                               ;;; Store the sum of s->window + best_len in esi locally, and in esi.\r
-\r
- 00000090  4B/ 8D 34 13                       lea  rsi,[r10+r11]\r
-\r
-                               ;;; register ush scan_start = *(ushf*)scan;\r
-                               ;;; register ush scan_end   = *(ushf*)(scan+best_len-1);\r
-                               ;;; Posf *prev = s->prev;\r
-\r
- 00000094  45/ 0F B7 21                        movzx r12d,word ptr [r9]\r
- 00000098  43/ 0F B7 5C 0B             movzx ebx, word ptr [r9 + r11 - 1]\r
-          FF\r
-\r
- 0000009E  48/ 8B 79 60                        mov rdi, prev_ad\r
-\r
-                               ;;; Jump into the main loop.\r
-\r
- 000000A2  8B 54 24 C0                 mov edx, [chainlenwmask]\r
-\r
- 000000A6  66| 41/ 3B 5C 30            cmp bx,word ptr [rsi + r8 - 1]\r
-          FF\r
- 000000AC  0F 84 0000009A              jz  LookupLoopIsZero\r
-\r
- 000000B2                      LookupLoop1:\r
- 000000B2  44/ 23 C2                   and r8d, edx\r
-\r
- 000000B5  46/ 0F B7 04 47             movzx   r8d, word ptr [rdi + r8*2]\r
- 000000BA  44/ 3B C5                   cmp r8d, ebp\r
- 000000BD  0F 86 00000170              jbe LeaveNow\r
- 000000C3  81 EA 00010000              sub edx, 00010000h\r
- 000000C9  0F 88 00000164              js  LeaveNow\r
-\r
- 000000CF                      LoopEntry1:\r
- 000000CF  66| 41/ 3B 5C 30            cmp bx,word ptr [rsi + r8 - 1]\r
-          FF\r
- 000000D5  74 75                       jz  LookupLoopIsZero\r
-\r
- 000000D7                      LookupLoop2:\r
- 000000D7  44/ 23 C2                   and r8d, edx\r
-\r
- 000000DA  46/ 0F B7 04 47             movzx   r8d, word ptr [rdi + r8*2]\r
- 000000DF  44/ 3B C5                   cmp r8d, ebp\r
- 000000E2  0F 86 0000014B              jbe LeaveNow\r
- 000000E8  81 EA 00010000              sub edx, 00010000h\r
- 000000EE  0F 88 0000013F              js  LeaveNow\r
-\r
- 000000F4                      LoopEntry2:\r
- 000000F4  66| 41/ 3B 5C 30            cmp bx,word ptr [rsi + r8 - 1]\r
-          FF\r
- 000000FA  74 50                       jz  LookupLoopIsZero\r
-\r
- 000000FC                      LookupLoop4:\r
- 000000FC  44/ 23 C2                   and r8d, edx\r
-\r
- 000000FF  46/ 0F B7 04 47             movzx   r8d, word ptr [rdi + r8*2]\r
- 00000104  44/ 3B C5                   cmp r8d, ebp\r
- 00000107  0F 86 00000126              jbe LeaveNow\r
- 0000010D  81 EA 00010000              sub edx, 00010000h\r
- 00000113  0F 88 0000011A              js  LeaveNow\r
-\r
- 00000119                      LoopEntry4:\r
-\r
- 00000119  66| 41/ 3B 5C 30            cmp bx,word ptr [rsi + r8 - 1]\r
-          FF\r
- 0000011F  75 91                       jnz LookupLoop1\r
- 00000121  EB 29                       jmp LookupLoopIsZero\r
-\r
-\r
-                               ;;; do {\r
-                               ;;;     match = s->window + cur_match;\r
-                               ;;;     if (*(ushf*)(match+best_len-1) != scan_end ||\r
-                               ;;;         *(ushf*)match != scan_start) continue;\r
-                               ;;;     [...]\r
-                               ;;; } while ((cur_match = prev[cur_match & wmask]) > limit\r
-                               ;;;          && --chain_length != 0);\r
-                               ;;;\r
-                               ;;; Here is the inner loop of the function. The function will spend the\r
-                               ;;; majority of its time in this loop, and majority of that time will\r
-                               ;;; be spent in the first ten instructions.\r
-                               ;;;\r
-                               ;;; Within this loop:\r
-                               ;;; ebx = scanend\r
-                               ;;; r8d = curmatch\r
-                               ;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)\r
-                               ;;; esi = windowbestlen - i.e., (window + bestlen)\r
-                               ;;; edi = prev\r
-                               ;;; ebp = limit\r
-\r
- 00000123                      LookupLoop:\r
- 00000123  44/ 23 C2                   and r8d, edx\r
-\r
- 00000126  46/ 0F B7 04 47             movzx   r8d, word ptr [rdi + r8*2]\r
- 0000012B  44/ 3B C5                   cmp r8d, ebp\r
- 0000012E  0F 86 000000FF              jbe LeaveNow\r
- 00000134  81 EA 00010000              sub edx, 00010000h\r
- 0000013A  0F 88 000000F3              js  LeaveNow\r
-\r
- 00000140                      LoopEntry:\r
-\r
- 00000140  66| 41/ 3B 5C 30            cmp bx,word ptr [rsi + r8 - 1]\r
-          FF\r
- 00000146  0F 85 FFFFFF66              jnz LookupLoop1\r
- 0000014C                      LookupLoopIsZero:\r
- 0000014C  66| 47/ 3B 24 10            cmp     r12w, word ptr [r10 + r8]\r
- 00000151  0F 85 FFFFFF5B              jnz LookupLoop1\r
-\r
-\r
-                               ;;; Store the current value of chainlen.\r
- 00000157  89 54 24 C0                 mov [chainlenwmask], edx\r
-\r
-                               ;;; Point edi to the string under scrutiny, and esi to the string we\r
-                               ;;; are hoping to match it up with. In actuality, esi and edi are\r
-                               ;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is\r
-                               ;;; initialized to -(MAX_MATCH_8 - scanalign).\r
-\r
- 0000015B  4B/ 8D 34 02                        lea rsi,[r8+r10]\r
- 0000015F  48/ BA                      mov rdx, 0fffffffffffffef8h; -(MAX_MATCH_8)\r
-          FFFFFFFFFFFFFEF8\r
- 00000169  49/ 8D B4 35                        lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8]\r
-          00000108\r
- 00000171  4B/ 8D BC 0D                        lea rdi, [r9 + r13 + 0108h] ;MAX_MATCH_8]\r
-          00000108\r
-\r
- 00000179  0F 18 14 32                 prefetcht1 [rsi+rdx]\r
- 0000017D  0F 18 14 3A                 prefetcht1 [rdi+rdx]\r
-\r
-\r
-                               ;;; Test the strings for equality, 8 bytes at a time. At the end,\r
-                               ;;; adjust rdx so that it is offset to the exact byte that mismatched.\r
-                               ;;;\r
-                               ;;; We already know at this point that the first three bytes of the\r
-                               ;;; strings match each other, and they can be safely passed over before\r
-                               ;;; starting the compare loop. So what this code does is skip over 0-3\r
-                               ;;; bytes, as much as necessary in order to dword-align the edi\r
-                               ;;; pointer. (rsi will still be misaligned three times out of four.)\r
-                               ;;;\r
-                               ;;; It should be confessed that this loop usually does not represent\r
-                               ;;; much of the total running time. Replacing it with a more\r
-                               ;;; straightforward "rep cmpsb" would not drastically degrade\r
-                               ;;; performance.\r
-\r
-\r
- 00000181                      LoopCmps:\r
- 00000181  48/ 8B 04 32                        mov rax, [rsi + rdx]\r
- 00000185  48/ 33 04 3A                        xor rax, [rdi + rdx]\r
- 00000189  75 28                       jnz LeaveLoopCmps\r
-\r
- 0000018B  48/ 8B 44 32                        mov rax, [rsi + rdx + 8]\r
-          08\r
- 00000190  48/ 33 44 3A                        xor rax, [rdi + rdx + 8]\r
-          08\r
- 00000195  75 18                       jnz LeaveLoopCmps8\r
-\r
-\r
- 00000197  48/ 8B 44 32                        mov rax, [rsi + rdx + 8+8]\r
-          10\r
- 0000019C  48/ 33 44 3A                        xor rax, [rdi + rdx + 8+8]\r
-          10\r
- 000001A1  75 08                       jnz LeaveLoopCmps16\r
-\r
- 000001A3  48/ 83 C2 18                        add rdx,8+8+8\r
-\r
- 000001A7  75 D8                       jnz short LoopCmps\r
- 000001A9  EB 7B                       jmp short LenMaximum\r
- 000001AB  48/ 83 C2 08                LeaveLoopCmps16: add rdx,8\r
- 000001AF  48/ 83 C2 08                LeaveLoopCmps8: add rdx,8\r
- 000001B3                      LeaveLoopCmps:\r
-\r
- 000001B3  A9 0000FFFF                 test    eax, 0000FFFFh\r
- 000001B8  75 1B                       jnz LenLower\r
-\r
- 000001BA  A9 FFFFFFFF                 test eax,0ffffffffh\r
-\r
- 000001BF  75 0D                       jnz LenLower32\r
-\r
- 000001C1  48/ 83 C2 04                        add rdx,4\r
- 000001C5  48/ C1 E8 20                        shr rax,32\r
- 000001C9  66| 0B C0                   or ax,ax\r
- 000001CC  75 07                       jnz LenLower\r
-\r
- 000001CE                      LenLower32:\r
- 000001CE  C1 E8 10                    shr eax,16\r
- 000001D1  48/ 83 C2 02                        add rdx,2\r
- 000001D5  2C 01               LenLower:   sub al, 1\r
- 000001D7  48/ 83 D2 00                        adc rdx, 0\r
-                               ;;; Calculate the length of the match. If it is longer than MAX_MATCH,\r
-                               ;;; then automatically accept it as the best possible match and leave.\r
-\r
- 000001DB  48/ 8D 04 3A                        lea rax, [rdi + rdx]\r
- 000001DF  49/ 2B C1                   sub rax, r9\r
- 000001E2  3D 00000102                 cmp eax, MAX_MATCH\r
- 000001E7  7D 3D                       jge LenMaximum\r
-\r
-                               ;;; If the length of the match is not longer than the best match we\r
-                               ;;; have so far, then forget it and return to the lookup loop.\r
-                               ;///////////////////////////////////\r
-\r
- 000001E9  41/ 3B C3                   cmp eax, r11d\r
- 000001EC  7F 11                       jg  LongerMatch\r
-\r
- 000001EE  4B/ 8D 34 13                        lea rsi,[r10+r11]\r
-\r
- 000001F2  48/ 8B 79 60                        mov rdi, prev_ad\r
- 000001F6  8B 54 24 C0                 mov edx, [chainlenwmask]\r
- 000001FA  E9 FFFFFF24                 jmp LookupLoop\r
-\r
-                               ;;;         s->match_start = cur_match;\r
-                               ;;;         best_len = len;\r
-                               ;;;         if (len >= nice_match) break;\r
-                               ;;;         scan_end = *(ushf*)(scan+best_len-1);\r
-\r
- 000001FF                      LongerMatch:\r
- 000001FF  44/ 8B D8                   mov r11d, eax\r
- 00000202  44/ 89 81                   mov match_start, r8d\r
-          00000098\r
- 00000209  3B 44 24 C8                 cmp eax, [nicematch]\r
- 0000020D  7D 24                       jge LeaveNow\r
-\r
- 0000020F  4A/ 8D 34 10                        lea rsi,[r10+rax]\r
-\r
- 00000213  42/ 0F B7 5C 08             movzx   ebx, word ptr [r9 + rax - 1]\r
-          FF\r
- 00000219  48/ 8B 79 60                        mov rdi, prev_ad\r
- 0000021D  8B 54 24 C0                 mov edx, [chainlenwmask]\r
- 00000221  E9 FFFFFEFD                 jmp LookupLoop\r
-\r
-                               ;;; Accept the current string, with the maximum possible length.\r
-\r
- 00000226                      LenMaximum:\r
- 00000226  41/ BB                      mov r11d,MAX_MATCH\r
-          00000102\r
- 0000022C  44/ 89 81                   mov match_start, r8d\r
-          00000098\r
-\r
-                               ;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;\r
-                               ;;; return s->lookahead;\r
-\r
- 00000233                      LeaveNow:\r
-                               IFDEF INFOZIP\r
-                               ELSE\r
- 00000233  8B 81 0000009C              mov eax, Lookahead\r
- 00000239  44/ 3B D8                   cmp r11d, eax\r
- 0000023C  41/ 0F 4E C3                        cmovng eax, r11d\r
-                               ENDIF\r
-\r
-                               ;;; Restore the stack and return from whence we came.\r
-\r
-\r
- 00000240  48/ 8B 74 24                        mov rsi,[save_rsi]\r
-          D8\r
- 00000245  48/ 8B 7C 24                        mov rdi,[save_rdi]\r
-          D0\r
- 0000024A  48/ 8B 5C 24                        mov rbx,[save_rbx]\r
-          E0\r
- 0000024F  48/ 8B 6C 24                        mov rbp,[save_rbp]\r
-          E8\r
- 00000254  4C/ 8B 64 24                        mov r12,[save_r12]\r
-          F0\r
- 00000259  4C/ 8B 6C 24                        mov r13,[save_r13]\r
-          F8\r
-                               ;        mov r14,[save_r14]\r
-                               ;        mov r15,[save_r15]\r
-\r
-\r
- 0000025E  C3                          ret 0\r
-                               ; please don't remove this string !\r
-                               ; Your can freely use gvmat64 in any free or commercial app\r
-                               ; but it is far better don't remove the string in the binary!\r
- 0000025F  0D 0A 61 73 6D          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\r
-          36 38 36 20 77\r
-          69 74 68 20 6D\r
-          61 73 6D 2C 20\r
-          6F 70 74 69 6D\r
-          69 73 65 64 20\r
-          61 73 73 65 6D\r
-          62 6C 79 20 63\r
-          6F 64 65 20 66\r
-          72 6F 6D 20 42\r
-          72 69 61 6E 20\r
-          52 61 69 74 65\r
-          72 2C 20 77 72\r
-          69 74 74 65 6E\r
-          20 31 39 39 38\r
-          2C 20 63 6F 6E\r
-          76 65 72 74 65\r
-          64 20 74 6F 20\r
-          61 6D 64 20 36\r
-          34 20 62 79 20\r
-          47 69 6C 6C 65\r
-          73 20 56 6F 6C\r
-          6C 61 6E 74 20\r
-          32 30 30 35 0D\r
-          0A 00\r
- 000002D9                      longest_match   ENDP\r
-\r
- 000002D9                      match_init PROC\r
- 000002D9  C3                    ret 0\r
- 000002DA                      match_init ENDP\r
-\r
-\r
-                               END\r
-\fMicrosoft (R) Macro Assembler (x64) Version 9.00.21022.08   06/15/10 10:54:08\r
-gvmat64.asm                                                 Symbols 2 - 1\r
-\r
-\r
-\r
-\r
-Procedures, parameters, and locals:\r
-\r
-                N a m e                 Type     Value    Attr\r
-\r
-longest_match  . . . . . . . . .       P        00000000 _TEXT Length= 000002D9 Public\r
-  LastMatchGood  . . . . . . . .       L        0000003D _TEXT \r
-  LookupLoop1  . . . . . . . . .       L        000000B2 _TEXT \r
-  LoopEntry1 . . . . . . . . . .       L        000000CF _TEXT \r
-  LookupLoop2  . . . . . . . . .       L        000000D7 _TEXT \r
-  LoopEntry2 . . . . . . . . . .       L        000000F4 _TEXT \r
-  LookupLoop4  . . . . . . . . .       L        000000FC _TEXT \r
-  LoopEntry4 . . . . . . . . . .       L        00000119 _TEXT \r
-  LookupLoop . . . . . . . . . .       L        00000123 _TEXT \r
-  LoopEntry  . . . . . . . . . .       L        00000140 _TEXT \r
-  LookupLoopIsZero . . . . . . .       L        0000014C _TEXT \r
-  LoopCmps . . . . . . . . . . .       L        00000181 _TEXT \r
-  LeaveLoopCmps16  . . . . . . .       L        000001AB _TEXT \r
-  LeaveLoopCmps8 . . . . . . . .       L        000001AF _TEXT \r
-  LeaveLoopCmps  . . . . . . . .       L        000001B3 _TEXT \r
-  LenLower32 . . . . . . . . . .       L        000001CE _TEXT \r
-  LenLower . . . . . . . . . . .       L        000001D5 _TEXT \r
-  LongerMatch  . . . . . . . . .       L        000001FF _TEXT \r
-  LenMaximum . . . . . . . . . .       L        00000226 _TEXT \r
-  LeaveNow . . . . . . . . . . .       L        00000233 _TEXT \r
-match_init . . . . . . . . . . .       P        000002D9 _TEXT Length= 00000001 Public\r
-\r
-\r
-Symbols:\r
-\r
-                N a m e                 Type     Value    Attr\r
-\r
-LocalVarsSize  . . . . . . . . .       Number   00000048h   \r
-Lookahead  . . . . . . . . . . .       Text     [ rcx + dsLookahead]\r
-MAX_MATCH  . . . . . . . . . . .       Number   00000102h   \r
-MIN_LOOKAHEAD  . . . . . . . . .       Number   00000106h   \r
-MIN_MATCH  . . . . . . . . . . .       Number   00000003h   \r
-WMask  . . . . . . . . . . . . .       Text     [ rcx + dsWMask]\r
-chainlenwmask  . . . . . . . . .       Text     rsp + 8 - LocalVarsSize\r
-dsGoodMatch  . . . . . . . . . .       Number   000000B4h   \r
-dsLookahead  . . . . . . . . . .       Number   0000009Ch   \r
-dsMatchLen . . . . . . . . . . .       Number   00000088h   \r
-dsMatchStart . . . . . . . . . .       Number   00000098h   \r
-dsMaxChainLen  . . . . . . . . .       Number   000000A4h   \r
-dsNiceMatch  . . . . . . . . . .       Number   000000B8h   \r
-dsPrevLen  . . . . . . . . . . .       Number   000000A0h   \r
-dsPrevMatch  . . . . . . . . . .       Number   0000008Ch   \r
-dsPrev . . . . . . . . . . . . .       Number   00000060h   \r
-dsStrStart . . . . . . . . . . .       Number   00000094h   \r
-dsWMask  . . . . . . . . . . . .       Number   0000004Ch   \r
-dsWSize  . . . . . . . . . . . .       Number   00000044h   \r
-dsWindow . . . . . . . . . . . .       Number   00000050h   \r
-good_match . . . . . . . . . . .       Text     [ rcx + dsGoodMatch]\r
-match_start  . . . . . . . . . .       Text     [ rcx + dsMatchStart]\r
-max_chain_length . . . . . . . .       Text     [ rcx + dsMaxChainLen]\r
-nice_match . . . . . . . . . . .       Text     [ rcx + dsNiceMatch]\r
-nicematch  . . . . . . . . . . .       Text     (rsp + 16 - LocalVarsSize)\r
-prev_ad  . . . . . . . . . . . .       Text     [ rcx + dsPrev]\r
-prev_length  . . . . . . . . . .       Text     [ rcx + dsPrevLen]\r
-save_r12 . . . . . . . . . . . .       Text     rsp + 56 - LocalVarsSize\r
-save_r13 . . . . . . . . . . . .       Text     rsp + 64 - LocalVarsSize\r
-save_rbp . . . . . . . . . . . .       Text     rsp + 48 - LocalVarsSize\r
-save_rbx . . . . . . . . . . . .       Text     rsp + 40 - LocalVarsSize\r
-save_rdi . . . . . . . . . . . .       Text     rsp + 24 - LocalVarsSize\r
-save_rsi . . . . . . . . . . . .       Text     rsp + 32 - LocalVarsSize\r
-strstart . . . . . . . . . . . .       Text     [ rcx + dsStrStart]\r
-window_ad  . . . . . . . . . . .       Text     [ rcx + dsWindow]\r
-window_size  . . . . . . . . . .       Text     [ rcx + dsWSize]\r
-zlib1222add  . . . . . . . . . .       Number   00000008h   \r
-\r
-          0 Warnings\r
-          0 Errors\r
diff --git a/zlib/contrib/masmx64/gvmat64.obj b/zlib/contrib/masmx64/gvmat64.obj
deleted file mode 100644 (file)
index 7a7384e..0000000
Binary files a/zlib/contrib/masmx64/gvmat64.obj and /dev/null differ
diff --git a/zlib/contrib/masmx64/inffasx64.lst b/zlib/contrib/masmx64/inffasx64.lst
deleted file mode 100644 (file)
index 57bbf75..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-Microsoft (R) Macro Assembler (x64) Version 9.00.21022.08   06/15/10 10:54:08\r
-inffasx64.asm                                               Page 1 - 1\r
-\r
-\r
-                               ; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding\r
-                               ; version for AMD64 on Windows using Microsoft C compiler\r
-                               ;\r
-                               ; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c\r
-                               ; inffasx64.asm is called by inffas8664.c, which contain more info.\r
-\r
-\r
-                               ; to compile this file, I use option\r
-                               ;   ml64.exe /Flinffasx64 /c /Zi inffasx64.asm\r
-                               ;   with Microsoft Macro Assembler (x64) for AMD64\r
-                               ;\r
-\r
-                               ; This file compile with Microsoft Macro Assembler (x64) for AMD64\r
-                               ;\r
-                               ;   ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK\r
-                               ;\r
-                               ;   (you can get Windows WDK with ml64 for AMD64 from\r
-                               ;      http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)\r
-                               ;\r
-\r
-\r
- 00000000                      .code\r
- 00000000                      inffas8664fnc PROC\r
-\r
-                               ; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and\r
-                               ; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp\r
-                               ;\r
-                               ; All registers must be preserved across the call, except for\r
-                               ;   rax, rcx, rdx, r8, r-9, r10, and r11, which are scratch.\r
-\r
-\r
- 00000000  48/ 89 74 24                        mov [rsp-8],rsi\r
-          F8\r
- 00000005  48/ 89 7C 24                        mov [rsp-16],rdi\r
-          F0\r
- 0000000A  4C/ 89 64 24                        mov [rsp-24],r12\r
-          E8\r
- 0000000F  4C/ 89 6C 24                        mov [rsp-32],r13\r
-          E0\r
- 00000014  4C/ 89 74 24                        mov [rsp-40],r14\r
-          D8\r
- 00000019  4C/ 89 7C 24                        mov [rsp-48],r15\r
-          D0\r
- 0000001E  48/ 89 5C 24                        mov [rsp-56],rbx\r
-          C8\r
-\r
- 00000023  48/ 8B C1                   mov rax,rcx\r
-\r
- 00000026  48/ 89 68 08                        mov     [rax+8], rbp       ; /* save regs rbp and rsp */\r
- 0000002A  48/ 89 20                   mov     [rax], rsp\r
-\r
- 0000002D  48/ 8B E0                   mov     rsp, rax          ; /* make rsp point to &ar */\r
-\r
- 00000030  48/ 8B 74 24                        mov     rsi, [rsp+16]      ; /* rsi  = in */\r
-          10\r
- 00000035  48/ 8B 7C 24                        mov     rdi, [rsp+32]      ; /* rdi  = out */\r
-          20\r
- 0000003A  4C/ 8B 4C 24                        mov     r9, [rsp+24]       ; /* r9   = last */\r
-          18\r
- 0000003F  4C/ 8B 54 24                        mov     r10, [rsp+48]      ; /* r10  = end */\r
-          30\r
- 00000044  48/ 8B 6C 24                        mov     rbp, [rsp+64]      ; /* rbp  = lcode */\r
-          40\r
- 00000049  4C/ 8B 5C 24                        mov     r11, [rsp+72]      ; /* r11  = dcode */\r
-          48\r
- 0000004E  48/ 8B 54 24                        mov     rdx, [rsp+80]      ; /* rdx  = hold */\r
-          50\r
- 00000053  8B 5C 24 58                 mov     ebx, [rsp+88]      ; /* ebx  = bits */\r
- 00000057  44/ 8B 64 24                        mov     r12d, [rsp+100]    ; /* r12d = lmask */\r
-          64\r
- 0000005C  44/ 8B 6C 24                        mov     r13d, [rsp+104]    ; /* r13d = dmask */\r
-          68\r
-                                                                         ; /* r14d = len */\r
-                                                                         ; /* r15d = dist */\r
-\r
-\r
- 00000061  FC                          cld\r
- 00000062  4C/ 3B D7                   cmp     r10, rdi\r
- 00000065  74 05                       je      L_one_time           ; /* if only one decode left */\r
- 00000067  4C/ 3B CE                   cmp     r9, rsi\r
-\r
- 0000006A  75 2A                   jne L_do_loop\r
-\r
-\r
- 0000006C                      L_one_time:\r
- 0000006C  4D/ 8B C4                   mov     r8, r12           ; /* r8 = lmask */\r
- 0000006F  80 FB 20                    cmp     bl, 32\r
- 00000072  77 50                       ja      L_get_length_code_one_time\r
-\r
- 00000074  AD                          lodsd                         ; /* eax = *(uint *)in++ */\r
- 00000075  8A CB                       mov     cl, bl            ; /* cl = bits, needs it for shifting */\r
- 00000077  80 C3 20                    add     bl, 32             ; /* bits += 32 */\r
- 0000007A  48/ D3 E0                   shl     rax, cl\r
- 0000007D  48/ 0B D0                   or      rdx, rax          ; /* hold |= *((uint *)in)++ << bits */\r
- 00000080  EB 42                       jmp     L_get_length_code_one_time\r
-\r
-                               ALIGN 4\r
- 00000084                      L_while_test:\r
- 00000084  4C/ 3B D7                   cmp     r10, rdi\r
- 00000087  0F 86 0000023F              jbe     L_break_loop\r
- 0000008D  4C/ 3B CE                   cmp     r9, rsi\r
- 00000090  0F 86 00000236              jbe     L_break_loop\r
-\r
- 00000096                      L_do_loop:\r
- 00000096  4D/ 8B C4                   mov     r8, r12           ; /* r8 = lmask */\r
- 00000099  80 FB 20                    cmp     bl, 32\r
- 0000009C  77 0C                       ja      L_get_length_code    ; /* if (32 < bits) */\r
-\r
- 0000009E  AD                          lodsd                         ; /* eax = *(uint *)in++ */\r
- 0000009F  8A CB                       mov     cl, bl            ; /* cl = bits, needs it for shifting */\r
- 000000A1  80 C3 20                    add     bl, 32             ; /* bits += 32 */\r
- 000000A4  48/ D3 E0                   shl     rax, cl\r
- 000000A7  48/ 0B D0                   or      rdx, rax          ; /* hold |= *((uint *)in)++ << bits */\r
-\r
- 000000AA                      L_get_length_code:\r
- 000000AA  4C/ 23 C2                   and     r8, rdx            ; /* r8 &= hold */\r
- 000000AD  42/ 8B 44 85                        mov     eax, [rbp+r8*4]  ; /* eax = lcode[hold & lmask] */\r
-          00\r
-\r
- 000000B2  8A CC                       mov     cl, ah            ; /* cl = this.bits */\r
- 000000B4  2A DC                       sub     bl, ah            ; /* bits -= this.bits */\r
- 000000B6  48/ D3 EA                   shr     rdx, cl           ; /* hold >>= this.bits */\r
-\r
- 000000B9  84 C0                       test    al, al\r
- 000000BB  75 23                       jnz     L_test_for_length_base ; /* if (op != 0) 45.7% */\r
-\r
- 000000BD  4D/ 8B C4                   mov     r8, r12            ; /* r8 = lmask */\r
- 000000C0  C1 E8 10                    shr     eax, 16            ; /* output this.val char */\r
- 000000C3  AA                          stosb\r
-\r
- 000000C4                      L_get_length_code_one_time:\r
- 000000C4  4C/ 23 C2                   and     r8, rdx            ; /* r8 &= hold */\r
- 000000C7  42/ 8B 44 85                        mov     eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */\r
-          00\r
-\r
- 000000CC                      L_dolen:\r
- 000000CC  8A CC                       mov     cl, ah            ; /* cl = this.bits */\r
- 000000CE  2A DC                       sub     bl, ah            ; /* bits -= this.bits */\r
- 000000D0  48/ D3 EA                   shr     rdx, cl           ; /* hold >>= this.bits */\r
-\r
- 000000D3  84 C0                       test    al, al\r
- 000000D5  75 09                       jnz     L_test_for_length_base ; /* if (op != 0) 45.7% */\r
-\r
- 000000D7  C1 E8 10                    shr     eax, 16            ; /* output this.val char */\r
- 000000DA  AA                          stosb\r
- 000000DB  EB A7                       jmp     L_while_test\r
-\r
-                               ALIGN 4\r
- 000000E0                      L_test_for_length_base:\r
- 000000E0  44/ 8B F0                   mov     r14d, eax         ; /* len = this */\r
- 000000E3  41/ C1 EE 10                        shr     r14d, 16           ; /* len = this.val */\r
- 000000E7  8A C8                       mov     cl, al\r
-\r
- 000000E9  A8 10                       test    al, 16\r
- 000000EB  0F 84 000000C7              jz      L_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */\r
- 000000F1  80 E1 0F                    and     cl, 15             ; /* op &= 15 */\r
- 000000F4  74 12                       jz      L_decode_distance    ; /* if (!op) */\r
-\r
- 000000F6                      L_add_bits_to_len:\r
- 000000F6  2A D9                       sub     bl, cl\r
- 000000F8  33 C0                       xor     eax, eax\r
- 000000FA  FF C0                       inc     eax\r
- 000000FC  D3 E0                       shl     eax, cl\r
- 000000FE  FF C8                       dec     eax\r
- 00000100  23 C2                       and     eax, edx          ; /* eax &= hold */\r
- 00000102  48/ D3 EA                   shr     rdx, cl\r
- 00000105  44/ 03 F0                   add     r14d, eax         ; /* len += hold & mask[op] */\r
-\r
- 00000108                      L_decode_distance:\r
- 00000108  4D/ 8B C5                   mov     r8, r13           ; /* r8 = dmask */\r
- 0000010B  80 FB 20                    cmp     bl, 32\r
- 0000010E  77 0C                       ja      L_get_distance_code  ; /* if (32 < bits) */\r
-\r
- 00000110  AD                          lodsd                         ; /* eax = *(uint *)in++ */\r
- 00000111  8A CB                       mov     cl, bl            ; /* cl = bits, needs it for shifting */\r
- 00000113  80 C3 20                    add     bl, 32             ; /* bits += 32 */\r
- 00000116  48/ D3 E0                   shl     rax, cl\r
- 00000119  48/ 0B D0                   or      rdx, rax          ; /* hold |= *((uint *)in)++ << bits */\r
-\r
- 0000011C                      L_get_distance_code:\r
- 0000011C  4C/ 23 C2                   and     r8, rdx           ; /* r8 &= hold */\r
- 0000011F  43/ 8B 04 83                        mov     eax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */\r
-\r
- 00000123                      L_dodist:\r
- 00000123  44/ 8B F8                   mov     r15d, eax         ; /* dist = this */\r
- 00000126  41/ C1 EF 10                        shr     r15d, 16           ; /* dist = this.val */\r
- 0000012A  8A CC                       mov     cl, ah\r
- 0000012C  2A DC                       sub     bl, ah            ; /* bits -= this.bits */\r
- 0000012E  48/ D3 EA                   shr     rdx, cl           ; /* hold >>= this.bits */\r
- 00000131  8A C8                       mov     cl, al            ; /* cl = this.op */\r
-\r
- 00000133  A8 10                       test    al, 16             ; /* if ((op & 16) == 0) */\r
- 00000135  0F 84 0000009D              jz      L_test_for_second_level_dist\r
- 0000013B  80 E1 0F                    and     cl, 15             ; /* op &= 15 */\r
- 0000013E  74 50                       jz      L_check_dist_one\r
-\r
- 00000140                      L_add_bits_to_dist:\r
- 00000140  2A D9                       sub     bl, cl\r
- 00000142  33 C0                       xor     eax, eax\r
- 00000144  FF C0                       inc     eax\r
- 00000146  D3 E0                       shl     eax, cl\r
- 00000148  FF C8                       dec     eax                 ; /* (1 << op) - 1 */\r
- 0000014A  23 C2                       and     eax, edx          ; /* eax &= hold */\r
- 0000014C  48/ D3 EA                   shr     rdx, cl\r
- 0000014F  44/ 03 F8                   add     r15d, eax         ; /* dist += hold & ((1 << op) - 1) */\r
-\r
- 00000152                      L_check_window:\r
- 00000152  4C/ 8B C6                   mov     r8, rsi           ; /* save in so from can use it's reg */\r
- 00000155  48/ 8B C7                   mov     rax, rdi\r
- 00000158  48/ 2B 44 24                        sub     rax, [rsp+40]      ; /* nbytes = out - beg */\r
-          28\r
-\r
- 0000015D  41/ 3B C7                   cmp     eax, r15d\r
- 00000160  0F 82 00000092              jb      L_clip_window        ; /* if (dist > nbytes) 4.2% */\r
-\r
- 00000166  41/ 8B CE                   mov     ecx, r14d         ; /* ecx = len */\r
- 00000169  48/ 8B F7                   mov     rsi, rdi\r
- 0000016C  49/ 2B F7                   sub     rsi, r15          ; /* from = out - dist */\r
-\r
- 0000016F  D1 F9                       sar     ecx, 1\r
- 00000171  73 12                       jnc     L_copy_two           ; /* if len % 2 == 0 */\r
-\r
- 00000173  F3/ 66| A5                  rep     movsw\r
- 00000176  8A 06                       mov     al, [rsi]\r
- 00000178  88 07                       mov     [rdi], al\r
- 0000017A  48/ FF C7                   inc     rdi\r
-\r
- 0000017D  49/ 8B F0                   mov     rsi, r8           ; /* move in back to %rsi, toss from */\r
- 00000180  E9 FFFFFEFF                 jmp     L_while_test\r
-\r
- 00000185                      L_copy_two:\r
- 00000185  F3/ 66| A5                  rep     movsw\r
- 00000188  49/ 8B F0                   mov     rsi, r8           ; /* move in back to %rsi, toss from */\r
- 0000018B  E9 FFFFFEF4                 jmp     L_while_test\r
-\r
-                               ALIGN 4\r
- 00000190                      L_check_dist_one:\r
- 00000190  41/ 83 FF 01                        cmp     r15d, 1            ; /* if dist 1, is a memset */\r
- 00000194  75 BC                       jne     L_check_window\r
- 00000196  48/ 39 7C 24                        cmp     [rsp+40], rdi      ; /* if out == beg, outside window */\r
-          28\r
- 0000019B  74 B5                       je      L_check_window\r
-\r
- 0000019D  41/ 8B CE                   mov     ecx, r14d         ; /* ecx = len */\r
- 000001A0  8A 47 FF                    mov     al, [rdi-1]\r
- 000001A3  8A E0                       mov     ah, al\r
-\r
- 000001A5  D1 F9                       sar     ecx, 1\r
- 000001A7  73 05                       jnc     L_set_two\r
- 000001A9  88 07                       mov     [rdi], al\r
- 000001AB  48/ FF C7                   inc     rdi\r
-\r
- 000001AE                      L_set_two:\r
- 000001AE  F3/ 66| AB                  rep     stosw\r
- 000001B1  E9 FFFFFECE                 jmp     L_while_test\r
-\r
-                               ALIGN 4\r
- 000001B8                      L_test_for_second_level_length:\r
- 000001B8  A8 40                       test    al, 64\r
- 000001BA  0F 85 000000E0              jnz     L_test_for_end_of_block ; /* if ((op & 64) != 0) */\r
-\r
- 000001C0  33 C0                       xor     eax, eax\r
- 000001C2  FF C0                       inc     eax\r
- 000001C4  D3 E0                       shl     eax, cl\r
- 000001C6  FF C8                       dec     eax\r
- 000001C8  23 C2                       and     eax, edx         ; /* eax &= hold */\r
- 000001CA  41/ 03 C6                   add     eax, r14d        ; /* eax += len */\r
- 000001CD  8B 44 85 00                 mov     eax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/\r
- 000001D1  E9 FFFFFEF6                 jmp     L_dolen\r
-\r
-                               ALIGN 4\r
- 000001D8                      L_test_for_second_level_dist:\r
- 000001D8  A8 40                       test    al, 64\r
- 000001DA  0F 85 000000D8              jnz     L_invalid_distance_code ; /* if ((op & 64) != 0) */\r
-\r
- 000001E0  33 C0                       xor     eax, eax\r
- 000001E2  FF C0                       inc     eax\r
- 000001E4  D3 E0                       shl     eax, cl\r
- 000001E6  FF C8                       dec     eax\r
- 000001E8  23 C2                       and     eax, edx         ; /* eax &= hold */\r
- 000001EA  41/ 03 C7                   add     eax, r15d        ; /* eax += dist */\r
- 000001ED  41/ 8B 04 83                        mov     eax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/\r
- 000001F1  E9 FFFFFF2D                 jmp     L_dodist\r
-\r
-                               ALIGN 4\r
- 000001F8                      L_clip_window:\r
- 000001F8  8B C8                       mov     ecx, eax         ; /* ecx = nbytes */\r
- 000001FA  8B 44 24 5C                 mov     eax, [rsp+92]     ; /* eax = wsize, prepare for dist cmp */\r
- 000001FE  F7 D9                       neg     ecx                ; /* nbytes = -nbytes */\r
-\r
- 00000200  41/ 3B C7                   cmp     eax, r15d\r
- 00000203  0F 82 000000B9              jb      L_invalid_distance_too_far ; /* if (dist > wsize) */\r
-\r
- 00000209  41/ 03 CF                   add     ecx, r15d         ; /* nbytes = dist - nbytes */\r
- 0000020C  83 7C 24 60 00              cmp     dword ptr [rsp+96], 0\r
- 00000211  75 21                       jne     L_wrap_around_window ; /* if (write != 0) */\r
-\r
- 00000213  48/ 8B 74 24                        mov     rsi, [rsp+56]     ; /* from  = window */\r
-          38\r
- 00000218  2B C1                       sub     eax, ecx         ; /* eax  -= nbytes */\r
- 0000021A  48/ 03 F0                   add     rsi, rax         ; /* from += wsize - nbytes */\r
-\r
- 0000021D  41/ 8B C6                   mov     eax, r14d        ; /* eax = len */\r
- 00000220  44/ 3B F1                   cmp     r14d, ecx\r
- 00000223  76 6F                       jbe     L_do_copy           ; /* if (nbytes >= len) */\r
-\r
- 00000225  2B C1                       sub     eax, ecx         ; /* eax -= nbytes */\r
- 00000227  F3/ A4                      rep     movsb\r
- 00000229  48/ 8B F7                   mov     rsi, rdi\r
- 0000022C  49/ 2B F7                   sub     rsi, r15         ; /* from = &out[ -dist ] */\r
- 0000022F  EB 63                       jmp     L_do_copy\r
-\r
-                               ALIGN 4\r
- 00000234                      L_wrap_around_window:\r
- 00000234  8B 44 24 60                 mov     eax, [rsp+96]     ; /* eax = write */\r
- 00000238  3B C8                       cmp     ecx, eax\r
- 0000023A  76 38                       jbe     L_contiguous_in_window ; /* if (write >= nbytes) */\r
-\r
- 0000023C  8B 74 24 5C                 mov     esi, [rsp+92]     ; /* from  = wsize */\r
- 00000240  48/ 03 74 24                        add     rsi, [rsp+56]     ; /* from += window */\r
-          38\r
- 00000245  48/ 03 F0                   add     rsi, rax         ; /* from += write */\r
- 00000248  48/ 2B F1                   sub     rsi, rcx         ; /* from -= nbytes */\r
- 0000024B  2B C8                       sub     ecx, eax         ; /* nbytes -= write */\r
-\r
- 0000024D  41/ 8B C6                   mov     eax, r14d        ; /* eax = len */\r
- 00000250  3B C1                       cmp     eax, ecx\r
- 00000252  76 40                       jbe     L_do_copy           ; /* if (nbytes >= len) */\r
-\r
- 00000254  2B C1                       sub     eax, ecx         ; /* len -= nbytes */\r
- 00000256  F3/ A4                      rep     movsb\r
- 00000258  48/ 8B 74 24                        mov     rsi, [rsp+56]     ; /* from = window */\r
-          38\r
- 0000025D  8B 4C 24 60                 mov     ecx, [rsp+96]     ; /* nbytes = write */\r
- 00000261  3B C1                       cmp     eax, ecx\r
- 00000263  76 2F                       jbe     L_do_copy           ; /* if (nbytes >= len) */\r
-\r
- 00000265  2B C1                       sub     eax, ecx         ; /* len -= nbytes */\r
- 00000267  F3/ A4                      rep     movsb\r
- 00000269  48/ 8B F7                   mov     rsi, rdi\r
- 0000026C  49/ 2B F7                   sub     rsi, r15         ; /* from = out - dist */\r
- 0000026F  EB 23                       jmp     L_do_copy\r
-\r
-                               ALIGN 4\r
- 00000274                      L_contiguous_in_window:\r
- 00000274  48/ 8B 74 24                        mov     rsi, [rsp+56]     ; /* rsi = window */\r
-          38\r
- 00000279  48/ 03 F0                   add     rsi, rax\r
- 0000027C  48/ 2B F1                   sub     rsi, rcx         ; /* from += write - nbytes */\r
-\r
- 0000027F  41/ 8B C6                   mov     eax, r14d        ; /* eax = len */\r
- 00000282  3B C1                       cmp     eax, ecx\r
- 00000284  76 0E                       jbe     L_do_copy           ; /* if (nbytes >= len) */\r
-\r
- 00000286  2B C1                       sub     eax, ecx         ; /* len -= nbytes */\r
- 00000288  F3/ A4                      rep     movsb\r
- 0000028A  48/ 8B F7                   mov     rsi, rdi\r
- 0000028D  49/ 2B F7                   sub     rsi, r15         ; /* from = out - dist */\r
- 00000290  EB 02                       jmp     L_do_copy           ; /* if (nbytes >= len) */\r
-\r
-                               ALIGN 4\r
- 00000294                      L_do_copy:\r
- 00000294  8B C8                       mov     ecx, eax         ; /* ecx = len */\r
- 00000296  F3/ A4                      rep     movsb\r
-\r
- 00000298  49/ 8B F0                   mov     rsi, r8          ; /* move in back to %esi, toss from */\r
- 0000029B  E9 FFFFFDE4                 jmp     L_while_test\r
-\r
- 000002A0                      L_test_for_end_of_block:\r
- 000002A0  A8 20                       test    al, 32\r
- 000002A2  74 0A                       jz      L_invalid_literal_length_code\r
- 000002A4  C7 44 24 74                 mov     dword ptr [rsp+116], 1\r
-          00000001\r
- 000002AC  EB 26                       jmp     L_break_loop_with_status\r
-\r
- 000002AE                      L_invalid_literal_length_code:\r
- 000002AE  C7 44 24 74                 mov     dword ptr [rsp+116], 2\r
-          00000002\r
- 000002B6  EB 1C                       jmp     L_break_loop_with_status\r
-\r
- 000002B8                      L_invalid_distance_code:\r
- 000002B8  C7 44 24 74                 mov     dword ptr [rsp+116], 3\r
-          00000003\r
- 000002C0  EB 12                       jmp     L_break_loop_with_status\r
-\r
- 000002C2                      L_invalid_distance_too_far:\r
- 000002C2  C7 44 24 74                 mov     dword ptr [rsp+116], 4\r
-          00000004\r
- 000002CA  EB 08                       jmp     L_break_loop_with_status\r
-\r
- 000002CC                      L_break_loop:\r
- 000002CC  C7 44 24 74                 mov     dword ptr [rsp+116], 0\r
-          00000000\r
-\r
- 000002D4                      L_break_loop_with_status:\r
-                               ; /* put in, out, bits, and hold back into ar and pop esp */\r
- 000002D4  48/ 89 74 24                        mov     [rsp+16], rsi     ; /* in */\r
-          10\r
- 000002D9  48/ 89 7C 24                        mov     [rsp+32], rdi     ; /* out */\r
-          20\r
- 000002DE  89 5C 24 58                 mov     [rsp+88], ebx     ; /* bits */\r
- 000002E2  48/ 89 54 24                        mov     [rsp+80], rdx     ; /* hold */\r
-          50\r
-\r
- 000002E7  48/ 8B 04 24                        mov     rax, [rsp]       ; /* restore rbp and rsp */\r
- 000002EB  48/ 8B 6C 24                        mov     rbp, [rsp+8]\r
-          08\r
- 000002F0  48/ 8B E0                   mov     rsp, rax\r
-\r
-\r
-\r
- 000002F3  48/ 8B 74 24                        mov rsi,[rsp-8]\r
-          F8\r
- 000002F8  48/ 8B 7C 24                        mov rdi,[rsp-16]\r
-          F0\r
- 000002FD  4C/ 8B 64 24                        mov r12,[rsp-24]\r
-          E8\r
- 00000302  4C/ 8B 6C 24                        mov r13,[rsp-32]\r
-          E0\r
- 00000307  4C/ 8B 74 24                        mov r14,[rsp-40]\r
-          D8\r
- 0000030C  4C/ 8B 7C 24                        mov r15,[rsp-48]\r
-          D0\r
- 00000311  48/ 8B 5C 24                        mov rbx,[rsp-56]\r
-          C8\r
-\r
- 00000316  C3                      ret 0\r
-                               ;          :\r
-                               ;          : "m" (ar)\r
-                               ;          : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",\r
-                               ;            "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"\r
-                               ;    );\r
-\r
- 00000317                      inffas8664fnc   ENDP\r
-                               ;_TEXT  ENDS\r
-                               END\r
-\fMicrosoft (R) Macro Assembler (x64) Version 9.00.21022.08   06/15/10 10:54:08\r
-inffasx64.asm                                               Symbols 2 - 1\r
-\r
-\r
-\r
-\r
-Procedures, parameters, and locals:\r
-\r
-                N a m e                 Type     Value    Attr\r
-\r
-inffas8664fnc  . . . . . . . . .       P        00000000 _TEXT Length= 00000317 Public\r
-  L_one_time . . . . . . . . . .       L        0000006C _TEXT \r
-  L_while_test . . . . . . . . .       L        00000084 _TEXT \r
-  L_do_loop  . . . . . . . . . .       L        00000096 _TEXT \r
-  L_get_length_code  . . . . . .       L        000000AA _TEXT \r
-  L_get_length_code_one_time . .       L        000000C4 _TEXT \r
-  L_dolen  . . . . . . . . . . .       L        000000CC _TEXT \r
-  L_test_for_length_base . . . .       L        000000E0 _TEXT \r
-  L_add_bits_to_len  . . . . . .       L        000000F6 _TEXT \r
-  L_decode_distance  . . . . . .       L        00000108 _TEXT \r
-  L_get_distance_code  . . . . .       L        0000011C _TEXT \r
-  L_dodist . . . . . . . . . . .       L        00000123 _TEXT \r
-  L_add_bits_to_dist . . . . . .       L        00000140 _TEXT \r
-  L_check_window . . . . . . . .       L        00000152 _TEXT \r
-  L_copy_two . . . . . . . . . .       L        00000185 _TEXT \r
-  L_check_dist_one . . . . . . .       L        00000190 _TEXT \r
-  L_set_two  . . . . . . . . . .       L        000001AE _TEXT \r
-  L_test_for_second_level_length .     L        000001B8 _TEXT \r
-  L_test_for_second_level_dist .       L        000001D8 _TEXT \r
-  L_clip_window  . . . . . . . .       L        000001F8 _TEXT \r
-  L_wrap_around_window . . . . .       L        00000234 _TEXT \r
-  L_contiguous_in_window . . . .       L        00000274 _TEXT \r
-  L_do_copy  . . . . . . . . . .       L        00000294 _TEXT \r
-  L_test_for_end_of_block  . . .       L        000002A0 _TEXT \r
-  L_invalid_literal_length_code        L        000002AE _TEXT \r
-  L_invalid_distance_code  . . .       L        000002B8 _TEXT \r
-  L_invalid_distance_too_far . .       L        000002C2 _TEXT \r
-  L_break_loop . . . . . . . . .       L        000002CC _TEXT \r
-  L_break_loop_with_status . . .       L        000002D4 _TEXT \r
-\r
-\r
-Symbols:\r
-\r
-                N a m e                 Type     Value    Attr\r
-\r
-\r
-          0 Warnings\r
-          0 Errors\r
diff --git a/zlib/contrib/masmx64/inffasx64.obj b/zlib/contrib/masmx64/inffasx64.obj
deleted file mode 100644 (file)
index fe4ff7d..0000000
Binary files a/zlib/contrib/masmx64/inffasx64.obj and /dev/null differ
index 92ac22a..03d20f8 100644 (file)
@@ -73,11 +73,6 @@ inflate_fast_use_mmx:
 \r
 \r
 _TEXT                  segment\r
-PUBLIC _inflate_fast\r
-\r
-ALIGN 4\r
-_inflate_fast:\r
-       jmp inflate_fast_entry\r
 \r
 \r
 \r
@@ -163,7 +158,8 @@ distbits_state       equ    (76+4+zlib1222sup)      ;/* state->distbits */
 ;SECTION .text\r
 \r
 ALIGN 4\r
-inflate_fast_entry:\r
+_inflate_fast proc near\r
+.FPO (16, 4, 0, 0, 1, 0)\r
        push  edi\r
        push  esi\r
        push  ebp\r
@@ -1078,6 +1074,7 @@ L_done:
        pop  esi\r
        pop  edi\r
        ret\r
+_inflate_fast endp\r
 \r
 _TEXT  ends\r
 end\r
index 1eaf555..3b09212 100644 (file)
@@ -195,6 +195,7 @@ dsNiceMatch equ 136+zlib1222add
     ELSE\r
     _longest_match      proc near\r
     ENDIF\r
+.FPO (9, 4, 0, 0, 1, 0)\r
 \r
 ;;; Save registers that the compiler may be using, and adjust esp to\r
 ;;; make room for our stack frame.\r
diff --git a/zlib/contrib/minizip/Makefile.am b/zlib/contrib/minizip/Makefile.am
new file mode 100644 (file)
index 0000000..d343011
--- /dev/null
@@ -0,0 +1,45 @@
+lib_LTLIBRARIES = libminizip.la
+
+if COND_DEMOS
+bin_PROGRAMS = miniunzip minizip
+endif
+
+zlib_top_srcdir = $(top_srcdir)/../..
+zlib_top_builddir = $(top_builddir)/../..
+
+AM_CPPFLAGS = -I$(zlib_top_srcdir)
+AM_LDFLAGS = -L$(zlib_top_builddir)
+
+if WIN32
+iowin32_src = iowin32.c
+iowin32_h = iowin32.h
+endif
+
+libminizip_la_SOURCES = \
+       ioapi.c \
+       mztools.c \
+       unzip.c \
+       zip.c \
+       ${iowin32_src}
+
+libminizip_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:0:0 -lz
+
+minizip_includedir = $(includedir)/minizip
+minizip_include_HEADERS = \
+       crypt.h \
+       ioapi.h \
+       mztools.h \
+       unzip.h \
+       zip.h \
+       ${iowin32_h}
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = minizip.pc
+
+EXTRA_PROGRAMS = miniunzip minizip
+
+miniunzip_SOURCES = miniunz.c
+miniunzip_LDADD = libminizip.la
+
+minizip_SOURCES = minizip.c
+minizip_LDADD = libminizip.la -lz
diff --git a/zlib/contrib/minizip/configure.ac b/zlib/contrib/minizip/configure.ac
new file mode 100644 (file)
index 0000000..827a4e0
--- /dev/null
@@ -0,0 +1,32 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_INIT([minizip], [1.2.8], [bugzilla.redhat.com])
+AC_CONFIG_SRCDIR([minizip.c])
+AM_INIT_AUTOMAKE([foreign])
+LT_INIT
+
+AC_MSG_CHECKING([whether to build example programs])
+AC_ARG_ENABLE([demos], AC_HELP_STRING([--enable-demos], [build example programs]))
+AM_CONDITIONAL([COND_DEMOS], [test "$enable_demos" = yes])
+if test "$enable_demos" = yes
+then
+       AC_MSG_RESULT([yes])
+else
+       AC_MSG_RESULT([no])
+fi
+
+case "${host}" in
+       *-mingw* | mingw*)
+               WIN32="yes"
+               ;;
+       *)
+               ;;
+esac
+AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
+
+
+AC_SUBST([HAVE_UNISTD_H], [0])
+AC_CHECK_HEADER([unistd.h], [HAVE_UNISTD_H=1], [])
+AC_CONFIG_FILES([Makefile minizip.pc])
+AC_OUTPUT
index a01d08d..1e9e820 100644 (file)
@@ -32,7 +32,7 @@
 /***********************************************************************
  * Return the next byte in the pseudo-random sequence
  */
-static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)
+static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
 {
     unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an
                      * unpredictable manner on 16-bit systems; not a problem
@@ -45,7 +45,7 @@ static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)
 /***********************************************************************
  * Update the encryption keys with the next byte of plain text
  */
-static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)
+static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c)
 {
     (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
     (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
@@ -62,7 +62,7 @@ static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int
  * Initialize the encryption keys and the random header according to
  * the given password.
  */
-static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab)
+static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab)
 {
     *(pkeys+0) = 305419896L;
     *(pkeys+1) = 591751049L;
@@ -91,7 +91,7 @@ static int crypthead(const char* passwd,      /* password string */
                      unsigned char* buf,      /* where to write header */
                      int bufSize,
                      unsigned long* pkeys,
-                     const unsigned long* pcrc_32_tab,
+                     const z_crc_t* pcrc_32_tab,
                      unsigned long crcForCrypting)
 {
     int n;                       /* index in random header */
index 49958f6..7f5c191 100644 (file)
 
 */
 
-#if (defined(_WIN32))
+#if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS)))
         #define _CRT_SECURE_NO_WARNINGS
 #endif
 
+#if defined(__APPLE__) || defined(IOAPI_NO_64)
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
 #include "ioapi.h"
 
 voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
@@ -47,7 +59,7 @@ ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream
     else
     {
         uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
-        if ((tell_uLong) == ((uLong)-1))
+        if ((tell_uLong) == MAXU32)
             return (ZPOS64_T)-1;
         else
             return tell_uLong;
@@ -112,7 +124,7 @@ static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename,
         mode_fopen = "wb";
 
     if ((filename!=NULL) && (mode_fopen != NULL))
-        file = fopen64((const char*)filename, mode_fopen);
+        file = FOPEN_FUNC((const char*)filename, mode_fopen);
     return file;
 }
 
@@ -142,7 +154,7 @@ static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
 static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
 {
     ZPOS64_T ret;
-    ret = ftello64((FILE *)stream);
+    ret = FTELLO_FUNC((FILE *)stream);
     return ret;
 }
 
@@ -188,7 +200,7 @@ static long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T
     }
     ret = 0;
 
-    if(fseeko64((FILE *)stream, offset, fseek_origin) != 0)
+    if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
                         ret = -1;
 
     return ret;
index 8309c4c..8dcbdb0 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef _ZLIBIOAPI64_H
 #define _ZLIBIOAPI64_H
 
-#if (!defined(_WIN32)) && (!defined(WIN32))
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
 
   // 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.
@@ -38,6 +38,7 @@
         #ifndef _FILE_OFFSET_BIT
                 #define _FILE_OFFSET_BIT 64
         #endif
+
 #endif
 
 #include <stdio.h>
 #define ftello64 ftell
 #define fseeko64 fseek
 #else
+#ifdef __FreeBSD__
+#define fopen64 fopen
+#define ftello64 ftello
+#define fseeko64 fseeko
+#endif
 #ifdef _MSC_VER
  #define fopen64 fopen
  #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))
@@ -85,6 +91,8 @@ typedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T;
 typedef uint64_t ZPOS64_T;
 #else
 
+/* Maximum unsigned 32-bit value used as placeholder for zip64 */
+#define MAXU32 0xffffffff
 
 #if defined(_MSC_VER) || defined(__BORLANDC__)
 typedef unsigned __int64 ZPOS64_T;
index 6a2a883..a46d96c 100644 (file)
 #define INVALID_SET_FILE_POINTER ((DWORD)-1)
 #endif
 
+
+#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+#define IOWIN32_USING_WINRT_API 1
+#endif
+#endif
+
 voidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));
 uLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));
 uLong   ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
@@ -93,8 +100,22 @@ voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
+#ifdef IOWIN32_USING_WINRT_API
+#ifdef UNICODE
+    if ((filename!=NULL) && (dwDesiredAccess != 0))
+        hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+#else
+    if ((filename!=NULL) && (dwDesiredAccess != 0))
+    {
+        WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+        MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+        hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+    }
+#endif
+#else
     if ((filename!=NULL) && (dwDesiredAccess != 0))
         hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
 
     return win32_build_iowin(hFile);
 }
@@ -108,8 +129,17 @@ voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
+#ifdef IOWIN32_USING_WINRT_API
+    if ((filename!=NULL) && (dwDesiredAccess != 0))
+    {
+        WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+        MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+        hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+    }
+#else
     if ((filename!=NULL) && (dwDesiredAccess != 0))
         hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
 
     return win32_build_iowin(hFile);
 }
@@ -123,8 +153,13 @@ voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
+#ifdef IOWIN32_USING_WINRT_API
+    if ((filename!=NULL) && (dwDesiredAccess != 0))
+        hFile = CreateFile2((LPCWSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,NULL);
+#else
     if ((filename!=NULL) && (dwDesiredAccess != 0))
         hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
 
     return win32_build_iowin(hFile);
 }
@@ -138,8 +173,22 @@ voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mo
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
+#ifdef IOWIN32_USING_WINRT_API
+#ifdef UNICODE
+    if ((filename!=NULL) && (dwDesiredAccess != 0))
+        hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+#else
+    if ((filename!=NULL) && (dwDesiredAccess != 0))
+    {
+        WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+        MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+        hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+    }
+#endif
+#else
     if ((filename!=NULL) && (dwDesiredAccess != 0))
         hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
 
     return win32_build_iowin(hFile);
 }
@@ -188,6 +237,26 @@ uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* b
     return ret;
 }
 
+static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos,  DWORD dwMoveMethod)
+{
+#ifdef IOWIN32_USING_WINRT_API
+    return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
+#else
+    LONG lHigh = pos.HighPart;
+    DWORD dwNewPos = SetFilePointer(hFile, pos.LowPart, &lHigh, FILE_CURRENT);
+    BOOL fOk = TRUE;
+    if (dwNewPos == 0xFFFFFFFF)
+        if (GetLastError() != NO_ERROR)
+            fOk = FALSE;
+    if ((newPos != NULL) && (fOk))
+    {
+        newPos->LowPart = dwNewPos;
+        newPos->HighPart = lHigh;
+    }
+    return fOk;
+#endif
+}
+
 long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
 {
     long ret=-1;
@@ -196,15 +265,17 @@ long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
         hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
     if (hFile != NULL)
     {
-        DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
-        if (dwSet == INVALID_SET_FILE_POINTER)
+        LARGE_INTEGER pos;
+        pos.QuadPart = 0;
+
+        if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
         {
             DWORD dwErr = GetLastError();
             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
             ret = -1;
         }
         else
-            ret=(long)dwSet;
+            ret=(long)pos.LowPart;
     }
     return ret;
 }
@@ -218,17 +289,17 @@ ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
 
     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))
+        LARGE_INTEGER pos;
+        pos.QuadPart = 0;
+
+        if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
         {
             DWORD dwErr = GetLastError();
             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
             ret = (ZPOS64_T)-1;
         }
         else
-            ret=li.QuadPart;
+            ret=pos.QuadPart;
     }
     return ret;
 }
@@ -258,8 +329,9 @@ long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,in
 
     if (hFile != NULL)
     {
-        DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);
-        if (dwSet == INVALID_SET_FILE_POINTER)
+        LARGE_INTEGER pos;
+        pos.QuadPart = offset;
+        if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod))
         {
             DWORD dwErr = GetLastError();
             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
@@ -296,9 +368,9 @@ long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T off
 
     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)
+        LARGE_INTEGER pos;
+        pos.QuadPart = offset;
+        if (!MySetFilePointerEx(hFile, pos, NULL, FILE_CURRENT))
         {
             DWORD dwErr = GetLastError();
             ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
index 9ed009f..3d65401 100644 (file)
@@ -12,7 +12,7 @@
          Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 */
 
-#ifndef _WIN32
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
         #ifndef __USE_FILE_OFFSET64
                 #define __USE_FILE_OFFSET64
         #endif
         #endif
 #endif
 
+#ifdef __APPLE__
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 #include <fcntl.h>
 
-#ifdef unix
-# include <unistd.h>
-# include <utime.h>
-#else
+#ifdef _WIN32
 # include <direct.h>
 # include <io.h>
+#else
+# include <unistd.h>
+# include <utime.h>
 #endif
 
+
 #include "unzip.h"
 
 #define CASESENSITIVITY (0)
@@ -84,7 +97,7 @@ void change_file_date(filename,dosdate,tmu_date)
   SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
   CloseHandle(hFile);
 #else
-#ifdef unix
+#ifdef unix || __APPLE__
   struct utimbuf ut;
   struct tm newdate;
   newdate.tm_sec = tmu_date.tm_sec;
@@ -114,10 +127,10 @@ int mymkdir(dirname)
     int ret=0;
 #ifdef _WIN32
     ret = _mkdir(dirname);
-#else
-#ifdef unix
+#elif unix
+    ret = mkdir (dirname,0775);
+#elif __APPLE__
     ret = mkdir (dirname,0775);
-#endif
 #endif
     return ret;
 }
@@ -364,7 +377,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
         {
             char rep=0;
             FILE* ftestexist;
-            ftestexist = fopen64(write_filename,"rb");
+            ftestexist = FOPEN_FUNC(write_filename,"rb");
             if (ftestexist!=NULL)
             {
                 fclose(ftestexist);
@@ -395,8 +408,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
 
         if ((skip==0) && (err==UNZ_OK))
         {
-            fout=fopen64(write_filename,"wb");
-
+            fout=FOPEN_FUNC(write_filename,"wb");
             /* some zipfile don't contain directory alone before file */
             if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
                                 (filename_withoutpath!=(char*)filename_inzip))
@@ -405,7 +417,7 @@ int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
                 *(filename_withoutpath-1)='\0';
                 makedir(write_filename);
                 *(filename_withoutpath-1)=c;
-                fout=fopen64(write_filename,"wb");
+                fout=FOPEN_FUNC(write_filename,"wb");
             }
 
             if (fout==NULL)
diff --git a/zlib/contrib/minizip/miniunzip.1 b/zlib/contrib/minizip/miniunzip.1
new file mode 100644 (file)
index 0000000..111ac69
--- /dev/null
@@ -0,0 +1,63 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.TH miniunzip 1 "Nov 7, 2001"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+miniunzip - uncompress and examine ZIP archives
+.SH SYNOPSIS
+.B miniunzip
+.RI [ -exvlo ]
+zipfile [ files_to_extract ] [-d tempdir]
+.SH DESCRIPTION
+.B minizip
+is a simple tool which allows the extraction of compressed file
+archives in the ZIP format used by the MS-DOS utility PKZIP.  It was
+written as a demonstration of the
+.IR zlib (3)
+library and therefore lack many of the features of the
+.IR unzip (1)
+program.
+.SH OPTIONS
+A number of options are supported.  With the exception of
+.BI \-d\  tempdir
+these must be supplied before any
+other arguments and are:
+.TP
+.BI \-l\ ,\ \-\-v
+List the files in the archive without extracting them.
+.TP
+.B \-o
+Overwrite files without prompting for confirmation.
+.TP
+.B \-x
+Extract files (default).
+.PP
+The
+.I zipfile
+argument is the name of the archive to process. The next argument can be used
+to specify a single file to extract from the archive.
+
+Lastly, the following option can be specified at the end of the command-line:
+.TP
+.BI \-d\  tempdir
+Extract the archive in the directory
+.I tempdir
+rather than the current directory.
+.SH SEE ALSO
+.BR minizip (1),
+.BR zlib (3),
+.BR unzip (1).
+.SH AUTHOR
+This program was written by Gilles Vollant.  This manual page was
+written by Mark Brown <broonie@sirena.org.uk>. The -d tempdir option
+was added by Dirk Eddelbuettel <edd@debian.org>.
diff --git a/zlib/contrib/minizip/minizip.1 b/zlib/contrib/minizip/minizip.1
new file mode 100644 (file)
index 0000000..1154484
--- /dev/null
@@ -0,0 +1,46 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.TH minizip 1 "May 2, 2001"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+minizip - create ZIP archives
+.SH SYNOPSIS
+.B minizip
+.RI [ -o ]
+zipfile [ " files" ... ]
+.SH DESCRIPTION
+.B minizip
+is a simple tool which allows the creation of compressed file archives
+in the ZIP format used by the MS-DOS utility PKZIP.  It was written as
+a demonstration of the
+.IR zlib (3)
+library and therefore lack many of the features of the
+.IR zip (1)
+program.
+.SH OPTIONS
+The first argument supplied is the name of the ZIP archive to create or
+.RI -o
+in which case it is ignored and the second argument treated as the
+name of the ZIP file.  If the ZIP file already exists it will be
+overwritten.
+.PP
+Subsequent arguments specify a list of files to place in the ZIP
+archive.  If none are specified then an empty archive will be created.
+.SH SEE ALSO
+.BR miniunzip (1),
+.BR zlib (3),
+.BR zip (1).
+.SH AUTHOR
+This program was written by Gilles Vollant.  This manual page was
+written by Mark Brown <broonie@sirena.org.uk>.
+
index 7a4fa5a..4288962 100644 (file)
@@ -13,7 +13,7 @@
 */
 
 
-#ifndef _WIN32
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
         #ifndef __USE_FILE_OFFSET64
                 #define __USE_FILE_OFFSET64
         #endif
         #endif
 #endif
 
+#ifdef __APPLE__
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 #include <fcntl.h>
 
-#ifdef unix
+#ifdef _WIN32
+# include <direct.h>
+# include <io.h>
+#else
 # include <unistd.h>
 # include <utime.h>
 # include <sys/types.h>
 # include <sys/stat.h>
-#else
-# include <direct.h>
-# include <io.h>
 #endif
 
 #include "zip.h"
@@ -81,7 +94,7 @@ uLong filetime(f, tmzip, dt)
   return ret;
 }
 #else
-#ifdef unix
+#ifdef unix || __APPLE__
 uLong filetime(f, tmzip, dt)
     char *f;               /* name of file to get info on */
     tm_zip *tmzip;         /* return value: access, modific. and creation times */
@@ -142,7 +155,7 @@ int check_exist_file(filename)
 {
     FILE* ftestexist;
     int ret = 1;
-    ftestexist = fopen64(filename,"rb");
+    ftestexist = FOPEN_FUNC(filename,"rb");
     if (ftestexist==NULL)
         ret = 0;
     else
@@ -173,7 +186,8 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
 {
    unsigned long calculate_crc=0;
    int err=ZIP_OK;
-   FILE * fin = fopen64(filenameinzip,"rb");
+   FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
+
    unsigned long size_read = 0;
    unsigned long total_read = 0;
    if (fin==NULL)
@@ -211,13 +225,12 @@ int isLargeFile(const char* filename)
 {
   int largeFile = 0;
   ZPOS64_T pos = 0;
-  FILE* pFile = fopen64(filename, "rb");
+  FILE* pFile = FOPEN_FUNC(filename, "rb");
 
   if(pFile != NULL)
   {
-    int n = fseeko64(pFile, 0, SEEK_END);
-
-    pos = ftello64(pFile);
+    int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
+    pos = FTELLO_FUNC(pFile);
 
                 printf("File : %s is %lld bytes\n", filename, pos);
 
@@ -447,7 +460,7 @@ int main(argc,argv)
                     printf("error in opening %s in zipfile\n",filenameinzip);
                 else
                 {
-                    fin = fopen64(filenameinzip,"rb");
+                    fin = FOPEN_FUNC(filenameinzip,"rb");
                     if (fin==NULL)
                     {
                         err=ZIP_ERRNO;
diff --git a/zlib/contrib/minizip/minizip.pc.in b/zlib/contrib/minizip/minizip.pc.in
new file mode 100644 (file)
index 0000000..69b5b7f
--- /dev/null
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/minizip
+
+Name: minizip
+Description: Minizip zip file manipulation library
+Requires:
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lminizip
+Libs.private: -lz
+Cflags: -I${includedir}
index f9092e6..96891c2 100644 (file)
@@ -42,7 +42,7 @@ uLong* bytesRecovered;
     int entries = 0;
     uLong totalBytes = 0;
     char header[30];
-    char filename[256];
+    char filename[1024];
     char extra[1024];
     int offset = 0;
     int offsetCD = 0;
@@ -73,9 +73,14 @@ uLong* bytesRecovered;
 
         /* Filename */
         if (fnsize > 0) {
-          if (fread(filename, 1, fnsize, fpZip) == fnsize) {
-            if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {
-              offset += fnsize;
+          if (fnsize < sizeof(filename)) {
+            if (fread(filename, 1, fnsize, fpZip) == fnsize) {
+                if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {
+                offset += fnsize;
+              } else {
+                err = Z_ERRNO;
+                break;
+              }
             } else {
               err = Z_ERRNO;
               break;
@@ -91,9 +96,14 @@ uLong* bytesRecovered;
 
         /* Extra field */
         if (extsize > 0) {
-          if (fread(extra, 1, extsize, fpZip) == extsize) {
-            if (fwrite(extra, 1, extsize, fpOut) == extsize) {
-              offset += extsize;
+          if (extsize < sizeof(extra)) {
+            if (fread(extra, 1, extsize, fpZip) == extsize) {
+              if (fwrite(extra, 1, extsize, fpOut) == extsize) {
+                offset += extsize;
+                } else {
+                err = Z_ERRNO;
+                break;
+              }
             } else {
               err = Z_ERRNO;
               break;
index 88b3459..a49a426 100644 (file)
@@ -28,4 +28,10 @@ extern int ZEXPORT unzRepair(const char* file,
                              uLong* nRecovered,
                              uLong* bytesRecovered);
 
+
+#ifdef __cplusplus
+}
+#endif
+
+
 #endif
index 7617f41..9093504 100644 (file)
@@ -188,7 +188,7 @@ typedef struct
 
 #    ifndef NOUNCRYPT
     unsigned long keys[3];     /* keys defining the pseudo-random sequence */
-    const unsigned long* pcrc_32_tab;
+    const z_crc_t* pcrc_32_tab;
 #    endif
 } unz64_s;
 
@@ -801,9 +801,9 @@ extern unzFile ZEXPORT unzOpen64 (const void *path)
 }
 
 /*
-  Close a ZipFile opened with unzipOpen.
-  If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
-    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
+  Close a ZipFile opened with unzOpen.
+  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+    these files MUST be closed with unzCloseCurrentFile before call unzClose.
   return UNZ_OK if there is no problem. */
 extern int ZEXPORT unzClose (unzFile file)
 {
@@ -1040,26 +1040,26 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
             {
                                                         uLong uL;
 
-                                                                if(file_info.uncompressed_size == (ZPOS64_T)(unsigned long)-1)
+                                                                if(file_info.uncompressed_size == MAXU32)
                                                                 {
                                                                         if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
                                                                                         err=UNZ_ERRNO;
                                                                 }
 
-                                                                if(file_info.compressed_size == (ZPOS64_T)(unsigned long)-1)
+                                                                if(file_info.compressed_size == MAXU32)
                                                                 {
                                                                         if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
                                                                                   err=UNZ_ERRNO;
                                                                 }
 
-                                                                if(file_info_internal.offset_curfile == (ZPOS64_T)(unsigned long)-1)
+                                                                if(file_info_internal.offset_curfile == MAXU32)
                                                                 {
                                                                         /* Relative Header offset */
                                                                         if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
                                                                                 err=UNZ_ERRNO;
                                                                 }
 
-                                                                if(file_info.disk_num_start == (unsigned long)-1)
+                                                                if(file_info.disk_num_start == MAXU32)
                                                                 {
                                                                         /* Disk Start Number */
                                                                         if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
@@ -1145,7 +1145,7 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
                                                 szFileName,fileNameBufferSize,
                                                 extraField,extraFieldBufferSize,
                                                 szComment,commentBufferSize);
-    if (err==UNZ_OK)
+    if ((err==UNZ_OK) && (pfile_info != NULL))
     {
         pfile_info->version = file_info64.version;
         pfile_info->version_needed = file_info64.version_needed;
@@ -1223,7 +1223,7 @@ extern int ZEXPORT unzGoToNextFile (unzFile  file)
 
 /*
   Try locate the file szFileName in the zipfile.
-  For the iCaseSensitivity signification, see unzipStringFileNameCompare
+  For the iCaseSensitivity signification, see unzStringFileNameCompare
 
   return value :
   UNZ_OK if the file is found. It becomes the current file.
@@ -1696,7 +1696,7 @@ extern int ZEXPORT unzReadCurrentFile  (unzFile file, voidp buf, unsigned len)
         return UNZ_PARAMERROR;
 
 
-    if ((pfile_in_zip_read_info->read_buffer == NULL))
+    if (pfile_in_zip_read_info->read_buffer == NULL)
         return UNZ_END_OF_LIST_OF_FILE;
     if (len==0)
         return 0;
@@ -1998,7 +1998,7 @@ extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
 }
 
 /*
-  Close the file in zip opened with unzipOpenCurrentFile
+  Close the file in zip opened with unzOpenCurrentFile
   Return UNZ_CRCERROR if all the file was read but the CRC is not good
 */
 extern int ZEXPORT unzCloseCurrentFile (unzFile file)
index 3183968..2104e39 100644 (file)
@@ -197,9 +197,9 @@ extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
 
 extern int ZEXPORT unzClose OF((unzFile file));
 /*
-  Close a ZipFile opened with unzipOpen.
+  Close a ZipFile opened with unzOpen.
   If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
-    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
+    these files MUST be closed with unzCloseCurrentFile before call unzClose.
   return UNZ_OK if there is no problem. */
 
 extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
index 3c34fc8..ea54853 100644 (file)
@@ -157,7 +157,7 @@ typedef struct
     ZPOS64_T totalUncompressedData;
 #ifndef NOCRYPT
     unsigned long keys[3];     /* keys defining the pseudo-random sequence */
-    const unsigned long* pcrc_32_tab;
+    const z_crc_t* pcrc_32_tab;
     int crypt_header_size;
 #endif
 } curfile64_info;
@@ -1067,6 +1067,7 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
     int err = ZIP_OK;
 
 #    ifdef NOCRYPT
+    (crcForCrypting);
     if (password != NULL)
         return ZIP_PARAMERROR;
 #    endif
@@ -1114,9 +1115,9 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
     zi->ci.flag = flagBase;
     if ((level==8) || (level==9))
       zi->ci.flag |= 2;
-    if ((level==2))
+    if (level==2)
       zi->ci.flag |= 4;
-    if ((level==1))
+    if (level==1)
       zi->ci.flag |= 6;
     if (password != NULL)
       zi->ci.flag |= 1;
@@ -1710,7 +1711,7 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s
         if (err==ZIP_OK)
             err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
 
-        if(uncompressed_size >= 0xffffffff)
+        if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff )
         {
           if(zi->ci.pos_zip64extrainfo > 0)
           {
@@ -1724,6 +1725,8 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s
             if (err==ZIP_OK) /* uncompressed size, unknown */
               err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
           }
+          else
+              err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal
         }
         else
         {
@@ -1852,7 +1855,7 @@ int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir,
       err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
     }
     else
-                  err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
+      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
   }
 
    return err;
@@ -1919,7 +1922,7 @@ extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
     free_linkedlist(&(zi->central_dir));
 
     pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
-    if(pos >= 0xffffffff)
+    if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
     {
       ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
       Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
index 0d0699a..9bb00b7 100644 (file)
@@ -63,9 +63,9 @@ uncompr.obj: uncompr.c zlib.h zconf.h
 
 zutil.obj: zutil.c zutil.h zlib.h zconf.h
 
-example.obj: example.c zlib.h zconf.h
+example.obj: test/example.c zlib.h zconf.h
 
-minigzip.obj: minigzip.c zlib.h zconf.h
+minigzip.obj: test/minigzip.c zlib.h zconf.h
 
 
 # For the sake of the old Borland make,
index 637ae3a..e6a0782 100644 (file)
@@ -10,7 +10,8 @@ unit zlibpas;
 interface
 
 const
-  ZLIB_VERSION = '1.2.5';
+  ZLIB_VERSION = '1.2.8';
+  ZLIB_VERNUM  = $1280;
 
 type
   alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
@@ -45,6 +46,23 @@ type
     reserved: LongInt;    (* reserved for future use *)
   end;
 
+  gz_headerp = ^gz_header;
+  gz_header = packed record
+    text: Integer;        (* true if compressed data believed to be text *)
+    time: LongInt;        (* modification time *)
+    xflags: Integer;      (* extra flags (not used when writing a gzip file) *)
+    os: Integer;          (* operating system *)
+    extra: PChar;         (* pointer to extra field or Z_NULL if none *)
+    extra_len: Integer;   (* extra field length (valid if extra != Z_NULL) *)
+    extra_max: Integer;   (* space at extra (only when reading header) *)
+    name: PChar;          (* pointer to zero-terminated file name or Z_NULL *)
+    name_max: Integer;    (* space at name (only when reading header) *)
+    comment: PChar;       (* pointer to zero-terminated comment or Z_NULL *)
+    comm_max: Integer;    (* space at comment (only when reading header) *)
+    hcrc: Integer;        (* true if there was or will be a header crc *)
+    done: Integer;        (* true when done reading gzip header *)
+  end;
+
 (* constants *)
 const
   Z_NO_FLUSH      = 0;
@@ -52,6 +70,8 @@ const
   Z_SYNC_FLUSH    = 2;
   Z_FULL_FLUSH    = 3;
   Z_FINISH        = 4;
+  Z_BLOCK         = 5;
+  Z_TREES         = 6;
 
   Z_OK            =  0;
   Z_STREAM_END    =  1;
@@ -71,9 +91,11 @@ const
   Z_FILTERED            = 1;
   Z_HUFFMAN_ONLY        = 2;
   Z_RLE                 = 3;
+  Z_FIXED               = 4;
   Z_DEFAULT_STRATEGY    = 0;
 
   Z_BINARY   = 0;
+  Z_TEXT     = 1;
   Z_ASCII    = 1;
   Z_UNKNOWN  = 2;
 
@@ -96,14 +118,21 @@ function deflateSetDictionary(var strm: