diff options
author | Hartmut Holzgraefe <hholzgra@php.net> | 2000-11-21 00:40:13 +0000 |
---|---|---|
committer | Hartmut Holzgraefe <hholzgra@php.net> | 2000-11-21 00:40:13 +0000 |
commit | cedb39ee560fde66b7c5fddeaba2aeed0deffcf5 (patch) | |
tree | db8e584984967ed7ea1a878dfbed13b963b0f85b /ext/zlib/zlib_fopen_wrapper.c | |
parent | ee23c5310860b42b0b028bdbc7ccc8d7c1b30ec0 (diff) | |
download | php-git-cedb39ee560fde66b7c5fddeaba2aeed0deffcf5.tar.gz |
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
Diffstat (limited to 'ext/zlib/zlib_fopen_wrapper.c')
-rw-r--r-- | ext/zlib/zlib_fopen_wrapper.c | 105 |
1 files changed, 105 insertions, 0 deletions
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 <rasmus@lerdorf.on.ca> | + | Stefan Röhrich <sr@linux.de> | + +----------------------------------------------------------------------+ + */ +/* $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: + */ |