--- spdylay-1.4.0/lib/spdylay_zlib.c.orig	2016-10-27 01:20:18.524432400 -0400
+++ spdylay-1.4.0/lib/spdylay_zlib.c	2016-10-27 01:29:56.338760400 -0400
@@ -306,9 +306,9 @@
                                 const uint8_t *in, size_t inlen)
 {
   int r;
-  deflater->zst.avail_in = (uint)inlen;
+  deflater->zst.avail_in = (uInt)inlen;
   deflater->zst.next_in = (uint8_t*)in;
-  deflater->zst.avail_out = (uint)outlen;
+  deflater->zst.avail_out = (uInt)outlen;
   deflater->zst.next_out = out;
   r = deflate(&deflater->zst, Z_SYNC_FLUSH);
   if(r == Z_OK) {
@@ -328,7 +328,7 @@
                                 const uint8_t *in, size_t inlen)
 {
   int r;
-  inflater->zst.avail_in = (uint)inlen;
+  inflater->zst.avail_in = (uInt)inlen;
   inflater->zst.next_in = (uint8_t*)in;
   while(1) {
     if(spdylay_buffer_avail(buf) == 0) {
@@ -336,7 +336,7 @@
         return r;
       }
     }
-    inflater->zst.avail_out = (uint)spdylay_buffer_avail(buf);
+    inflater->zst.avail_out = (uInt)spdylay_buffer_avail(buf);
     inflater->zst.next_out = spdylay_buffer_get(buf);
     r = inflate(&inflater->zst, Z_NO_FLUSH);
     if(r == Z_STREAM_ERROR || r == Z_STREAM_END || r == Z_DATA_ERROR) {
@@ -347,7 +347,7 @@
       hd_dict = spdylay_select_hd_dict(&hd_dict_length, inflater->version);
       assert(hd_dict);
       if(Z_OK != inflateSetDictionary(&inflater->zst, (uint8_t*)hd_dict,
-                                      (uint)hd_dict_length)) {
+                                      (uInt)hd_dict_length)) {
         return SPDYLAY_ERR_ZLIB;
       }
     } else {
--- spdylay-1.4.0/lib/spdylay_gzip.c.orig	2016-10-27 01:39:54.613531300 -0400
+++ spdylay-1.4.0/lib/spdylay_gzip.c	2016-10-27 01:41:46.818574300 -0400
@@ -63,9 +63,9 @@
   if(inflater->finished) {
     return SPDYLAY_ERR_GZIP;
   }
-  inflater->zst.avail_in = (uint)*inlen_ptr;
+  inflater->zst.avail_in = (uInt)*inlen_ptr;
   inflater->zst.next_in = (unsigned char*)in;
-  inflater->zst.avail_out = (uint)*outlen_ptr;
+  inflater->zst.avail_out = (uInt)*outlen_ptr;
   inflater->zst.next_out = out;
 
   rv = inflate(&inflater->zst, Z_NO_FLUSH);
--- spdylay-1.4.0/tests/spdylay_gzip_test.c.orig	2016-10-27 01:52:48.865261600 -0400
+++ spdylay-1.4.0/tests/spdylay_gzip_test.c	2016-10-27 01:54:00.049311400 -0400
@@ -46,9 +46,9 @@
   rv = deflateInit(&zst, Z_DEFAULT_COMPRESSION);
   assert(rv == Z_OK);
 
-  zst.avail_in = (uint)inlen;
+  zst.avail_in = (uInt)inlen;
   zst.next_in = (uint8_t*)in;
-  zst.avail_out = (uint)outlen;
+  zst.avail_out = (uInt)outlen;
   zst.next_out = out;
   rv = deflate(&zst, Z_SYNC_FLUSH);
   assert(rv == Z_OK);
