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:
parent
04afd39fcc
commit
a5d803b7ef
23
gzlib.c
23
gzlib.c
@ -94,6 +94,7 @@ local gzFile gz_open(path, fd, mode)
|
|||||||
const char *mode;
|
const char *mode;
|
||||||
{
|
{
|
||||||
gz_statep state;
|
gz_statep state;
|
||||||
|
size_t len;
|
||||||
int oflag;
|
int oflag;
|
||||||
#ifdef O_CLOEXEC
|
#ifdef O_CLOEXEC
|
||||||
int cloexec = 0;
|
int cloexec = 0;
|
||||||
@ -185,13 +186,29 @@ local gzFile gz_open(path, fd, mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* save the path name for error messages */
|
/* save the path name for error messages */
|
||||||
# define WPATH "<widepath>"
|
#ifdef _WIN32
|
||||||
state->path = malloc(strlen(fd == -2 ? WPATH : path) + 1);
|
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) {
|
if (state->path == NULL) {
|
||||||
free(state);
|
free(state);
|
||||||
return NULL;
|
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() */
|
/* compute the flags for open() */
|
||||||
oflag =
|
oflag =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user