From: Hartmut Holzgraefe Date: Tue, 21 Nov 2000 00:40:13 +0000 (+0000) Subject: all the _GNU_SOURCE dependant stuff is now in zlib_fopen_wrapper.c X-Git-Tag: php-4.0.4RC3~130 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cedb39ee560fde66b7c5fddeaba2aeed0deffcf5;p=php all the _GNU_SOURCE dependant stuff is now in zlib_fopen_wrapper.c so all the #define/#include workarounds in zlib.c are no longer needed --- diff --git a/ext/zlib/Makefile.in b/ext/zlib/Makefile.in index 3b767fb7fa..bda6385578 100644 --- a/ext/zlib/Makefile.in +++ b/ext/zlib/Makefile.in @@ -1,6 +1,6 @@ LTLIBRARY_NAME = libzlib.la -LTLIBRARY_SOURCES = zlib.c +LTLIBRARY_SOURCES = zlib.c zlib_fopen_wrapper.c LTLIBRARY_SHARED_NAME = zlib.la LTLIBRARY_SHARED_LIBADD = $(ZLIB_SHARED_LIBADD) diff --git a/ext/zlib/php_zlib.h b/ext/zlib/php_zlib.h index b856fc9fd0..c977133bc5 100644 --- a/ext/zlib/php_zlib.h +++ b/ext/zlib/php_zlib.h @@ -61,6 +61,9 @@ PHP_FUNCTION(gzinflate); PHP_FUNCTION(gzencode); PHP_FUNCTION(ob_gzhandler); +FILE *zlib_fopen_wrapper(char *path, char *mode, int options, int *issock, int *socketd, char **opened_path); + + #ifdef ZTS #define ZLIBLS_D php_zlib_globals *zlib_globals #define ZLIBLS_DC , ZLIBLS_D diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 695fc37abf..5a8a634eab 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -19,15 +19,6 @@ /* $Id$ */ #define IS_EXT_MODULE -#ifndef PHP_WIN32 -#include "php_config.h" -#endif - -#if HAVE_FOPENCOOKIE -#define _GNU_SOURCE -#include -#endif - #include "php.h" #include "SAPI.h" @@ -81,10 +72,6 @@ int zlib_globals_id; static php_zlib_globals zlib_globals; #endif -#if HAVE_FOPENCOOKIE -static FILE *zlib_fopen_wrapper(char *path, char *mode, int options, int *issock, int *socketd, char **opened_path); -#endif - #define OS_CODE 0x03 /* FIXME */ #define CODING_GZIP 1 #define CODING_DEFLATE 2 @@ -941,78 +928,6 @@ PHP_FUNCTION(gzinflate) } /* }}} */ -#if HAVE_FOPENCOOKIE -struct gz_cookie { - gzFile gz_file; -}; - -static ssize_t gz_reader(void *cookie, char *buffer, size_t size) -{ - return gzread(((struct gz_cookie *)cookie)->gz_file,buffer,size); -} - -static ssize_t gz_writer(void *cookie, const char *buffer, size_t size) { - return gzwrite(((struct gz_cookie *)cookie)->gz_file,(char *)buffer,size); -} - -static int gz_seeker(void *cookie,off_t position, int whence) { - return gzseek(((struct gz_cookie *)cookie)->gz_file,(z_off_t)position,whence); -} - -static int gz_closer(void *cookie) { - int ret=gzclose(((struct gz_cookie *)cookie)->gz_file); - efree(cookie); - cookie=NULL; - return ret; -} - - - -static COOKIE_IO_FUNCTIONS_T gz_cookie_functions = -{ gz_reader -, gz_writer -, gz_seeker -, gz_closer -}; - -static FILE *zlib_fopen_wrapper(char *path, char *mode, int options, int *issock, int *socketd, char **opened_path) -{ - struct gz_cookie *gc = NULL; - FILE *fp; - int fissock=0, fsocketd=0; - - gc = (struct gz_cookie *)emalloc(sizeof(struct gz_cookie)); - - if(gc) { - *issock = 0; - - while(*path!=':') - path++; - - path++; - - fp = php_fopen_wrapper(path, mode, options|IGNORE_URL, &fissock, &fsocketd, NULL); - - if (!fp) { - efree(gc); - return NULL; - } - - gc->gz_file = gzdopen(fileno(fp), mode); - - if(gc->gz_file) { - return fopencookie(gc,mode,gz_cookie_functions); - } else { - efree(gc); - return NULL; - } - } - errno = ENOENT; - return NULL; -} - - -#endif static int php_do_deflate(uint str_length, Bytef **p_buffer, uint *p_buf_used ZLIBLS_DC) diff --git a/ext/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c new file mode 100644 index 0000000000..d2eab5939f --- /dev/null +++ b/ext/zlib/zlib_fopen_wrapper.c @@ -0,0 +1,105 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Rasmus Lerdorf | + | Stefan Röhrich | + +----------------------------------------------------------------------+ + */ +/* $Id$ */ +#define IS_EXT_MODULE +#define _GNU_SOURCE + +#include "php.h" +#include "php_zlib.h" +#include "fopen-wrappers.h" + +#if HAVE_FOPENCOOKIE + + +struct gz_cookie { + gzFile gz_file; +}; + +static ssize_t gz_reader(void *cookie, char *buffer, size_t size) +{ + return gzread(((struct gz_cookie *)cookie)->gz_file,buffer,size); +} + +static ssize_t gz_writer(void *cookie, const char *buffer, size_t size) { + return gzwrite(((struct gz_cookie *)cookie)->gz_file,(char *)buffer,size); +} + +static int gz_seeker(void *cookie,off_t position, int whence) { + return gzseek(((struct gz_cookie *)cookie)->gz_file,(z_off_t)position,whence); +} + +static int gz_closer(void *cookie) { + int ret=gzclose(((struct gz_cookie *)cookie)->gz_file); + free(cookie); + cookie=NULL; + return ret; +} + + + +static COOKIE_IO_FUNCTIONS_T gz_cookie_functions = +{ gz_reader +, gz_writer +, gz_seeker +, gz_closer +}; + +FILE *zlib_fopen_wrapper(char *path, char *mode, int options, int *issock, int *socketd, char **opened_path) +{ + struct gz_cookie *gc = NULL; + FILE *fp; + int fissock=0, fsocketd=0; + + gc = (struct gz_cookie *)malloc(sizeof(struct gz_cookie)); + + if(gc) { + *issock = 0; + + while(*path!=':') + path++; + + path++; + + fp = php_fopen_wrapper(path, mode, options|IGNORE_URL, &fissock, &fsocketd, NULL); + + if (!fp) { + free(gc); + return NULL; + } + + gc->gz_file = gzdopen(fileno(fp), mode); + + if(gc->gz_file) { + return fopencookie(gc,mode,gz_cookie_functions); + } else { + free(gc); + return NULL; + } + } + errno = ENOENT; + return NULL; +} +#endif + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */