Skip to content
Browse files

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.
  • Loading branch information...
1 parent 04afd39 commit a5d803b7efde22b8d26a8d8e3044c13281a3ea9a @madler committed Mar 18, 2012
Showing with 20 additions and 3 deletions.
  1. +20 −3 gzlib.c
View
23 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 "<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 =

0 comments on commit a5d803b

Please sign in to comment.
Something went wrong with that request. Please try again.