diff --git a/contrib/minizip/ioapi.h b/contrib/minizip/ioapi.h
index 8dcbdb06e35a..c1b7a54847f5 100644
--- a/contrib/minizip/ioapi.h
+++ b/contrib/minizip/ioapi.h
@@ -43,7 +43,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 
 #if defined(USE_FILE32API)
 #define fopen64 fopen
diff --git a/contrib/minizip/iowin32.c b/contrib/minizip/iowin32.c
index 274f39eb1dd2..246ceb91a139 100644
--- a/contrib/minizip/iowin32.c
+++ b/contrib/minizip/iowin32.c
@@ -26,12 +26,19 @@
 #endif
 
 
+#ifdef _WIN32_WINNT
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x601
+#endif
+
+#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
 // see Include/shared/winapifamily.h in the Windows Kit
 #if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
 #if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
 #define IOWIN32_USING_WINRT_API 1
 #endif
 #endif
+#endif
 
 voidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));
 uLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));
diff --git a/contrib/minizip/mztools.c b/contrib/minizip/mztools.c
index 96891c2e0b71..8bf9cca32633 100644
--- a/contrib/minizip/mztools.c
+++ b/contrib/minizip/mztools.c
@@ -8,7 +8,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 #include "unzip.h"
 
 #define READ_8(adr)  ((unsigned char)*(adr))
diff --git a/contrib/minizip/mztools.h b/contrib/minizip/mztools.h
index a49a426ec2fc..f295ffeda6af 100644
--- a/contrib/minizip/mztools.h
+++ b/contrib/minizip/mztools.h
@@ -12,7 +12,7 @@ extern "C" {
 #endif
 
 #ifndef _ZLIB_H
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 #endif
 
 #include "unzip.h"
diff --git a/contrib/minizip/unzip.c b/contrib/minizip/unzip.c
index bcfb9416ec35..199b4723fcfc 100644
--- a/contrib/minizip/unzip.c
+++ b/contrib/minizip/unzip.c
@@ -72,7 +72,7 @@
         #define NOUNCRYPT
 #endif
 
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 #include "unzip.h"
 
 #ifdef STDC
@@ -1705,11 +1705,6 @@ extern int ZEXPORT unzReadCurrentFile  (unzFile file, voidp buf, unsigned len)
 
     pfile_in_zip_read_info->stream.avail_out = (uInt)len;
 
-    if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
-        (!(pfile_in_zip_read_info->raw)))
-        pfile_in_zip_read_info->stream.avail_out =
-            (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
-
     if ((len>pfile_in_zip_read_info->rest_read_compressed+
            pfile_in_zip_read_info->stream.avail_in) &&
          (pfile_in_zip_read_info->raw))
diff --git a/contrib/minizip/unzip.h b/contrib/minizip/unzip.h
index 2104e3915074..3c0143529b91 100644
--- a/contrib/minizip/unzip.h
+++ b/contrib/minizip/unzip.h
@@ -48,7 +48,7 @@ extern "C" {
 #endif
 
 #ifndef _ZLIB_H
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 #endif
 
 #ifndef  _ZLIBIOAPI_H
diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c
index 44e88a9cb989..65c0c7251843 100644
--- a/contrib/minizip/zip.c
+++ b/contrib/minizip/zip.c
@@ -26,7 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 #include "zip.h"
 
 #ifdef STDC
diff --git a/contrib/minizip/zip.h b/contrib/minizip/zip.h
index 8aaebb623430..8c06c0aa7bb0 100644
--- a/contrib/minizip/zip.h
+++ b/contrib/minizip/zip.h
@@ -47,7 +47,7 @@ extern "C" {
 //#define HAVE_BZIP2
 
 #ifndef _ZLIB_H
-#include "zlib.h"
+#include "third_party/zlib/zlib.h"
 #endif
 
 #ifndef _ZLIBIOAPI_H
diff --git a/gzread.c b/gzread.c
index 956b91ea7d9e..832d3ef98c59 100644
--- a/gzread.c
+++ b/gzread.c
@@ -443,7 +443,11 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file)
 #  undef z_gzgetc
 #else
 #  undef gzgetc
+#  ifdef Z_CR_PREFIX_SET
+#    define gzgetc Cr_z_gzgetc
+#  endif
 #endif
+
 int ZEXPORT gzgetc(file)
     gzFile file;
 {
diff --git a/names.h b/names.h
new file mode 100644
index 000000000000..f18df5684dc5
--- /dev/null
+++ b/names.h
@@ -0,0 +1,155 @@
+/* Copyright 2017 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file. */
+
+#ifndef THIRD_PARTY_ZLIB_NAMES_H_
+#define THIRD_PARTY_ZLIB_NAMES_H_
+
+/* Rename all zlib names with a Cr_z_ prefix. This is based on the Z_PREFIX
+ * option from zconf.h, but with a custom prefix. Where zconf.h would rename
+ * both a macro and its underscore-suffixed internal implementation (such as
+ * deflateInit2 and deflateInit2_), only the implementation is renamed here.
+ * The Byte type is also omitted.
+ *
+ * To generate this list, run
+ * sed -rn -e 's/^# *define +([^ ]+) +(z_[^ ]+)$/#define \1 Cr_\2/p' zconf.h
+ * (use -E instead of -r on macOS).
+ *
+ * gzread is also addressed by modifications in gzread.c and zlib.h. */
+
+#define Z_CR_PREFIX_SET
+
+#define _dist_code Cr_z__dist_code
+#define _length_code Cr_z__length_code
+#define _tr_align Cr_z__tr_align
+#define _tr_flush_bits Cr_z__tr_flush_bits
+#define _tr_flush_block Cr_z__tr_flush_block
+#define _tr_init Cr_z__tr_init
+#define _tr_stored_block Cr_z__tr_stored_block
+#define _tr_tally Cr_z__tr_tally
+#define adler32 Cr_z_adler32
+#define adler32_combine Cr_z_adler32_combine
+#define adler32_combine64 Cr_z_adler32_combine64
+#define adler32_z Cr_z_adler32_z
+#define compress Cr_z_compress
+#define compress2 Cr_z_compress2
+#define compressBound Cr_z_compressBound
+#define crc32 Cr_z_crc32
+#define crc32_combine Cr_z_crc32_combine
+#define crc32_combine64 Cr_z_crc32_combine64
+#define crc32_z Cr_z_crc32_z
+#define deflate Cr_z_deflate
+#define deflateBound Cr_z_deflateBound
+#define deflateCopy Cr_z_deflateCopy
+#define deflateEnd Cr_z_deflateEnd
+#define deflateGetDictionary Cr_z_deflateGetDictionary
+/* #undef deflateInit */
+/* #undef deflateInit2 */
+#define deflateInit2_ Cr_z_deflateInit2_
+#define deflateInit_ Cr_z_deflateInit_
+#define deflateParams Cr_z_deflateParams
+#define deflatePending Cr_z_deflatePending
+#define deflatePrime Cr_z_deflatePrime
+#define deflateReset Cr_z_deflateReset
+#define deflateResetKeep Cr_z_deflateResetKeep
+#define deflateSetDictionary Cr_z_deflateSetDictionary
+#define deflateSetHeader Cr_z_deflateSetHeader
+#define deflateTune Cr_z_deflateTune
+#define deflate_copyright Cr_z_deflate_copyright
+#define get_crc_table Cr_z_get_crc_table
+#define gz_error Cr_z_gz_error
+#define gz_intmax Cr_z_gz_intmax
+#define gz_strwinerror Cr_z_gz_strwinerror
+#define gzbuffer Cr_z_gzbuffer
+#define gzclearerr Cr_z_gzclearerr
+#define gzclose Cr_z_gzclose
+#define gzclose_r Cr_z_gzclose_r
+#define gzclose_w Cr_z_gzclose_w
+#define gzdirect Cr_z_gzdirect
+#define gzdopen Cr_z_gzdopen
+#define gzeof Cr_z_gzeof
+#define gzerror Cr_z_gzerror
+#define gzflush Cr_z_gzflush
+#define gzfread Cr_z_gzfread
+#define gzfwrite Cr_z_gzfwrite
+#define gzgetc Cr_z_gzgetc
+#define gzgetc_ Cr_z_gzgetc_
+#define gzgets Cr_z_gzgets
+#define gzoffset Cr_z_gzoffset
+#define gzoffset64 Cr_z_gzoffset64
+#define gzopen Cr_z_gzopen
+#define gzopen64 Cr_z_gzopen64
+#define gzopen_w Cr_z_gzopen_w
+#define gzprintf Cr_z_gzprintf
+#define gzputc Cr_z_gzputc
+#define gzputs Cr_z_gzputs
+#define gzread Cr_z_gzread
+#define gzrewind Cr_z_gzrewind
+#define gzseek Cr_z_gzseek
+#define gzseek64 Cr_z_gzseek64
+#define gzsetparams Cr_z_gzsetparams
+#define gztell Cr_z_gztell
+#define gztell64 Cr_z_gztell64
+#define gzungetc Cr_z_gzungetc
+#define gzvprintf Cr_z_gzvprintf
+#define gzwrite Cr_z_gzwrite
+#define inflate Cr_z_inflate
+#define inflateBack Cr_z_inflateBack
+#define inflateBackEnd Cr_z_inflateBackEnd
+/* #undef inflateBackInit */
+#define inflateBackInit_ Cr_z_inflateBackInit_
+#define inflateCodesUsed Cr_z_inflateCodesUsed
+#define inflateCopy Cr_z_inflateCopy
+#define inflateEnd Cr_z_inflateEnd
+#define inflateGetDictionary Cr_z_inflateGetDictionary
+#define inflateGetHeader Cr_z_inflateGetHeader
+/* #undef inflateInit */
+/* #undef inflateInit2 */
+#define inflateInit2_ Cr_z_inflateInit2_
+#define inflateInit_ Cr_z_inflateInit_
+#define inflateMark Cr_z_inflateMark
+#define inflatePrime Cr_z_inflatePrime
+#define inflateReset Cr_z_inflateReset
+#define inflateReset2 Cr_z_inflateReset2
+#define inflateResetKeep Cr_z_inflateResetKeep
+#define inflateSetDictionary Cr_z_inflateSetDictionary
+#define inflateSync Cr_z_inflateSync
+#define inflateSyncPoint Cr_z_inflateSyncPoint
+#define inflateUndermine Cr_z_inflateUndermine
+#define inflateValidate Cr_z_inflateValidate
+#define inflate_copyright Cr_z_inflate_copyright
+#define inflate_fast Cr_z_inflate_fast
+#define inflate_table Cr_z_inflate_table
+#define uncompress Cr_z_uncompress
+#define uncompress2 Cr_z_uncompress2
+#define zError Cr_z_zError
+#define zcalloc Cr_z_zcalloc
+#define zcfree Cr_z_zcfree
+#define zlibCompileFlags Cr_z_zlibCompileFlags
+#define zlibVersion Cr_z_zlibVersion
+/* #undef Byte */
+#define Bytef Cr_z_Bytef
+#define alloc_func Cr_z_alloc_func
+#define charf Cr_z_charf
+#define free_func Cr_z_free_func
+#define gzFile Cr_z_gzFile
+#define gz_header Cr_z_gz_header
+#define gz_headerp Cr_z_gz_headerp
+#define in_func Cr_z_in_func
+#define intf Cr_z_intf
+#define out_func Cr_z_out_func
+#define uInt Cr_z_uInt
+#define uIntf Cr_z_uIntf
+#define uLong Cr_z_uLong
+#define uLongf Cr_z_uLongf
+#define voidp Cr_z_voidp
+#define voidpc Cr_z_voidpc
+#define voidpf Cr_z_voidpf
+#define gz_header_s Cr_z_gz_header_s
+#define internal_state Cr_z_internal_state
+/* #undef z_off64_t */
+
+/* An exported symbol that isn't handled by Z_PREFIX in zconf.h */
+#define z_errmsg Cr_z_z_errmsg
+
+#endif  /* THIRD_PARTY_ZLIB_NAMES_H_ */
diff --git a/zconf.h b/zconf.h
index 5e1d68a004e9..a7a815f575a7 100644
--- a/zconf.h
+++ b/zconf.h
@@ -8,6 +8,9 @@
 #ifndef ZCONF_H
 #define ZCONF_H
 
+/* This include does prefixing as below, but with an updated set of names */
+#include "names.h"
+
 /*
  * If you *really* need a unique prefix for all types and library functions,
  * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
@@ -431,7 +434,7 @@ typedef uLong FAR uLongf;
    typedef unsigned long z_crc_t;
 #endif
 
-#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#if !defined(_WIN32)
 #  define Z_HAVE_UNISTD_H
 #endif
 
diff --git a/zlib.h b/zlib.h
index f09cdaf1e054..99fd467f6b1a 100644
--- a/zlib.h
+++ b/zlib.h
@@ -1824,6 +1824,11 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
 #  undef z_gzgetc
 #  define z_gzgetc(g) \
           ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
+#elif defined(Z_CR_PREFIX_SET)
+#    undef gzgetc
+#    define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) \
+                     : (Cr_z_gzgetc)(g))
 #else
 #  define gzgetc(g) \
           ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
@@ -1853,11 +1858,29 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
 #    define z_adler32_combine z_adler32_combine64
 #    define z_crc32_combine z_crc32_combine64
 #  else
+#    ifdef gzopen
+#      undef gzopen
+#    endif
 #    define gzopen gzopen64
+#    ifdef gzseek
+#      undef gzseek
+#    endif
 #    define gzseek gzseek64
+#    ifdef gztell
+#      undef gztell
+#    endif
 #    define gztell gztell64
+#    ifdef gzoffset
+#      undef gzoffset
+#    endif
 #    define gzoffset gzoffset64
+#    ifdef adler32_combine
+#      undef adler32_combine
+#    endif
 #    define adler32_combine adler32_combine64
+#    ifdef crc32_combine
+#      undef crc32_combine
+#    endif
 #    define crc32_combine crc32_combine64
 #  endif
 #  ifndef Z_LARGE64
diff --git a/zutil.h b/zutil.h
index b079ea6a80f5..80375b8b6109 100644
--- a/zutil.h
+++ b/zutil.h
@@ -28,6 +28,21 @@
 #  include <string.h>
 #  include <stdlib.h>
 #endif
+#ifdef NO_ERRNO_H
+#   ifdef _WIN32_WCE
+      /* The Microsoft C Run-Time Library for Windows CE doesn't have
+       * errno.  We define it as a global variable to simplify porting.
+       * Its value is always 0 and should not be used.  We rename it to
+       * avoid conflict with other libraries that use the same workaround.
+       */
+#     define errno z_errno
+#   endif
+    extern int errno;
+#else
+#  ifndef _WIN32_WCE
+#    include <errno.h>
+#  endif
+#endif
 
 #ifdef Z_SOLO
    typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
