| Index: third_party/zlib/gzlib.c
|
| diff --git a/third_party/zlib/gzlib.c b/third_party/zlib/gzlib.c
|
| index fae202ef8905a3c99e4b71d756a45d55f9b1c163..4105e6aff92594fb9cfa557aa8349cea5a5d4a2b 100644
|
| --- a/third_party/zlib/gzlib.c
|
| +++ b/third_party/zlib/gzlib.c
|
| @@ -1,11 +1,11 @@
|
| /* gzlib.c -- zlib functions common to reading and writing gzip files
|
| - * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
|
| + * Copyright (C) 2004-2017 Mark Adler
|
| * For conditions of distribution and use, see copyright notice in zlib.h
|
| */
|
|
|
| #include "gzguts.h"
|
|
|
| -#if defined(_WIN32) && !defined(__BORLANDC__)
|
| +#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
|
| # define LSEEK _lseeki64
|
| #else
|
| #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
|
| @@ -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;
|
| @@ -188,10 +188,10 @@ local gzFile gz_open(path, fd, mode)
|
| }
|
|
|
| /* save the path name for error messages */
|
| -#ifdef _WIN32
|
| +#ifdef WIDECHAR
|
| if (fd == -2) {
|
| len = wcstombs(NULL, path, 0);
|
| - if (len == (size_t)-1)
|
| + if (len == (z_size_t)-1)
|
| len = 0;
|
| }
|
| else
|
| @@ -202,7 +202,7 @@ local gzFile gz_open(path, fd, mode)
|
| free(state);
|
| return NULL;
|
| }
|
| -#ifdef _WIN32
|
| +#ifdef WIDECHAR
|
| if (fd == -2)
|
| if (len)
|
| wcstombs(state->path, path, len + 1);
|
| @@ -211,7 +211,7 @@ local gzFile gz_open(path, fd, mode)
|
| else
|
| #endif
|
| #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
|
| - snprintf(state->path, len + 1, "%s", (const char *)path);
|
| + (void)snprintf(state->path, len + 1, "%s", (const char *)path);
|
| #else
|
| strcpy(state->path, path);
|
| #endif
|
| @@ -239,7 +239,7 @@ local gzFile gz_open(path, fd, mode)
|
|
|
| /* open the file with the appropriate flags (or just use fd) */
|
| state->fd = fd > -1 ? fd : (
|
| -#ifdef _WIN32
|
| +#ifdef WIDECHAR
|
| fd == -2 ? _wopen(path, oflag, 0666) :
|
| #endif
|
| open((const char *)path, oflag, 0666));
|
| @@ -248,8 +248,10 @@ local gzFile gz_open(path, fd, mode)
|
| free(state);
|
| return NULL;
|
| }
|
| - if (state->mode == GZ_APPEND)
|
| + if (state->mode == GZ_APPEND) {
|
| + LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */
|
| state->mode = GZ_WRITE; /* simplify later checks */
|
| + }
|
|
|
| /* save the current position for rewinding (only if reading) */
|
| if (state->mode == GZ_READ) {
|
| @@ -291,7 +293,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
|
| if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
|
| return NULL;
|
| #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
|
| - snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
|
| + (void)snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd);
|
| #else
|
| sprintf(path, "<fd:%d>", fd); /* for debugging */
|
| #endif
|
| @@ -301,7 +303,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
|
| }
|
|
|
| /* -- see zlib.h -- */
|
| -#ifdef _WIN32
|
| +#ifdef WIDECHAR
|
| gzFile ZEXPORT gzopen_w(path, mode)
|
| const wchar_t *path;
|
| const char *mode;
|
| @@ -329,6 +331,8 @@ int ZEXPORT gzbuffer(file, size)
|
| return -1;
|
|
|
| /* check and set requested size */
|
| + if ((size << 1) < size)
|
| + return -1; /* need to be able to double it */
|
| if (size < 2)
|
| size = 2; /* need two bytes to check magic header */
|
| state->want = size;
|
| @@ -604,14 +608,13 @@ void ZLIB_INTERNAL gz_error(state, err, msg)
|
| return;
|
| }
|
| #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
|
| - snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
|
| - "%s%s%s", state->path, ": ", msg);
|
| + (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
|
| + "%s%s%s", state->path, ": ", msg);
|
| #else
|
| strcpy(state->msg, state->path);
|
| strcat(state->msg, ": ");
|
| strcat(state->msg, msg);
|
| #endif
|
| - return;
|
| }
|
|
|
| #ifndef INT_MAX
|
|
|