From: Mark Adler Date: Sat, 17 Mar 2012 03:53:09 +0000 (-0700) Subject: Add gzopen_w() in Windows for wide character path names. X-Git-Tag: v1.2.7~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dbe0bed739c26a2c36319794108cb87ad77c5469;p=thirdparty%2Fzlib-ng.git Add gzopen_w() in Windows for wide character path names. --- diff --git a/contrib/vstudio/vc10/zlibvc.def b/contrib/vstudio/vc10/zlibvc.def index d39a1d246..f0bf0351c 100644 --- a/contrib/vstudio/vc10/zlibvc.def +++ b/contrib/vstudio/vc10/zlibvc.def @@ -135,3 +135,6 @@ EXPORTS gzflags @162 inflateResetKeep @163 deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 diff --git a/contrib/vstudio/vc9/zlibvc.def b/contrib/vstudio/vc9/zlibvc.def index 0c6d77428..03a45dc41 100644 --- a/contrib/vstudio/vc9/zlibvc.def +++ b/contrib/vstudio/vc9/zlibvc.def @@ -134,4 +134,7 @@ EXPORTS gzgetc_ @161 gzflags @162 inflateResetKeep @163 - deflateResetKeep @164 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 diff --git a/gzguts.h b/gzguts.h index 0ccc9a678..13e81791e 100644 --- a/gzguts.h +++ b/gzguts.h @@ -27,7 +27,7 @@ #endif #include -#if defined(__TURBOC__) || defined(_MSC_VER) +#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) # include #endif diff --git a/gzlib.c b/gzlib.c index c35a6de31..e90b6adb0 100644 --- a/gzlib.c +++ b/gzlib.c @@ -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 @@ -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 @@ -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); @@ -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; diff --git a/win32/zlib.def b/win32/zlib.def index a2a2081c3..04896150e 100644 --- a/win32/zlib.def +++ b/win32/zlib.def @@ -74,10 +74,11 @@ EXPORTS inflateInit_ inflateInit2_ inflateBackInit_ + gzgetc_ zError inflateSyncPoint get_crc_table inflateUndermine inflateResetKeep deflateResetKeep - gzgetc_ + gzopen_w diff --git a/zconf.h b/zconf.h index af35c382d..f9a5fa7d6 100644 --- a/zconf.h +++ b/zconf.h @@ -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 diff --git a/zconf.h.cmakein b/zconf.h.cmakein index 81a7b7aa5..66368adf9 100644 --- a/zconf.h.cmakein +++ b/zconf.h.cmakein @@ -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 diff --git a/zconf.h.in b/zconf.h.in index af35c382d..f9a5fa7d6 100644 --- a/zconf.h.in +++ b/zconf.h.in @@ -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 diff --git a/zlib.h b/zlib.h index a569b002a..361d72f5d 100644 --- a/zlib.h +++ b/zlib.h @@ -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 }