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.
This commit is contained in:
Mark Adler 2012-03-18 14:52:31 -07:00
parent 04afd39fcc
commit a5d803b7ef

23
gzlib.c
View File

@ -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 "<widepath>"
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 =