From 2e48996c64d0982a3a904fe48e0245a0fee51494 Mon Sep 17 00:00:00 2001 From: SVN Migration Date: Thu, 22 May 2003 23:59:38 +0000 Subject: This commit was manufactured by cvs2svn to create branch 'PHP_4_3'. --- ext/bz2/CREDITS | 2 + ext/bz2/bz2.c | 529 ++++++++++++++++++++++++++++++++++ ext/bz2/bz2.dsp | 108 +++++++ ext/bz2/config.m4 | 33 +++ ext/bz2/package.xml | 35 +++ ext/bz2/php_bz2.h | 72 +++++ ext/bz2/tests/with_files.phpt | 25 ++ ext/bz2/tests/with_strings.phpt | 29 ++ ext/standard/tests/serialize/004.phpt | 33 +++ 9 files changed, 866 insertions(+) create mode 100644 ext/bz2/CREDITS create mode 100644 ext/bz2/bz2.c create mode 100644 ext/bz2/bz2.dsp create mode 100644 ext/bz2/config.m4 create mode 100644 ext/bz2/package.xml create mode 100644 ext/bz2/php_bz2.h create mode 100644 ext/bz2/tests/with_files.phpt create mode 100644 ext/bz2/tests/with_strings.phpt create mode 100644 ext/standard/tests/serialize/004.phpt diff --git a/ext/bz2/CREDITS b/ext/bz2/CREDITS new file mode 100644 index 0000000000..67dff9f41d --- /dev/null +++ b/ext/bz2/CREDITS @@ -0,0 +1,2 @@ +Bzip2 +Sterling Hughes diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c new file mode 100644 index 0000000000..7618ef0cc9 --- /dev/null +++ b/ext/bz2/bz2.c @@ -0,0 +1,529 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2003 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. | + +----------------------------------------------------------------------+ + | Author: Sterling Hughes | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_bz2.h" + +#if HAVE_BZ2 + +/* PHP Includes */ +#include "ext/standard/file.h" +#include "ext/standard/info.h" +#include "ext/standard/php_string.h" + +/* for fileno() */ +#include + +/* Internal error constants */ +#define PHP_BZ_ERRNO 0 +#define PHP_BZ_ERRSTR 1 +#define PHP_BZ_ERRBOTH 2 + +/* Blocksize of the decompression buffer */ +#define PHP_BZ_DECOMPRESS_SIZE 4096 + +function_entry bz2_functions[] = { + PHP_FE(bzopen, NULL) + PHP_FE(bzread, NULL) + PHP_FALIAS(bzwrite, fwrite, NULL) + PHP_FALIAS(bzflush, fflush, NULL) + PHP_FALIAS(bzclose, fclose, NULL) + PHP_FE(bzerrno, NULL) + PHP_FE(bzerrstr, NULL) + PHP_FE(bzerror, NULL) + PHP_FE(bzcompress, NULL) + PHP_FE(bzdecompress, NULL) + {NULL, NULL, NULL} +}; + +zend_module_entry bz2_module_entry = { + STANDARD_MODULE_HEADER, + "bz2", + bz2_functions, + PHP_MINIT(bz2), + PHP_MSHUTDOWN(bz2), + NULL, + NULL, + PHP_MINFO(bz2), + NO_VERSION_YET, + STANDARD_MODULE_PROPERTIES +}; + +#ifdef COMPILE_DL_BZ2 +ZEND_GET_MODULE(bz2) +#endif + +struct php_bz2_stream_data_t { + BZFILE *bz_file; + php_stream *stream; +}; + +/* {{{ BZip2 stream implementation */ + +static size_t php_bz2iop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC) +{ + struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract; + size_t ret; + + ret = BZ2_bzread(self->bz_file, buf, count); + + if (ret == 0) { + stream->eof = 1; + } + + return ret; +} + +static size_t php_bz2iop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC) +{ + struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract; + + return BZ2_bzwrite(self->bz_file, (char*)buf, count); +} + +static int php_bz2iop_close(php_stream *stream, int close_handle TSRMLS_DC) +{ + struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *)stream->abstract; + int ret = EOF; + + if (close_handle) { + BZ2_bzclose(self->bz_file); + } + + if (self->stream) { + php_stream_free(self->stream, PHP_STREAM_FREE_CLOSE | (close_handle == 0 ? PHP_STREAM_FREE_PRESERVE_HANDLE : 0)); + } + + efree(self); + + return ret; +} + +static int php_bz2iop_flush(php_stream *stream TSRMLS_DC) +{ + struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *)stream->abstract; + return BZ2_bzflush(self->bz_file); +} +/* }}} */ + +php_stream_ops php_stream_bz2io_ops = { + php_bz2iop_write, php_bz2iop_read, + php_bz2iop_close, php_bz2iop_flush, + "BZip2", + NULL, /* seek */ + NULL, /* cast */ + NULL, /* stat */ + NULL /* set_option */ +}; + +/* {{{ Bzip2 stream openers */ +PHP_BZ2_API php_stream *_php_stream_bz2open_from_BZFILE(BZFILE *bz, + char *mode, php_stream *innerstream STREAMS_DC TSRMLS_DC) +{ + struct php_bz2_stream_data_t *self; + + self = emalloc(sizeof(*self)); + + self->stream = innerstream; + self->bz_file = bz; + + return php_stream_alloc_rel(&php_stream_bz2io_ops, self, 0, mode); +} + +PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, + char *path, + char *mode, + int options, + char **opened_path, + php_stream_context *context STREAMS_DC TSRMLS_DC) +{ + php_stream *retstream = NULL, *stream = NULL; + char *path_copy = NULL; + BZFILE *bz_file = NULL; + + if (strncasecmp("compress.bzip2://", path, 17) == 0) { + path += 17; + } + +#ifdef VIRTUAL_DIR + virtual_filepath(path, &path_copy TSRMLS_CC); +#else + path_copy = path; +#endif + + /* try and open it directly first */ + bz_file = BZ2_bzopen(path_copy, mode); + + if (opened_path && bz_file) { + *opened_path = estrdup(path_copy); + } + path_copy = NULL; + + if (bz_file == NULL) { + /* that didn't work, so try and get something from the network/wrapper */ + stream = php_stream_open_wrapper(path, mode, options, opened_path); + + if (stream) { + int fd; + if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD, (void **) &fd, REPORT_ERRORS)) { + bz_file = BZ2_bzdopen(fd, mode); + } + } + } + + if (bz_file) { + retstream = _php_stream_bz2open_from_BZFILE(bz_file, mode, stream STREAMS_REL_CC TSRMLS_CC); + if (retstream) { + return retstream; + } + + BZ2_bzclose(bz_file); + } + + if (stream) { + php_stream_close(stream); + } + + return NULL; +} + +/* }}} */ + +static php_stream_wrapper_ops bzip2_stream_wops = { + _php_stream_bz2open, + NULL, /* close */ + NULL, /* fstat */ + NULL, /* stat */ + NULL, /* opendir */ + "BZip2", + NULL /* unlink */ +}; + +php_stream_wrapper php_stream_bzip2_wrapper = { + &bzip2_stream_wops, + NULL, + 0 /* is_url */ +}; + +static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int); + +PHP_MINIT_FUNCTION(bz2) +{ + php_register_url_stream_wrapper("compress.bzip2", &php_stream_bzip2_wrapper TSRMLS_CC); + + return SUCCESS; +} + +PHP_MSHUTDOWN_FUNCTION(bz2) +{ + php_unregister_url_stream_wrapper("compress.bzip2" TSRMLS_CC); + + return SUCCESS; +} + +PHP_MINFO_FUNCTION(bz2) +{ + php_info_print_table_start(); + php_info_print_table_row(2, "BZip2 Support", "Enabled"); + php_info_print_table_row(2, "BZip2 Version", (char *) BZ2_bzlibVersion()); + php_info_print_table_end(); +} + +/* {{{ proto string bzread(int bz[, int length]) + Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified */ +PHP_FUNCTION(bzread) +{ + zval *bz; + long len = 1024; + php_stream *stream; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &bz, &len)) { + RETURN_FALSE; + } + + php_stream_from_zval(stream, &bz); + + if (len < 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "length may not be negative"); + RETURN_FALSE; + } + + Z_STRVAL_P(return_value) = emalloc(len + 1); + Z_STRLEN_P(return_value) = php_stream_read(stream, Z_STRVAL_P(return_value), len); + + if (Z_STRLEN_P(return_value) < 0) { + efree(Z_STRVAL_P(return_value)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not read valid bz2 data from stream"); + RETURN_FALSE; + } + + Z_STRVAL_P(return_value)[Z_STRLEN_P(return_value)] = 0; + + if (PG(magic_quotes_runtime)) { + Z_STRVAL_P(return_value) = php_addslashes( Z_STRVAL_P(return_value), + Z_STRLEN_P(return_value), + &Z_STRLEN_P(return_value), 1 TSRMLS_CC); + } + + Z_TYPE_P(return_value) = IS_STRING; +} +/* }}} */ + +/* {{{ proto resource bzopen(string|int file|fp, string mode) + Opens a new BZip2 stream */ +PHP_FUNCTION(bzopen) +{ + zval **file, /* The file to open */ + **mode; /* The mode to open the stream with */ + BZFILE *bz; /* The compressed file stream */ + php_stream *stream = NULL; + + if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &file, &mode) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(mode); + + /* If it's not a resource its a string containing the filename to open */ + if (Z_TYPE_PP(file) != IS_RESOURCE) { + convert_to_string_ex(file); + stream = php_stream_bz2open(NULL, + Z_STRVAL_PP(file), + Z_STRVAL_PP(mode), + ENFORCE_SAFE_MODE | REPORT_ERRORS, + NULL); + } else { + /* If it is a resource, than its a stream resource */ + int fd; + + php_stream_from_zval(stream, file); + + if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_FD, (void *) &fd, REPORT_ERRORS)) { + RETURN_FALSE; + } + + bz = BZ2_bzdopen(fd, Z_STRVAL_PP(mode)); + + stream = php_stream_bz2open_from_BZFILE(bz, Z_STRVAL_PP(mode), stream); + } + + if (stream) { + php_stream_to_zval(stream, return_value); + } else { + RETURN_FALSE; + } +} +/* }}} */ + +/* {{{ proto int bzerrno(resource bz) + Returns the error number */ +PHP_FUNCTION(bzerrno) +{ + php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRNO); +} +/* }}} */ + +/* {{{ proto string bzerrstr(resource bz) + Returns the error string */ +PHP_FUNCTION(bzerrstr) +{ + php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRSTR); +} +/* }}} */ + +/* {{{ proto array bzerror(resource bz) + Returns the error number and error string in an associative array */ +PHP_FUNCTION(bzerror) +{ + php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRBOTH); +} +/* }}} */ + +/* {{{ proto string bzcompress(string source [, int blocksize100k [, int workfactor]]) + Compresses a string into BZip2 encoded data */ +PHP_FUNCTION(bzcompress) +{ + zval **source, /* Source data to compress */ + **zblock_size, /* Optional block size to use */ + **zwork_factor; /* Optional work factor to use */ + char *dest = NULL; /* Destination to place the compressed data into */ + int error, /* Error Container */ + block_size = 4, /* Block size for compression algorithm */ + work_factor = 0, /* Work factor for compression algorithm */ + argc; /* Argument count */ + unsigned int source_len, /* Length of the source data */ + dest_len; /* Length of the destination buffer */ + + argc = ZEND_NUM_ARGS(); + + if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &source, &zblock_size, &zwork_factor) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(source); + + /* Assign them to easy to use variables, dest_len is initially the length of the data + + .01 x length of data + 600 which is the largest size the results of the compression + could possibly be, at least that's what the libbz2 docs say (thanks to jeremy@nirvani.net + for pointing this out). */ + source_len = Z_STRLEN_PP(source); + dest_len = Z_STRLEN_PP(source) + (0.01 * Z_STRLEN_PP(source)) + 600; + + /* Allocate the destination buffer */ + dest = emalloc(dest_len + 1); + + /* Handle the optional arguments */ + if (argc > 1) { + convert_to_long_ex(zblock_size); + block_size = Z_LVAL_PP(zblock_size); + } + + if (argc > 2) { + convert_to_long_ex(zwork_factor); + work_factor = Z_LVAL_PP(zwork_factor); + } + + error = BZ2_bzBuffToBuffCompress(dest, &dest_len, Z_STRVAL_PP(source), source_len, block_size, 0, work_factor); + if (error != BZ_OK) { + efree(dest); + RETURN_LONG(error); + } else { + /* Copy the buffer, we have perhaps allocate alot more than we need, + so we erealloc() the buffer to the proper size */ + dest = erealloc(dest, dest_len + 1); + dest[dest_len] = 0; + RETURN_STRINGL(dest, dest_len, 0); + } +} +/* }}} */ + +/* {{{ proto string bzdecompress(string source [, int small]) + Decompresses BZip2 compressed data */ +PHP_FUNCTION(bzdecompress) +{ + zval **source, /* Source data to decompress */ + **zsmall; /* (Optional) user specified small */ + char *dest; /* Destination buffer, initially allocated */ + int error, /* Error container */ + iter = 1, /* Iteration count for the compression loop */ + size, /* Current size to realloc the dest buffer to */ + dest_len = PHP_BZ_DECOMPRESS_SIZE, /* Size of the destination length */ + small = 0, /* The actual small */ + argc = ZEND_NUM_ARGS(); /* Argument count */ + + if (argc < 1 || argc > 2 || zend_get_parameters_ex(argc, &source, &zsmall) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(source); + + /* optional small argument handling */ + if (argc > 1) { + convert_to_long_ex(zsmall); + small = Z_LVAL_PP(zsmall); + } + + /* Depending on the size of the source buffer, either allocate + the length of the source buffer or the a default decompression + size */ + dest = emalloc(PHP_BZ_DECOMPRESS_SIZE > Z_STRLEN_PP(source) ? PHP_BZ_DECOMPRESS_SIZE : Z_STRLEN_PP(source)); + + /* (de)Compression Loop */ + do { + /* Handle the (re)allocation of the buffer */ + size = dest_len * iter; + if (iter > 1) { + dest = erealloc(dest, size); + } + ++iter; + + /* Perform the decompression */ + error = BZ2_bzBuffToBuffDecompress(dest, &size, Z_STRVAL_PP(source), Z_STRLEN_PP(source), small, 0); + } while (error == BZ_OUTBUFF_FULL); + + if (error != BZ_OK) { + efree(dest); + RETURN_LONG(error); + } else { + /* we might have allocated a little to much, so erealloc the buffer + down to size, before returning it */ + dest = erealloc(dest, size + 1); + dest[size] = 0; + RETURN_STRINGL(dest, size, 0); + } +} +/* }}} */ + +/* {{{ php_bz2_error() + The central error handling interface, does the work for bzerrno, bzerrstr and bzerror */ +static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int opt) +{ + zval **bzp; /* BZip2 Resource Pointer */ + php_stream *stream; + const char *errstr; /* Error string */ + int errnum; /* Error number */ + struct php_bz2_stream_data_t *self; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &bzp) == FAILURE) { + WRONG_PARAM_COUNT; + } + + php_stream_from_zval(stream, bzp); + + if (!php_stream_is(stream, PHP_STREAM_IS_BZIP2)) { + RETURN_FALSE; + } + + self = (struct php_bz2_stream_data_t *) stream->abstract; + + /* Fetch the error information */ + errstr = BZ2_bzerror(self->bz_file, &errnum); + + /* Determine what to return */ + switch (opt) { + case PHP_BZ_ERRNO: + RETURN_LONG(errnum); + break; + case PHP_BZ_ERRSTR: + RETURN_STRING((char*)errstr, 1); + break; + case PHP_BZ_ERRBOTH: + array_init(return_value); + + add_assoc_long (return_value, "errno", errnum); + add_assoc_string(return_value, "errstr", (char*)errstr, 1); + break; + } +} +/* }}} */ + +#endif + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: fdm=marker + * vim: noet sw=4 ts=4 + */ diff --git a/ext/bz2/bz2.dsp b/ext/bz2/bz2.dsp new file mode 100644 index 0000000000..00ef626a42 --- /dev/null +++ b/ext/bz2/bz2.dsp @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="bz2" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=bz2 - Win32 Debug_TS +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "bz2.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "bz2.mak" CFG="bz2 - Win32 Debug_TS" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "bz2 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "bz2 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "bz2 - Win32 Release_TS" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release_TS" +# PROP BASE Intermediate_Dir "Release_TS" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release_TS" +# PROP Intermediate_Dir "Release_TS" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /D "PHP_BZ2_EXPORTS" /FR /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_bz2.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release" + +!ELSEIF "$(CFG)" == "bz2 - Win32 Debug_TS" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug_TS" +# PROP BASE Intermediate_Dir "Debug_TS" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug_TS" +# PROP Intermediate_Dir "Debug_TS" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /D "PHP_BZ2_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 php4ts_debug.lib libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_bz2.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release" + +!ENDIF + +# Begin Target + +# Name "bz2 - Win32 Release_TS" +# Name "bz2 - Win32 Debug_TS" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\bz2.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\php_bz2.h +# End Source File +# End Group +# End Target +# End Project diff --git a/ext/bz2/config.m4 b/ext/bz2/config.m4 new file mode 100644 index 0000000000..b4ac1ee177 --- /dev/null +++ b/ext/bz2/config.m4 @@ -0,0 +1,33 @@ +dnl +dnl $Id$ +dnl + +PHP_ARG_WITH(bz2, for BZip2 support, +[ --with-bz2[=DIR] Include BZip2 support]) + +if test "$PHP_BZ2" != "no"; then + if test -r $PHP_BZ2/include/bzlib.h; then + BZIP_DIR=$PHP_BZ2 + else + AC_MSG_CHECKING(for BZip2 in default path) + for i in /usr/local /usr; do + if test -r $i/include/bzlib.h; then + BZIP_DIR=$i + AC_MSG_RESULT(found in $i) + fi + done + fi + + if test -z "$BZIP_DIR"; then + AC_MSG_RESULT(not found) + AC_MSG_ERROR(Please reinstall the BZip2 distribution) + fi + + PHP_ADD_INCLUDE($BZIP_DIR/include) + + PHP_SUBST(BZ2_SHARED_LIBADD) + PHP_ADD_LIBRARY_WITH_PATH(bz2, $BZIP_DIR/lib, BZ2_SHARED_LIBADD) + AC_CHECK_LIB(bz2, BZ2_bzerror, [AC_DEFINE(HAVE_BZ2,1,[ ])], [AC_MSG_ERROR(bz2 module requires libbz2 >= 1.0.0)],) + + PHP_NEW_EXTENSION(bz2, bz2.c, $ext_shared) +fi diff --git a/ext/bz2/package.xml b/ext/bz2/package.xml new file mode 100644 index 0000000000..7ad1bcfa5a --- /dev/null +++ b/ext/bz2/package.xml @@ -0,0 +1,35 @@ + + + + bz2 + A Bzip2 management extension + +Bz2 is an extension to create and parse bzip2 compressed data. + + PHP License + + + sterling + Sterling Hughes + sterling@php.net + + + + 1.0 + 2003-05-17 + stable + + Initial Release in PECL + + + + + CREDITS + config.m4 + php_bz2.h + bz2.c + bz2.dsp + + + diff --git a/ext/bz2/php_bz2.h b/ext/bz2/php_bz2.h new file mode 100644 index 0000000000..30383ed88c --- /dev/null +++ b/ext/bz2/php_bz2.h @@ -0,0 +1,72 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 4 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2003 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. | + +----------------------------------------------------------------------+ + | Author: Sterling Hughes | + +----------------------------------------------------------------------+ + */ + +#ifndef PHP_BZ2_H +#define PHP_BZ2_H + +#if HAVE_BZ2 + +extern zend_module_entry bz2_module_entry; +#define phpext_bz2_ptr &bz2_module_entry + +/* Bzip2 includes */ +#include + +PHP_MINIT_FUNCTION(bz2); +PHP_MSHUTDOWN_FUNCTION(bz2); +PHP_MINFO_FUNCTION(bz2); +PHP_FUNCTION(bzopen); +PHP_FUNCTION(bzread); +PHP_FUNCTION(bzerrno); +PHP_FUNCTION(bzerrstr); +PHP_FUNCTION(bzerror); +PHP_FUNCTION(bzcompress); +PHP_FUNCTION(bzdecompress); + +#else +#define phpext_bz2_ptr NULL +#endif + +#ifdef PHP_WIN32 +# ifdef PHP_BZ2_EXPORTS +# define PHP_BZ2_API __declspec(dllexport) +# else +# define PHP_BZ2_API __declspec(dllimport) +# endif +#else +# define PHP_BZ2_API +#endif + +PHP_BZ2_API PHPAPI php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC); +PHP_BZ2_API PHPAPI php_stream *_php_stream_bz2open_from_BZFILE(BZFILE *bz, char *mode, php_stream *innerstream STREAMS_DC TSRMLS_DC); + +#define php_stream_bz2open_from_BZFILE(bz, mode, innerstream) _php_stream_bz2open_from_BZFILE((bz), (mode), (innerstream) STREAMS_CC TSRMLS_CC) +#define php_stream_bz2open(wrapper, path, mode, options, opened_path) _php_stream_bz2open((wrapper), (path), (mode), (options), (opened_path), NULL STREAMS_CC TSRMLS_CC) + +php_stream_ops php_stream_bz2io_ops; +#define PHP_STREAM_IS_BZIP2 &php_stream_bz2io_ops + +#endif + + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/bz2/tests/with_files.phpt b/ext/bz2/tests/with_files.phpt new file mode 100644 index 0000000000..cb98912d01 --- /dev/null +++ b/ext/bz2/tests/with_files.phpt @@ -0,0 +1,25 @@ +--TEST-- +BZ2 with files +--SKIPIF-- + +--POST-- +--GET-- +--FILE-- + +--POST-- +--GET-- +--FILE-- + +--EXPECT-- +Serialized array: a:1:{i:0;i:4;} +Unserialized array: array(1) { + [0]=> + int(4) +} + +Serialized array: a:1:{i:0;d:4.5;} +Unserialized array: array(1) { + [0]=> + float(4.5) +} -- cgit v1.2.1