Mark Adler [Sun, 29 Apr 2012 23:18:12 +0000 (16:18 -0700)]
Fix type mismatch between get_crc_table() and crc_table.
crc_table is made using a four-byte integer (when that can be
determined). However get_crc_table() returned a pointer to an
unsigned long, which could be eight bytes. This fixes that by
creating a new z_crc_t type for the crc_table.
This type is also used for the BYFOUR crc calculations that depend
on a four-byte type. The four-byte type can now be determined by
./configure, which also solves a problem where ./configure --solo
would never use BYFOUR. No the Z_U4 #define indicates that four-
byte integer was found either by ./configure or by zconf.h.
Mark Adler [Sun, 18 Mar 2012 21:52:31 +0000 (14:52 -0700)]
Attempt to convert the wchar_t path in gzopen_w() for errors.
The conversion to multi-byte will be locale-specific, but it's
better than nothing and is only to provide more information in the
error message returned by gz_error(). The conversion has no
effect on what's opened.
Mark Adler [Sun, 18 Mar 2012 16:29:44 +0000 (09:29 -0700)]
More fixes for gzopen_w().
Also need to #include <stddef.h> for zlib.h, and need to workaround
the inability to use wide characters in constructed error messages
with zlib's interface.
Mark Adler [Sat, 3 Mar 2012 08:03:30 +0000 (00:03 -0800)]
Don't use library or built-in byte swaps.
Using optimized byte swaps reduced portability for no real benefit,
since they are in parts of the code that represent a tiny fraction
of the execution time. So a simple definition of a byte swap is
now used.
Mark Adler [Sat, 18 Feb 2012 21:55:09 +0000 (13:55 -0800)]
Test for existence of strerror.
SunOS 4.1 claims that it is __STDC__, but it does not have strerror
in string.h. Instead of using __STDC__, this puts a direct test
for strerror in configure, and uses that information in gzguts.h.
Mark Adler [Sat, 18 Feb 2012 16:19:59 +0000 (08:19 -0800)]
Replace use of memmove() with a simple copy for portability.
SunOS 4.1 doesn't have memmove(), and there may be others. memcpy()
should not be used for overlapping copies, so here a simple copy is
implemented that works for the particular direction of the overlap,
which is where the destination precedes the source.
Mark Adler [Sat, 4 Feb 2012 06:56:16 +0000 (22:56 -0800)]
Use name in GCC_CLASSIC as C compiler for coverage testing, if set.
Apple removed support for gcov in the default gcc compiler chain,
when they moved to llvm. This can be circumvented in XCode 4.2 by
using the gcc chain with gcc-4.2. This patch allows setting
GCC_CLASSIC to the name of a real gcc executable (e.g. "gcc-4.2")
to allow coverage testing.
Mark Adler [Thu, 2 Feb 2012 07:47:47 +0000 (23:47 -0800)]
Avoid library header include in crc32.c for Z_SOLO.
crc32.c was #including limits.h in order to find a four-byte integer
type. It was doing this even if Z_SOLO were defined, violating the
intent of Z_SOLO, which is to include no library headers and require
no library functions. Now crc32.c obeys the intent of Z_SOLO, but
with the downside that crc32() will be slower than when not compiled
with Z_SOLO. This can be remedied manually by typedefing u4 to a
known four-byte unsigned integer type, and #defining BYFOUR in
crc32.c.
Mark Adler [Thu, 2 Feb 2012 07:25:34 +0000 (23:25 -0800)]
Put gzflags() functionality back in zutil.c.
gzflags() was put in gzwrite.c in order to be compiled exactly the
same as gzprintf(), so that it was guaranteed to return the correct
information. However that causes a static linkage to zlib to bring
in many routines that are often not used. All that is required to
duplicate the compilation environment of gzprintf() is to include
gzguts.h. So that is now done in zutil.c to assure that the correct
flags are returned.
Mark Adler [Sun, 29 Jan 2012 17:12:08 +0000 (09:12 -0800)]
Have gzputc return the character written instead of the argument.
When successful, gzputc would return the second argument. If the
second argument were -1, gzputc would return -1 instead of the
character written, which was 255. However the -1 would not be
distinguishable from an error. Now gzputc returns 255 in that
case.
Jonathan Nieder [Sat, 21 Jan 2012 21:55:54 +0000 (15:55 -0600)]
Add an --enable-demos option to contrib/minizip/configure.
This makes build-testing and installing the minizip/miniunzip programs
as simple as "autoreconf -if && ./configure --enable-demos && make &&
make install". Without --enable-demos, the makefile will only build
and install the library, as before. Helped by Mike Frysinger.
minizip/miniunzip were not intended to be general-purpose installed
utilities, but they can be useful from time to time as a lightweight
substitute for zip/unzip. You can also use them to quickly test that
the library installation procedure worked.
mkdir -p BUILD/contrib/minizip
cd BUILD/contrib/minizip
../../../contrib/minizip/configure
make
While at it, move the include path and library path settings to
CPPFLAGS and LDFLAGS respectively instead of setting both in CFLAGS.
Thanks to Mike Frysinger for advice.
Jonathan Nieder [Tue, 17 Jan 2012 20:28:30 +0000 (14:28 -0600)]
Add missing libs to minizip linker command.
Trying to build the minizip utility from contrib/minizip after an
autoreconf -f:
libtool: link: gcc -g -O2 -o minizip minizip.o
minizip.o: In function `getFileCrc':
/tmp/zlib/contrib/minizip/minizip.c:211: undefined reference to `crc32'
minizip.o: In function `main':
/tmp/zlib/contrib/minizip/minizip.c:378: undefined reference to `zipOpen64'
/tmp/zlib/contrib/minizip/minizip.c:451: undefined reference to `zipOpenNewFileInZip3_64'
/tmp/zlib/contrib/minizip/minizip.c:502: undefined reference to `zipCloseFileInZip'
/tmp/zlib/contrib/minizip/minizip.c:509: undefined reference to `zipClose'
/tmp/zlib/contrib/minizip/minizip.c:485: undefined reference to `zipWriteInFileInZip'
collect2: error: ld returned 1 exit status
The cause: contrib/minizip/Makefile.am does not specify that minizip
needs to be linked to libminizip. With some linkers (e.g., GNU
binutils without --copy-dt-needed-entries), an indirect dependency
cannot be used to resolve symbols, so link to libz for crc32(), too.
Jonathan Nieder [Tue, 17 Jan 2012 20:26:05 +0000 (14:26 -0600)]
Add -I../.. -L../.. to CFLAGS for minizip and miniunzip.
Trying to build miniunzip utility from contrib/minizip after an
autoreconf -f produces
[...]
In file included from minizip.c:61:0:
zip.h:50:18: fatal error: zlib.h: No such file or directory
unless zlib is already installed. Use AM_CFLAGS to set the include
path and library path to point to the just-build copy of zlib to
fix this. (This was already done for libminizip but not the binaries
that use it before this patch.)
Mark Adler [Mon, 16 Jan 2012 22:50:09 +0000 (14:50 -0800)]
Have ./configure use the compiler return code for error indication.
Previously ./configure would use any output on stderr as an indication
that the compilation failed. However if some compiler wrapper uses
stderr for some other purpose, e.g. distcc for nodes going down, then
./configure would not properly configure the build. This problem was
noted by Mike Frysinger. For backwards compatibility, ./configure
will revert to the old way, i.e. checking for anything on stderr, if
when it deliberately runs the compiler with an error, a zero exit
status is returned.