From: Mark Adler Date: Sun, 18 Mar 2012 21:52:31 +0000 (-0700) Subject: Attempt to convert the wchar_t path in gzopen_w() for errors. X-Git-Tag: v1.2.7~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5d803b7efde22b8d26a8d8e3044c13281a3ea9a;p=thirdparty%2Fzlib-ng.git Attempt to convert the wchar_t path in gzopen_w() for errors. The conversion to multi-byte will be locale-specific, but it's better than nothing and is only to provide more information in the error message returned by gz_error(). The conversion has no effect on what's opened. --- diff --git a/gzlib.c b/gzlib.c index e4908e003..ca55c6ea9 100644 --- a/gzlib.c +++ b/gzlib.c @@ -94,6 +94,7 @@ local gzFile gz_open(path, fd, mode) const char *mode; { gz_statep state; + size_t len; int oflag; #ifdef O_CLOEXEC int cloexec = 0; @@ -185,13 +186,29 @@ local gzFile gz_open(path, fd, mode) } /* save the path name for error messages */ -# define WPATH "" - state->path = malloc(strlen(fd == -2 ? WPATH : path) + 1); +#ifdef _WIN32 + if (fd == -2) { + len = wcstombs(NULL, path, 0); + if (len == (size_t)-1) + len = 0; + } + else +#endif + len = strlen(path); + state->path = malloc(len + 1); if (state->path == NULL) { free(state); return NULL; } - strcpy(state->path, fd == -2 ? WPATH : path); +#ifdef _WIN32 + if (fd == -2) + if (len) + wcstombs(state->path, path, len + 1); + else + *(state->path) = 0; + else +#endif + strcpy(state->path, path); /* compute the flags for open() */ oflag =