diff --git a/configure b/configure
index e0c07b7..e974d1f 100755
--- a/configure
+++ b/configure
@@ -465,23 +465,8 @@
 
 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
+if test $need_sizet -eq 1; then
   cat > $test.c <<EOF
 long long dummy = 0;
 EOF
@@ -521,11 +506,6 @@
   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()
diff --git a/gzread.c b/gzread.c
index 3811157..deea79b 100644
--- a/gzread.c
+++ b/gzread.c
@@ -24,11 +24,15 @@
     unsigned len;
     unsigned *have;
 {
-    z_ssize_t ret;
+    int ret;
+    unsigned get, max = ((unsigned)-1 >> 2) + 1;
 
     *have = 0;
     do {
-        ret = read(state->fd, buf + *have, len - *have);
+        get = len - *have;
+        if (get > max)
+            get = max;
+        ret = read(state->fd, buf + *have, get);
         if (ret <= 0)
             break;
         *have += (unsigned)ret;
diff --git a/gzwrite.c b/gzwrite.c
index c29308b..b866251 100644
--- a/gzwrite.c
+++ b/gzwrite.c
@@ -74,9 +74,8 @@
     gz_statep state;
     int flush;
 {
-    int ret;
-    z_ssize_t got;
-    unsigned have;
+    int ret, writ;
+    unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
     z_streamp strm = &(state->strm);
 
     /* allocate memory if this is the first time through */
@@ -86,13 +85,14 @@
     /* write directly if requested */
     if (state->direct) {
         while (strm->avail_in) {
-            got = write(state->fd, strm->next_in, strm->avail_in);
-            if (got < 0) {
+            put = strm->avail_in > max ? max : strm->avail_in;
+            writ = write(state->fd, strm->next_in, put);
+            if (writ < 0) {
                 gz_error(state, Z_ERRNO, zstrerror());
                 return -1;
             }
-            strm->avail_in -= (unsigned)got;
-            strm->next_in += got;
+            strm->avail_in -= (unsigned)writ;
+            strm->next_in += writ;
         }
         return 0;
     }
@@ -105,13 +105,14 @@
         if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
             (flush != Z_FINISH || ret == Z_STREAM_END))) {
             while (strm->next_out > state->x.next) {
-                got = write(state->fd, state->x.next,
-                            (unsigned long)(strm->next_out - state->x.next));
-                if (got < 0) {
+                put = strm->next_out - state->x.next > (int)max ? max :
+                      (unsigned)(strm->next_out - state->x.next);
+                writ = write(state->fd, state->x.next, put);
+                if (writ < 0) {
                     gz_error(state, Z_ERRNO, zstrerror());
                     return -1;
                 }
-                state->x.next += got;
+                state->x.next += writ;
             }
             if (strm->avail_out == 0) {
                 strm->avail_out = state->size;
diff --git a/zconf.h b/zconf.h
index f6481d1..dc7209a 100644
--- a/zconf.h
+++ b/zconf.h
@@ -237,17 +237,6 @@
 #    include <stddef.h>
      typedef size_t z_size_t;
 #  endif
-#  ifdef NO_SSIZE_T
-     typedef NO_SSIZE_T z_ssize_t;
-#  else
-#    include <stddef.h>
-#    include <sys/types.h>
-#    ifdef _MSC_VER
-       typedef intptr_t z_ssize_t;
-#    else
-       typedef ssize_t z_ssize_t;
-#    endif
-#  endif
 #  undef z_longlong
 #endif
 
diff --git a/zconf.h.cmakein b/zconf.h.cmakein
index 843aeb4..31619f3 100644
--- a/zconf.h.cmakein
+++ b/zconf.h.cmakein
@@ -239,17 +239,6 @@
 #    include <stddef.h>
      typedef size_t z_size_t;
 #  endif
-#  ifdef NO_SSIZE_T
-     typedef NO_SSIZE_T z_ssize_t;
-#  else
-#    include <stddef.h>
-#    include <sys/types.h>
-#    ifdef _MSC_VER
-       typedef intptr_t z_ssize_t;
-#    else
-       typedef ssize_t z_ssize_t;
-#    endif
-#  endif
 #  undef z_longlong
 #endif
 
diff --git a/zconf.h.in b/zconf.h.in
index f6481d1..dc7209a 100644
--- a/zconf.h.in
+++ b/zconf.h.in
@@ -237,17 +237,6 @@
 #    include <stddef.h>
      typedef size_t z_size_t;
 #  endif
-#  ifdef NO_SSIZE_T
-     typedef NO_SSIZE_T z_ssize_t;
-#  else
-#    include <stddef.h>
-#    include <sys/types.h>
-#    ifdef _MSC_VER
-       typedef intptr_t z_ssize_t;
-#    else
-       typedef ssize_t z_ssize_t;
-#    endif
-#  endif
 #  undef z_longlong
 #endif
 
