aboutsummaryrefslogtreecommitdiff
path: root/gzlib.c
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2012-03-18 14:52:31 -0700
committerMark Adler <madler@alumni.caltech.edu>2012-03-18 14:52:31 -0700
commita5d803b7efde22b8d26a8d8e3044c13281a3ea9a (patch)
tree9e54d63be9bafdc986e09be6f71be9331a9779dd /gzlib.c
parent04afd39fcc753e2f1369cb471cb6592ea5946546 (diff)
downloadzlib-a5d803b7efde22b8d26a8d8e3044c13281a3ea9a.tar.gz
zlib-a5d803b7efde22b8d26a8d8e3044c13281a3ea9a.tar.bz2
zlib-a5d803b7efde22b8d26a8d8e3044c13281a3ea9a.zip
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.
Diffstat (limited to 'gzlib.c')
-rw-r--r--gzlib.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/gzlib.c b/gzlib.c
index e4908e0..ca55c6e 100644
--- a/gzlib.c
+++ b/gzlib.c
@@ -94,6 +94,7 @@ local gzFile gz_open(path, fd, mode)
94 const char *mode; 94 const char *mode;
95{ 95{
96 gz_statep state; 96 gz_statep state;
97 size_t len;
97 int oflag; 98 int oflag;
98#ifdef O_CLOEXEC 99#ifdef O_CLOEXEC
99 int cloexec = 0; 100 int cloexec = 0;
@@ -185,13 +186,29 @@ local gzFile gz_open(path, fd, mode)
185 } 186 }
186 187
187 /* save the path name for error messages */ 188 /* save the path name for error messages */
188# define WPATH "<widepath>" 189#ifdef _WIN32
189 state->path = malloc(strlen(fd == -2 ? WPATH : path) + 1); 190 if (fd == -2) {
191 len = wcstombs(NULL, path, 0);
192 if (len == (size_t)-1)
193 len = 0;
194 }
195 else
196#endif
197 len = strlen(path);
198 state->path = malloc(len + 1);
190 if (state->path == NULL) { 199 if (state->path == NULL) {
191 free(state); 200 free(state);
192 return NULL; 201 return NULL;
193 } 202 }
194 strcpy(state->path, fd == -2 ? WPATH : path); 203#ifdef _WIN32
204 if (fd == -2)
205 if (len)
206 wcstombs(state->path, path, len + 1);
207 else
208 *(state->path) = 0;
209 else
210#endif
211 strcpy(state->path, path);
195 212
196 /* compute the flags for open() */ 213 /* compute the flags for open() */
197 oflag = 214 oflag =