Skip to content

Commit

Permalink
Attempt to convert the wchar_t path in gzopen_w() for errors.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
madler committed Mar 18, 2012
1 parent 04afd39 commit a5d803b
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions gzlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 =
Expand Down

0 comments on commit a5d803b

Please sign in to comment.