Use a uniform approach for the largest value of an unsigned type.
diff --git a/compress.c b/compress.c
index e5831e8..f0d0757 100644
--- a/compress.c
+++ b/compress.c
@@ -28,7 +28,7 @@
 {
     z_stream stream;
     int err;
-    const uInt max = (uInt)0 - 1;
+    const uInt max = (uInt)-1;
     uLong left;
 
     left = *destLen;
diff --git a/inflate.c b/inflate.c
index 0372edf..92e9139 100644
--- a/inflate.c
+++ b/inflate.c
@@ -1555,7 +1555,7 @@
 z_streamp strm;
 {
     struct inflate_state FAR *state;
-    if (inflateStateCheck(strm)) return (unsigned long)0 - 1;
+    if (inflateStateCheck(strm)) return (unsigned long)-1;
     state = (struct inflate_state FAR *)strm->state;
     return (unsigned long)(state->next - state->codes);
 }
diff --git a/uncompr.c b/uncompr.c
index 2fbfcc0..f03a1a8 100644
--- a/uncompr.c
+++ b/uncompr.c
@@ -32,7 +32,7 @@
 {
     z_stream stream;
     int err;
-    const uInt max = (uInt)0 - 1;
+    const uInt max = (uInt)-1;
     uLong len, left;
     Byte buf[1];    /* for detection of incomplete stream when *destLen == 0 */