Skip to content

Commit

Permalink
Add gzopen_w() in Windows for wide character path names.
Browse files Browse the repository at this point in the history
  • Loading branch information
madler committed Mar 17, 2012
1 parent a3881cc commit dbe0bed
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 19 deletions.
3 changes: 3 additions & 0 deletions contrib/vstudio/vc10/zlibvc.def
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,6 @@ EXPORTS
gzflags @162
inflateResetKeep @163
deflateResetKeep @164

; zlib1 v1.2.7 added:
gzopen_w @165
5 changes: 4 additions & 1 deletion contrib/vstudio/vc9/zlibvc.def
Original file line number Diff line number Diff line change
Expand Up @@ -134,4 +134,7 @@ EXPORTS
gzgetc_ @161
gzflags @162
inflateResetKeep @163
deflateResetKeep @164
deflateResetKeep @164

; zlib1 v1.2.7 added:
gzopen_w @165
2 changes: 1 addition & 1 deletion gzguts.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#endif
#include <fcntl.h>

#if defined(__TURBOC__) || defined(_MSC_VER)
#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
# include <io.h>
#endif

Expand Down
48 changes: 32 additions & 16 deletions gzlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

/* Local functions */
local void gz_reset OF((gz_statep));
local gzFile gz_open OF((const char *, int, const char *));
local gzFile gz_open OF((const void *, int, const char *));

#if defined UNDER_CE

Expand Down Expand Up @@ -89,11 +89,12 @@ local void gz_reset(state)

/* Open a gzip file either by name or file descriptor. */
local gzFile gz_open(path, fd, mode)
const char *path;
const void *path;
int fd;
const char *mode;
{
gz_statep state;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
#endif
Expand Down Expand Up @@ -191,28 +192,33 @@ local gzFile gz_open(path, fd, mode)
}
strcpy(state->path, path);

/* open the file with the appropriate mode (or just use fd) */
state->fd = fd != -1 ? fd :
open(path,
/* compute the flags for open() */
oflag =
#ifdef O_LARGEFILE
O_LARGEFILE |
O_LARGEFILE |
#endif
#ifdef O_BINARY
O_BINARY |
O_BINARY |
#endif
#ifdef O_CLOEXEC
(cloexec ? O_CLOEXEC : 0) |
(cloexec ? O_CLOEXEC : 0) |
#endif
(state->mode == GZ_READ ?
O_RDONLY :
(O_WRONLY | O_CREAT |
(state->mode == GZ_READ ?
O_RDONLY :
(O_WRONLY | O_CREAT |
#ifdef O_EXCL
(exclusive ? O_EXCL : 0) |
(exclusive ? O_EXCL : 0) |
#endif
(state->mode == GZ_WRITE ?
O_TRUNC :
O_APPEND)));

/* open the file with the appropriate flags (or just use fd) */
state->fd = fd > -1 ? fd : (
#ifdef _WIN32
fd == -2 ? _wopen(path, oflag, 0666) :
#endif
(state->mode == GZ_WRITE ?
O_TRUNC :
O_APPEND))),
0666);
open(path, oflag, 0666));
if (state->fd == -1) {
free(state->path);
free(state);
Expand Down Expand Up @@ -266,6 +272,16 @@ gzFile ZEXPORT gzdopen(fd, mode)
return gz;
}

/* -- see zlib.h -- */
#ifdef _WIN32
gzFile ZEXPORT gzopen_w(path, mode)
const w_char *path;
const char *mode;
{
return gz_open(path, -2, mode);
}
#endif

/* -- see zlib.h -- */
int ZEXPORT gzbuffer(file, size)
gzFile file;
Expand Down
3 changes: 2 additions & 1 deletion win32/zlib.def
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,11 @@ EXPORTS
inflateInit_
inflateInit2_
inflateBackInit_
gzgetc_
zError
inflateSyncPoint
get_crc_table
inflateUndermine
inflateResetKeep
deflateResetKeep
gzgetc_
gzopen_w
3 changes: 3 additions & 0 deletions zconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@
# define gzoffset64 z_gzoffset64
# define gzopen z_gzopen
# define gzopen64 z_gzopen64
# ifdef _WIN32
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
Expand Down
3 changes: 3 additions & 0 deletions zconf.h.cmakein
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@
# define gzoffset64 z_gzoffset64
# define gzopen z_gzopen
# define gzopen64 z_gzopen64
# ifdef _WIN32
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
Expand Down
3 changes: 3 additions & 0 deletions zconf.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@
# define gzoffset64 z_gzoffset64
# define gzopen z_gzopen
# define gzopen64 z_gzopen64
# ifdef _WIN32
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
Expand Down
4 changes: 4 additions & 0 deletions zlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -1732,6 +1732,10 @@ ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
#if defined(_WIN32) && !defined(Z_SOLO)
ZEXTERN gzFile ZEXPORT gzopen_w OF((const w_char *path,
const char *mode));
#endif

#ifdef __cplusplus
}
Expand Down

0 comments on commit dbe0bed

Please sign in to comment.