summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure106
-rw-r--r--gzlib.c4
-rw-r--r--gzread.c2
-rw-r--r--gzwrite.c2
-rw-r--r--test/minigzip.c2
-rw-r--r--zconf.h15
-rw-r--r--zconf.h.cmakein15
-rw-r--r--zconf.h.in15
8 files changed, 144 insertions, 17 deletions
diff --git a/configure b/configure
index 9f2e82e..f60585b 100755
--- a/configure
+++ b/configure
@@ -181,9 +181,12 @@ 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}"
+ CFLAGS="${CFLAGS--O3}"
SFLAGS="${CFLAGS--O3} -fPIC"
- LDFLAGS="${LDFLAGS} ${ARCHS}"
+ if test "$ARCHS"; then
+ CFLAGS="${CFLAGS} ${ARCHS}"
+ LDFLAGS="${LDFLAGS} ${ARCHS}"
+ fi
if test $build64 -eq 1; then
CFLAGS="${CFLAGS} -m64"
SFLAGS="${SFLAGS} -m64"
@@ -360,16 +363,16 @@ if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
}
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
-}
+ try()
+ {
+ show $*
+ ( $* ) >> configure.log 2>&1
+ ret=$?
+ if test $ret -ne 0; then
+ echo "(exit code "$ret")" >> configure.log
+ fi
+ return $ret
+ }
fi
tryboth()
@@ -445,6 +448,85 @@ esac
echo >> configure.log
+# check for size_t
+cat > $test.c <<EOF
+#include <stdio.h>
+#include <stdlib.h>
+size_t dummy = 0;
+EOF
+if try $CC -c $CFLAGS $test.c; then
+ echo "Checking for size_t... Yes." | tee -a configure.log
+ need_sizet=0
+else
+ echo "Checking for size_t... No." | tee -a configure.log
+ need_sizet=1
+fi
+
+echo >> configure.log
+
+# check for ssize_t
+cat > $test.c <<EOF
+#include <sys/types.h>
+ssize_t dummy = 0;
+EOF
+if try $CC -c $CFLAGS $test.c; then
+ echo "Checking for ssize_t... Yes." | tee -a configure.log
+ need_ssizet=0
+else
+ echo "Checking for ssize_t... No." | tee -a configure.log
+ need_ssizet=1
+fi
+
+echo >> configure.log
+
+# find the size_t integer type, if needed
+if test $need_sizet -eq 1 -o $need_ssizet -eq 1; then
+ cat > $test.c <<EOF
+long long dummy = 0;
+EOF
+ if try $CC -c $CFLAGS $test.c; then
+ echo "Checking for long long... Yes." | tee -a configure.log
+ cat > $test.c <<EOF
+#include <stdio.h>
+int main(void) {
+ if (sizeof(void *) <= sizeof(int)) puts("int");
+ else if (sizeof(void *) <= sizeof(long)) puts("long");
+ else puts("long long");
+ return 0;
+}
+EOF
+ else
+ echo "Checking for long long... No." | tee -a configure.log
+ cat > $test.c <<EOF
+#include <stdio.h>
+int main(void) {
+ if (sizeof(void *) <= sizeof(int)) puts("int");
+ else puts("long");
+ return 0;
+}
+EOF
+ fi
+ if try $CC $CFLAGS -o $test $test.c; then
+ sizet=`./$test`
+ echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
+ else
+ echo "Failed to find a pointer-size integer type." | tee -a configure.log
+ leave 1
+ fi
+fi
+
+if test $need_sizet -eq 1; then
+ CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
+ SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
+fi
+
+if test $need_ssizet -eq 1; then
+ CFLAGS="${CFLAGS} -DNO_SSIZE_T=${sizet}"
+ SFLAGS="${SFLAGS} -DNO_SSIZE_T=${sizet}"
+fi
+
+echo >> configure.log
+
# check for large file support, and if none, check for fseeko()
cat > $test.c <<EOF
#include <sys/types.h>
diff --git a/gzlib.c b/gzlib.c
index a52c55b..3b2b71b 100644
--- a/gzlib.c
+++ b/gzlib.c
@@ -94,7 +94,7 @@ local gzFile gz_open(path, fd, mode)
const char *mode;
{
gz_statep state;
- size_t len;
+ z_size_t len;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
@@ -191,7 +191,7 @@ local gzFile gz_open(path, fd, mode)
#ifdef WIDECHAR
if (fd == -2) {
len = wcstombs(NULL, path, 0);
- if (len == (size_t)-1)
+ if (len == (z_size_t)-1)
len = 0;
}
else
diff --git a/gzread.c b/gzread.c
index d41704a..b05229e 100644
--- a/gzread.c
+++ b/gzread.c
@@ -23,7 +23,7 @@ local int gz_load(state, buf, len, have)
unsigned len;
unsigned *have;
{
- ssize_t ret;
+ z_ssize_t ret;
*have = 0;
do {
diff --git a/gzwrite.c b/gzwrite.c
index 61a4de7..eb73d9c 100644
--- a/gzwrite.c
+++ b/gzwrite.c
@@ -74,7 +74,7 @@ local int gz_comp(state, flush)
int flush;
{
int ret;
- ssize_t got;
+ z_ssize_t got;
unsigned have;
z_streamp strm = &(state->strm);
diff --git a/test/minigzip.c b/test/minigzip.c
index f4ffbe2..6c64cc7 100644
--- a/test/minigzip.c
+++ b/test/minigzip.c
@@ -500,7 +500,7 @@ void file_uncompress(file)
char *infile, *outfile;
FILE *out;
gzFile in;
- size_t len = strlen(file);
+ z_size_t len = strlen(file);
if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) {
fprintf(stderr, "%s: filename too long\n", prog);
diff --git a/zconf.h b/zconf.h
index d09f186..2c22d32 100644
--- a/zconf.h
+++ b/zconf.h
@@ -224,6 +224,21 @@
# define z_const
#endif
+#ifndef Z_SOLO
+# ifdef NO_SIZE_T
+ typedef unsigned NO_SIZE_T z_size_t;
+# else
+# include <stddef.h>
+ typedef size_t z_size_t;
+# endif
+# ifdef NO_SSIZE_T
+ typedef NO_SSIZE_T z_ssize_t;
+# else
+# include <sys/types.h>
+ typedef ssize_t z_ssize_t;
+# endif
+#endif
+
/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
# ifdef MAXSEG_64K
diff --git a/zconf.h.cmakein b/zconf.h.cmakein
index 70942e4..662fc3d 100644
--- a/zconf.h.cmakein
+++ b/zconf.h.cmakein
@@ -226,6 +226,21 @@
# define z_const
#endif
+#ifndef Z_SOLO
+# ifdef NO_SIZE_T
+ typedef unsigned NO_SIZE_T z_size_t;
+# else
+# include <stddef.h>
+ typedef size_t z_size_t;
+# endif
+# ifdef NO_SSIZE_T
+ typedef NO_SSIZE_T z_ssize_t;
+# else
+# include <sys/types.h>
+ typedef ssize_t z_ssize_t;
+# endif
+#endif
+
/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
# ifdef MAXSEG_64K
diff --git a/zconf.h.in b/zconf.h.in
index d09f186..2c22d32 100644
--- a/zconf.h.in
+++ b/zconf.h.in
@@ -224,6 +224,21 @@
# define z_const
#endif
+#ifndef Z_SOLO
+# ifdef NO_SIZE_T
+ typedef unsigned NO_SIZE_T z_size_t;
+# else
+# include <stddef.h>
+ typedef size_t z_size_t;
+# endif
+# ifdef NO_SSIZE_T
+ typedef NO_SSIZE_T z_ssize_t;
+# else
+# include <sys/types.h>
+ typedef ssize_t z_ssize_t;
+# endif
+#endif
+
/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
# ifdef MAXSEG_64K