From: Sterling Hughes Date: Sun, 18 Nov 2001 13:20:37 +0000 (+0000) Subject: Remove the sablotron extension X-Git-Tag: ChangeLog~294 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=631f476abeaceb038f1a431c8a4c6d2d0df30105;p=php Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :)Remove the sablotron extension # HOOOOOOOOOOOORAY :) --- diff --git a/ext/sablot/CREDITS b/ext/sablot/CREDITS deleted file mode 100644 index 27a16ce0d9..0000000000 --- a/ext/sablot/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -Sablotron XSLT -Sterling Hughes diff --git a/ext/sablot/EXPERIMENTAL b/ext/sablot/EXPERIMENTAL deleted file mode 100644 index 6443e99646..0000000000 --- a/ext/sablot/EXPERIMENTAL +++ /dev/null @@ -1,5 +0,0 @@ -this extension is experimental, -its functions may change their names -or move to extension all together -so do not rely to much on them -you have been warned! diff --git a/ext/sablot/Makefile.in b/ext/sablot/Makefile.in deleted file mode 100644 index d6cc91eb60..0000000000 --- a/ext/sablot/Makefile.in +++ /dev/null @@ -1,8 +0,0 @@ -# $Id $ - -LTLIBRARY_NAME = libsablot.la -LTLIBRARY_SOURCES = sablot.c -LTLIBRARY_SHARED_NAME = sablot.la -LTLIBRARY_SHARED_LIBADD = $(SABLOT_SHARED_LIBADD) - -include $(top_srcdir)/build/dynlib.mk diff --git a/ext/sablot/config.m4 b/ext/sablot/config.m4 deleted file mode 100644 index 72d4836960..0000000000 --- a/ext/sablot/config.m4 +++ /dev/null @@ -1,68 +0,0 @@ -dnl $Id$ -dnl config.m4 for extension Sablot - -PHP_ARG_WITH(sablot, for Sablotron XSL support, -[ --with-sablot[=DIR] Include Sablotron support]) - -PHP_ARG_WITH(expat-dir, libexpat dir for Sablotron 0.50, -[ --with-expat-dir=DIR Sablotron: libexpat dir for Sablotron 0.50]) - -if test "$PHP_SABLOT" != "no"; then - - - PHP_EXTENSION(sablot, $ext_shared) - PHP_SUBST(SABLOT_SHARED_LIBADD) - - if test -r $PHP_SABLOT/include/sablot.h; then - SABLOT_DIR=$PHP_SABLOT - else - AC_MSG_CHECKING(for Sablotron in default path) - for i in /usr/local /usr; do - if test -r $i/include/sablot.h; then - SABLOT_DIR=$i - AC_MSG_RESULT(found in $i) - fi - done - fi - - if test -z "$SABLOT_DIR"; then - AC_MSG_RESULT(not found) - AC_MSG_ERROR(Please reinstall the Sablotron distribution) - fi - - testval=no - for i in $PHP_EXPAT_DIR $SABLOT_DIR; do - if test -f $i/lib/libexpat.a -o -f $i/lib/libexpat.$SHLIB_SUFFIX_NAME; then - AC_DEFINE(HAVE_LIBEXPAT2,1,[ ]) - PHP_ADD_LIBRARY_WITH_PATH(expat, $i/lib, SABLOT_SHARED_LIBADD) - PHP_ADD_INCLUDE($i/include) - AC_CHECK_LIB(sablot, SablotSetEncoding, AC_DEFINE(HAVE_SABLOT_SET_ENCODING,1,[ ])) - testval=yes - fi - done - - if test "$testval" = "no"; then - PHP_ADD_LIBRARY(xmlparse) - PHP_ADD_LIBRARY(xmltok) - fi - - PHP_ADD_INCLUDE($SABLOT_DIR/include) - PHP_ADD_LIBRARY_WITH_PATH(sablot, $SABLOT_DIR/lib, SABLOT_SHARED_LIBADD) - - found_iconv=no - AC_CHECK_LIB(c, iconv_open, found_iconv=yes) - if test "$found_iconv" = "no"; then - for i in /usr /usr/local $ICONV_DIR; do - if test -f $i/lib/libconv.a -o -f $i/lib/libiconv.$SHLIB_SUFFIX_NAME; then - PHP_ADD_LIBRARY_WITH_PATH(iconv, $i/lib, SABLOT_SHARED_LIBADD) - found_iconv=yes - fi - done - fi - - if test "$found_iconv" = "no"; then - AC_MSG_ERROR(iconv not found, in order to build sablotron you need the iconv library) - fi - - AC_DEFINE(HAVE_SABLOT,1,[ ]) -fi diff --git a/ext/sablot/php_sablot.h b/ext/sablot/php_sablot.h deleted file mode 100644 index 805fc27ffa..0000000000 --- a/ext/sablot/php_sablot.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 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: Sterling Hughes | - +----------------------------------------------------------------------+ - */ - -#ifndef PHP_SABLOT_H -#define PHP_SABLOT_H - -#if HAVE_SABLOT - -#include - -extern zend_module_entry sablot_module_entry; -#define phpext_sablot_ptr &sablot_module_entry - -#ifdef PHP_WIN32 -#define PHP_SABLOT_API __declspec(dllexport) -#else -#define PHP_SABLOT_API -#endif - -/* Module functions */ -PHP_MINIT_FUNCTION(sablot); -PHP_MINFO_FUNCTION(sablot); -PHP_MSHUTDOWN_FUNCTION(sablot); - -/* Request functions */ -PHP_RSHUTDOWN_FUNCTION(sablot); - -/* Output transformation functions */ -PHP_FUNCTION(xslt_output_begintransform); -PHP_FUNCTION(xslt_output_endtransform); - -/* Basic transformation functions */ -PHP_FUNCTION(xslt_transform); -PHP_FUNCTION(xslt_process); - -/* Advanced API transformation functions */ -PHP_FUNCTION(xslt_create); -PHP_FUNCTION(xslt_run); -PHP_FUNCTION(xslt_set_sax_handler); -PHP_FUNCTION(xslt_set_scheme_handler); -PHP_FUNCTION(xslt_set_error_handler); -#ifdef HAVE_SABLOT_SET_ENCODING -PHP_FUNCTION(xslt_set_encoding); -#endif -PHP_FUNCTION(xslt_set_base); -PHP_FUNCTION(xslt_fetch_result); -PHP_FUNCTION(xslt_free); - -/* Error Handling functions */ -PHP_FUNCTION(xslt_error); -PHP_FUNCTION(xslt_errno); -PHP_FUNCTION(xslt_openlog); -PHP_FUNCTION(xslt_closelog); - -/* Sablotron error structure */ -struct _php_sablot_error { - char *key; - char *value; - struct _php_sablot_error *next; -}; - -typedef struct _php_sablot_error php_sablot_error; - - -/* Sablotron Handle */ -typedef struct { - - /* Error Handling */ - zval *errorHandler; - php_sablot_error *errors; - php_sablot_error errors_start; - int last_errno; - - /* SAX Handling */ - long index; - zval *startDocHandler; - zval *startElementHandler; - zval *endElementHandler; - zval *startNamespaceHandler; - zval *endNamespaceHandler; - zval *commentHandler; - zval *PIHandler; - zval *charactersHandler; - zval *endDocHandler; - - /* Scheme Handling */ - zval *getAllHandler; - - /* Sablotron Related */ - SablotHandle p; - -} php_sablot; - - -/* Sablotron Globals */ -ZEND_BEGIN_MODULE_GLOBALS(sablot) - zval *errorHandler; - php_sablot_error *errors; - php_sablot_error errors_start; - char *output_transform_file; /* For output transformations */ - int last_errno; /* Global last_errno, if no handle is found */ - SablotHandle processor; -ZEND_END_MODULE_GLOBALS(sablot) - - -#ifdef ZTS -#define SABLOTG(v) TSRMG(sablot_globals_id, zend_sablot_globals *, v) -#else -#define SABLOTG(v) (sablot_globals.v) -#endif - -#else -#define phpext_sablot_ptr NULL -#endif - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/ext/sablot/sablot.c b/ext/sablot/sablot.c deleted file mode 100644 index ebc4e41ec6..0000000000 --- a/ext/sablot/sablot.c +++ /dev/null @@ -1,1687 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 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: Sterling Hughes | - +----------------------------------------------------------------------+ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_SABLOT - -/* Sablotron Includes */ -#include - -/* Standard Includes */ -#include - -/* PHP Includes */ -#include "ext/standard/info.h" -#include "main/php_output.h" -#include "php_sablot.h" - -static int le_sablot; - -/* Functions related to PHP's list handling */ -static void _php_sablot_free_processor(zend_rsrc_list_entry *rsrc TSRMLS_DC); - -/* SAX Handlers */ -static void _php_sablot_handler_pair(php_sablot *, zval **, zval **, zval **); -static void _php_sablot_call_handler_function(zval *, int, zval **, char *); -static SAX_RETURN _php_sablot_sax_startDoc(void *); -static SAX_RETURN _php_sablot_sax_startElement(void *, const char *, const char **); -static SAX_RETURN _php_sablot_sax_endElement(void *, const char *); -static SAX_RETURN _php_sablot_sax_startNamespace(void *, const char *, const char *); -static SAX_RETURN _php_sablot_sax_endNamespace(void *, const char *); -static SAX_RETURN _php_sablot_sax_comment(void *, const char *); -static SAX_RETURN _php_sablot_sax_PI(void *, const char *, const char *); -static SAX_RETURN _php_sablot_sax_characters(void *, const char *, int); -static SAX_RETURN _php_sablot_sax_endDoc(void *); - -/* Error Handling Functions */ -static MH_ERROR _php_sablot_make_code(void *, SablotHandle, int, unsigned short, unsigned short); -static MH_ERROR _php_sablot_error(void *, SablotHandle, MH_ERROR, MH_LEVEL, char **); -static void _php_sablot_standard_error(php_sablot_error *, php_sablot_error, int, int); - -/* Scheme Handling Functions */ -static int _php_sablot_sh_getAll(void *userData, SablotHandle p, const char *scheme, const char *rest, char **buffer, int *byteCount); -static int _php_sablot_sh_freeMemory(void *userData, SablotHandle p, char *buffer); -static int _php_sablot_sh_open(void *userData, SablotHandle p, const char *scheme, const char *rest, int *handle); -static int _php_sablot_sh_get(void *userData, SablotHandle p, int handle, char *buffer, int *byteCount); -static int _php_sablot_sh_put(void *userData, SablotHandle p, int handle, const char *buffer, int *byteCount); -static int _php_sablot_sh_close(void *userData, SablotHandle p, int handle); - -/* PHP Utility Functions */ -static void _php_sablot_ht_char(HashTable *, char **); -static zval *_php_sablot_string_zval(const char *); -static zval *_php_sablot_resource_zval(long); - -/* Macro's */ - -/* Free macros */ -#define S_FREE(__var) if (__var) { efree(__var); __var = NULL; } -#define FUNCH_FREE(__var) if (__var) zval_ptr_dtor(&(__var)); - -/* ERROR Macros */ - -#define SABLOT_FREE_ERROR_HANDLE(__handle) \ - if ((__handle).errors) { \ - struct _php_sablot_error *current = (__handle).errors; \ - struct _php_sablot_error *next; \ - \ - current = (__handle).errors_start.next; \ - while (current != NULL) { \ - next = current->next; \ - S_FREE(current->key); \ - S_FREE(current->value); \ - S_FREE(current); \ - current = next; \ - } \ - } - - -/* Sablotron Basic Api macro's */ -#define SABLOT_BASIC_CREATE_PROCESSOR() \ - if (SABLOTG(processor) == NULL) { \ - int ret = 0; \ - \ - ret = SablotCreateProcessor(&SABLOTG(processor)); \ - if (ret) { \ - SABLOTG(last_errno) = (int) ret; \ - return; \ - } \ - \ - ret = SablotRegHandler(SABLOTG(processor), HLR_MESSAGE, (void *)&mh, (void *)NULL); \ - if (ret) { \ - SABLOTG(last_errno) = (int) ret; \ - return; \ - } \ - } - -#define SABLOT_BASIC_HANDLE SABLOTG(processor) - -#define SABLOT_SET_ERROR(handle, error) \ - if (error != 0) { \ - if (handle) { \ - handle->last_errno = error; \ - } \ - \ - SABLOTG(last_errno) = error; \ - } - -/** - * SAX Handler structure, this defines the different functions to be - * called when Sablotron's internal expat parser reaches the - * different callbacks. These are the same as the functions which are - * defined for expat. - */ -static SAXHandler sax = { - _php_sablot_sax_startDoc, - _php_sablot_sax_startElement, - _php_sablot_sax_endElement, - _php_sablot_sax_startNamespace, - _php_sablot_sax_endNamespace, - _php_sablot_sax_comment, - _php_sablot_sax_PI, - _php_sablot_sax_characters, - _php_sablot_sax_endDoc -}; - - -/** - * Message Handler structure for use when Sablotron - * reports that something has gone wrong. - */ -static MessageHandler mh = { - _php_sablot_make_code, - _php_sablot_error, - _php_sablot_error -}; - -/** - * Scheme Handler structure for use when Sablotron - * call rhe document Xpath function. - */ -static SchemeHandler sh = { - _php_sablot_sh_getAll, - _php_sablot_sh_freeMemory, - _php_sablot_sh_open, - _php_sablot_sh_get, - _php_sablot_sh_put, - _php_sablot_sh_close -}; - -ZEND_DECLARE_MODULE_GLOBALS(sablot) - -static unsigned char a6_arg_force_ref[] = { 6, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE }; -static unsigned char a3_arg_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_NONE }; - -function_entry sablot_functions[] = { - PHP_FE(xslt_output_begintransform, NULL) - PHP_FE(xslt_output_endtransform, NULL) - PHP_FE(xslt_transform, a6_arg_force_ref) - PHP_FE(xslt_process, a3_arg_force_ref) - PHP_FE(xslt_create, NULL) - PHP_FE(xslt_run, NULL) - PHP_FE(xslt_fetch_result, NULL) - PHP_FE(xslt_openlog, NULL) - PHP_FE(xslt_closelog, NULL) - PHP_FE(xslt_set_sax_handler, NULL) - PHP_FE(xslt_set_scheme_handler, NULL) - PHP_FE(xslt_set_error_handler, NULL) - PHP_FE(xslt_set_base, NULL) -#ifdef HAVE_SABLOT_SET_ENCODING - PHP_FE(xslt_set_encoding, NULL) -#endif - PHP_FE(xslt_free, NULL) - PHP_FE(xslt_error, NULL) - PHP_FE(xslt_errno, NULL) - {NULL, NULL, NULL} -}; - -zend_module_entry sablot_module_entry = { - STANDARD_MODULE_HEADER, - "sablot", - sablot_functions, - PHP_MINIT(sablot), - PHP_MSHUTDOWN(sablot), - NULL, - PHP_RSHUTDOWN(sablot), - PHP_MINFO(sablot), - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES -}; - -#ifdef COMPILE_DL_SABLOT -ZEND_GET_MODULE(sablot) -#endif - -static void php_sablot_init_globals(zend_sablot_globals *sablot_globals TSRMLS_DC) -{ - sablot_globals->processor = NULL; - sablot_globals->errors = NULL; - sablot_globals->errorHandler = NULL; - sablot_globals->output_transform_file = NULL; -} - - -/* MINIT and MINFO Functions */ -PHP_MINIT_FUNCTION(sablot) -{ -#ifdef ZTS - ts_allocate_id(&sablot_globals_id, sizeof(zend_sablot_globals), (ts_allocate_ctor)php_sablot_init_globals, NULL); -#else - php_sablot_init_globals(&sablot_globals TSRMLS_CC); -#endif - - le_sablot = zend_register_list_destructors_ex(_php_sablot_free_processor, NULL, "Sablotron XSLT", module_number); - - return SUCCESS; -} - - -PHP_MSHUTDOWN_FUNCTION(sablot) -{ - if (SABLOTG(processor)) { - SablotUnregHandler(SABLOTG(processor), HLR_MESSAGE, NULL, NULL); - SablotDestroyProcessor(SABLOTG(processor)); - } - return SUCCESS; -} - -PHP_RSHUTDOWN_FUNCTION(sablot) -{ - /* - SABLOT_FREE_ERROR_HANDLE(SABLOTG_HANDLE); - */ - return SUCCESS; -} - -PHP_MINFO_FUNCTION(sablot) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "Sablotron XSLT support", "enabled"); - php_info_print_table_end(); - -} - -/* {{{ proto void xslt_output_begintransform(string file) - Begin filtering of all data that is being printed out through the XSL file given by the file parameter. */ -PHP_FUNCTION(xslt_output_begintransform) -{ - /* The name of the file to pass the output through */ - zval **file; - - if (ZEND_NUM_ARGS() != 1 || - zend_get_parameters_ex(1, &file) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(file); - - /* If the buffer exists, free it */ - S_FREE(SABLOTG(output_transform_file)); - - SABLOTG(output_transform_file) = estrndup(Z_STRVAL_PP(file), Z_STRLEN_PP(file)); - - /** - * Start output buffering, NULL signifies that no "user-space" output function - * will be used. The 0 disables chunking - */ - php_start_ob_buffer(NULL, 0 TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto void xslt_output_endtranform(void) - End filtering that data through the XSL file set by xslt_output_transform() and output the data */ -PHP_FUNCTION(xslt_output_endtransform) -{ - char *tRes = NULL, - *buffer = NULL; - int ret = 0; - - if (ZEND_NUM_ARGS() != 0) { - WRONG_PARAM_COUNT; - } - - /** - * Make sure that we don't have more than one output buffer going on - * at the same time. - */ - if (OG(ob_nesting_level) == 0) { - RETURN_NULL(); - } - - buffer = estrndup(OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length); - - /* Nake sure there is data to send */ - if (OG(active_ob_buffer).text_length) { - char *args[4]; - - args[0] = "/_xmlinput"; - args[1] = buffer; - args[2] = "/_output"; - args[3] = NULL; - - SABLOT_BASIC_CREATE_PROCESSOR(); - - ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, SABLOTG(output_transform_file), - "arg:/_xmlinput", "arg:/_output", NULL, args); - - if (ret) { - SABLOTG(last_errno) = ret; - S_FREE(SABLOTG(output_transform_file)); - RETURN_NULL(); - } - - ret = SablotGetResultArg(SABLOT_BASIC_HANDLE, "arg:/_output", &tRes); - - if (ret) { - SABLOTG(last_errno) = ret; - S_FREE(SABLOTG(output_transform_file)); - RETURN_NULL(); - } - } - - /** - * A non-zero return means error, save this error in the global - * errno (for xslt_errno() and xslt_error()) free the output - * transformation file and null. - */ - if (ret) { - SABLOTG(last_errno) = ret; - S_FREE(SABLOTG(output_transform_file)); - RETURN_NULL(); - } - - /** - * If there is a buffer, end output buffering and clear the - * current output buffer (so we don't send data twice) - */ - if (tRes) - php_end_ob_buffer(0, 0 TSRMLS_CC); - - PUTS(tRes); - - S_FREE(SABLOTG(output_transform_file)); - S_FREE(buffer); - - /** - * If there exists a result, free that result - * otherwise just end output buffering and send the - * data. - */ - if (tRes) - SablotFree(tRes); - else - php_end_ob_buffer(1, 0 TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto bool xslt_transform(string xslt_uri, string transform_uri, string result_uri[, array xslt_params[, array xslt_args[, string &result]]]) - Transform an XML document, transform_uri, with an XSL stylesheet, xslt_uri with parameters, xslt_params, into the Result buffer, result_uri, xslt_args defines the variables in xslt_uri, transform_uri and result_uri. */ -PHP_FUNCTION(xslt_transform) -{ - zval **xslt_uri, - **transform_uri, - **result_uri, - **xslt_params, - **xslt_args, - **result; - - char **args = NULL, - **params = NULL, - *tResult = NULL; - - int argc = ZEND_NUM_ARGS(), - ret = 0; - - if (argc < 3 || argc > 6 || - zend_get_parameters_ex(argc, &xslt_uri, &transform_uri, &result_uri, &xslt_params, &xslt_args, &result) == FAILURE) { - WRONG_PARAM_COUNT; - } - multi_convert_to_string_ex(3, xslt_uri, transform_uri, result_uri); - - /** - * if there are more than 3 function arguments, inspect the value of - * the third argument and decide whether or not there are Sablotron - * parameters. - */ - if (argc > 3) { - HashTable *ar = HASH_OF(*xslt_params); - if (ar) { - int numelems, - size; - - /** - * Allocate 2 times the number of elements in - * the array, since with associative arrays in PHP - * keys are not counted. - */ - - numelems = zend_hash_num_elements(ar); - size = (numelems * 2 + 1) * sizeof(char *); - - params = (char **)emalloc(size+1); - memset((char *)params, 0, size); - - /** - * Translate a PHP array (HashTable *) into a - * Sablotron array (char **). - */ - _php_sablot_ht_char(ar, params); - } - } - - /** - * If there are more than 4 function arguments, inspect the value - * of the 4 argument and decide whether or not there are Sablotron - * arguments. - */ - if (argc > 4) { - HashTable *ar = HASH_OF(*xslt_args); - if (ar) { - int numelems, - size; - - numelems = zend_hash_num_elements(ar); - size = (numelems * 2 + 1) * sizeof(char *); - - args = (char **)emalloc(size+1); - memset((char *)args, 0, size); - - _php_sablot_ht_char(ar, args); - } - } - - SABLOT_BASIC_CREATE_PROCESSOR(); - ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, Z_STRVAL_PP(xslt_uri), - Z_STRVAL_PP(transform_uri), Z_STRVAL_PP(result_uri), - params, args); - - if (ret) { - SABLOTG(last_errno) = ret; - - S_FREE(params); - S_FREE(args); - - RETURN_FALSE; - } - - ret = SablotGetResultArg(SABLOT_BASIC_HANDLE, Z_STRVAL_PP(result_uri), &tResult); - - if (ret) { - SABLOTG(last_errno) = ret; - - S_FREE(params); - S_FREE(args); - - if (tResult) - SablotFree(tResult); - - RETURN_FALSE; - } else { RETVAL_TRUE; } - - if (tResult && - argc == 6) { - ZVAL_STRING(*result, tResult, 1); - } - - S_FREE(params); - S_FREE(args); - - if (tResult) - SablotFree(tResult); -} -/* }}} */ - -/* {{{ proto bool xslt_process(string xslt, string input_str, string &result[, string base]) - Process data given by input_str through xslt and place the results in the string result. If base is supplied, it will be used as the base URI. */ -PHP_FUNCTION(xslt_process) -{ - zval **xslt, - **input, - **result, - **base; - char *args[7]; - char *tRes = NULL; - int ret = 0, - argc = ZEND_NUM_ARGS(); - - if (argc < 3 || argc > 4 || - zend_get_parameters_ex(argc, &xslt, &input, &result, &base) == FAILURE) { - WRONG_PARAM_COUNT; - } - multi_convert_to_string_ex(2, xslt, input); - - SABLOT_BASIC_CREATE_PROCESSOR(); - - /** - * If we have more than three arguments that means we have - * a base! - */ - if (argc > 3) { - convert_to_string_ex(base); - - SablotSetBase(SABLOT_BASIC_HANDLE, Z_STRVAL_PP(base)); - } - - args[0] = "/_stylesheet"; - args[1] = Z_STRVAL_PP(xslt); - args[2] = "/_xmlinput"; - args[3] = Z_STRVAL_PP(input); - args[4] = "/_output"; - args[5] = NULL; - args[6] = NULL; - - ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, "arg:/_stylesheet", - "arg:/_xmlinput", "arg:/_output", - NULL, args); - if (ret) { - SABLOTG(last_errno) = ret; - RETURN_FALSE; - } - - ret = SablotGetResultArg(SABLOT_BASIC_HANDLE, "arg:/_output", &tRes); - if (ret) { - SABLOTG(last_errno) = ret; - - if (tRes) - SablotFree(tRes); - - RETURN_FALSE; - } - - if (tRes) { - ZVAL_STRING(*result, tRes, 1); - SablotFree(tRes); - } - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto resource xslt_create(void) - Create a new XSL processor and return a resource identifier. */ -PHP_FUNCTION(xslt_create) -{ - php_sablot *handle; - SablotHandle p; - int ret; - - if (ZEND_NUM_ARGS() != 0) { - WRONG_PARAM_COUNT; - } - - ret = SablotCreateProcessor(&p); - - if (ret) { - SABLOTG(last_errno) = ret; - RETURN_FALSE; - } - - handle = (php_sablot *)emalloc(sizeof(php_sablot)); - if (!handle) { - php_error(E_WARNING, "Couldn't allocate PHP-Sablotron Handle"); - RETURN_FALSE; - } - memset(handle, 0, sizeof(php_sablot)); - - handle->p = p; - ret = SablotRegHandler(handle->p, HLR_SAX, (void *)&sax, (void *)handle); - - if (ret) { - SABLOTG(last_errno) = ret; - RETURN_FALSE; - } - - ret = SablotRegHandler(handle->p, HLR_MESSAGE, (void *)&mh, (void *)handle); - - if (ret) { - SABLOTG(last_errno) = ret; - RETURN_FALSE; - } - - ret = SablotRegHandler(handle->p, HLR_SCHEME, (void *)&sh, (void *)handle); - - if (ret) { - SABLOTG(last_errno) = ret; - RETURN_FALSE; - } - - ZEND_REGISTER_RESOURCE(return_value, handle, le_sablot); - handle->index = Z_LVAL_P(return_value); -} -/* }}} */ - -/* {{{ proto bool xslt_run(resource xh, string xslt_file, string data_file[, string result[, array xslt_params[, array xslt_args]]]) - Process the file data_file with the XSL stylesheet xslt_file and parameters xslt_parameters place the results in the buffer pointed to by the result parameter (defaults to "/_result"), args contains the values of the variables in the other parameters. */ -PHP_FUNCTION(xslt_run) -{ - zval **xh, - **xslt_file, - **data_file, - **xslt_result, - **xslt_params, - **xslt_args; - php_sablot *handle; - char **args = NULL, - **params = NULL, - *result = NULL; - int argc = ZEND_NUM_ARGS(), - ret = 0; - - if (argc < 3 || argc > 6 || - zend_get_parameters_ex(argc, &xh, &xslt_file, &data_file, &xslt_result, &xslt_params, &xslt_args) == FAILURE) { - WRONG_PARAM_COUNT; - } - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron handle", le_sablot); - multi_convert_to_string_ex(2, xslt_file, data_file); - - if (argc == 3) { - result = estrdup("arg:/_result"); - } - - if (argc > 3) { - convert_to_string_ex(xslt_result); - result = estrndup(Z_STRVAL_PP(xslt_result), Z_STRLEN_PP(xslt_result)); - } - - if (argc > 4) { - HashTable *ar = HASH_OF(*xslt_params); - if (ar) { - int numelems, - size; - - numelems = zend_hash_num_elements(ar); - size = (numelems * 2 + 1) * sizeof(char *); - - params = (char **)emalloc(size+1); - memset((char *)params, 0, size); - - _php_sablot_ht_char(ar, params); - } - } - - if (argc > 5) { - HashTable *ar = HASH_OF(*xslt_args); - if (ar) { - int numelems, - size; - - numelems = zend_hash_num_elements(ar); - size = (numelems * 2 + 1) * sizeof(char *); - - args = (char **)emalloc(size+1); - memset((char *)args, 0, size); - - _php_sablot_ht_char(ar, args); - } - } - - ret = SablotRunProcessor(handle->p, Z_STRVAL_PP(xslt_file), Z_STRVAL_PP(data_file), result, params, args); - - if (ret) { - handle->last_errno = ret; - SABLOTG(last_errno) = ret; - S_FREE(params); - S_FREE(args); - S_FREE(result); - RETURN_FALSE; - } - - S_FREE(params); - S_FREE(args); - S_FREE(result); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool xslt_openlog(resource xh, string logfile[, int loglevel]) - Sets a logfile for Sablotron to place all of its error messages */ -PHP_FUNCTION(xslt_openlog) -{ - zval **xh, - **logfile, - **opt_loglevel; - php_sablot *handle; - int ret = 0, - loglevel = 0, - argc = ZEND_NUM_ARGS(); - - if (argc < 2 || argc > 3 || - zend_get_parameters_ex(argc, &xh, &logfile, &opt_loglevel) == FAILURE) { - WRONG_PARAM_COUNT; - } - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron", le_sablot); - convert_to_string_ex(logfile); - - if (argc > 2) { - convert_to_long_ex(opt_loglevel); - loglevel = Z_LVAL_PP(opt_loglevel); - } - - ret = SablotSetLog(handle->p, (const char *)Z_STRVAL_PP(logfile), loglevel); - - if (ret) { - handle->last_errno = ret; - SABLOTG(last_errno) = ret; - RETURN_FALSE; - } else { - RETURN_TRUE; - } -} -/* }}} */ - -/* {{{ proto bool xslt_closelog(resource xh) - Clear the logfile for a given instance Sablotron */ -PHP_FUNCTION(xslt_closelog) -{ - zval **xh; - php_sablot *handle; - int ret; - - if (ZEND_NUM_ARGS() != 1 || - zend_get_parameters_ex(1, &xh) == FAILURE) { - WRONG_PARAM_COUNT; - } - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron", le_sablot); - - ret = SablotSetLog(handle->p, (const char *)NULL, 1); - - if (ret) { - RETURN_FALSE; - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto string xslt_fetch_result(resource xh[, string result_name]) - Fetch a result buffer on process handle, xh, with name, result_name, if name is not given than the "/_result" buffer is fetched. */ -PHP_FUNCTION(xslt_fetch_result) -{ - zval **xh, - **result_name; - php_sablot *handle; - char *value = NULL, - *rname = NULL; - int argc = ZEND_NUM_ARGS(), - ret = 0; - - if (argc < 1 || argc > 2 || - zend_get_parameters_ex(argc, &xh, &result_name) == FAILURE) { - WRONG_PARAM_COUNT; - } - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle", le_sablot); - - if (argc > 1) { - convert_to_string_ex(result_name); - rname = estrndup(Z_STRVAL_PP(result_name), Z_STRLEN_PP(result_name)); - } else { - rname = estrdup("/_result"); - } - - ret = SablotGetResultArg(handle->p, rname, &value); - - S_FREE(rname); - - if (ret) { - handle->last_errno = ret; - SABLOTG(last_errno) = ret; - if (value) { - SablotFree(value); - } - RETURN_FALSE; - } - - if (value) { - RETVAL_STRING(value, 1); - SablotFree(value); - } -} -/* }}} */ - -/* {{{ proto void xslt_free(resource xh) - Free resources associated with a xslt handle. */ -PHP_FUNCTION(xslt_free) -{ - zval **xh; - php_sablot *handle; - - if (ZEND_NUM_ARGS() != 1 || - zend_get_parameters_ex(1, &xh) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle", le_sablot); - zend_list_delete(Z_LVAL_PP(xh)); -} -/* }}} */ - -/* {{{ proto void xslt_set_sax_handler(resource xh, array handlers) - Set SAX Handlers on the resource handle given by xh. */ -PHP_FUNCTION(xslt_set_sax_handler) -{ - zval **xh, - **handlers, - **indiv_handlers; - php_sablot *handle; - HashTable *handlers_list; - char *string_key = NULL; - ulong num_key; - - - if (ZEND_NUM_ARGS() != 2 || - zend_get_parameters_ex(2, &xh, &handlers) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (Z_TYPE_PP(handlers) != IS_ARRAY) { - php_error(E_ERROR, "The second parameter must be an array"); - } - - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle", le_sablot); - - handlers_list = HASH_OF(*handlers); - - for (zend_hash_internal_pointer_reset(handlers_list); - zend_hash_get_current_data(handlers_list, (void **)&indiv_handlers) == SUCCESS; - zend_hash_move_forward(handlers_list)) { - - SEPARATE_ZVAL(indiv_handlers); - - if (zend_hash_get_current_key(handlers_list, &string_key, &num_key, 0) == HASH_KEY_IS_LONG) { - php_error(E_WARNING, "The Keys of the first dimension of your array must be strings"); - RETURN_FALSE; - } - - if (!strcasecmp("document", string_key)) { - _php_sablot_handler_pair(handle, - &handle->startDocHandler, &handle->endDocHandler, - indiv_handlers); - } else if (!strcasecmp("element", string_key)) { - _php_sablot_handler_pair(handle, - &handle->startElementHandler, &handle->endElementHandler, - indiv_handlers); - } else if (!strcasecmp("namespace", string_key)) { - _php_sablot_handler_pair(handle, - &handle->startNamespaceHandler, &handle->endNamespaceHandler, - indiv_handlers); - } else if (!strcasecmp("comment", string_key)) { - zval_add_ref(indiv_handlers); - handle->commentHandler = *indiv_handlers; - } else if (!strcasecmp("pi", string_key)) { - zval_add_ref(indiv_handlers); - handle->PIHandler = *indiv_handlers; - } else if (!strcasecmp("characters", string_key)) { - zval_add_ref(indiv_handlers); - handle->charactersHandler = *indiv_handlers; - } else { - php_error(E_WARNING, "Invalid option: %s", string_key); - } - } -} -/* }}} */ - - -/* {{{ proto void xslt_set_scheme_handler(resource xh, array handlers) - Set SAX Handlers on the resource handle given by xh. */ -PHP_FUNCTION(xslt_set_scheme_handler) -{ - zval **xh, - **handlers, - **indiv_handlers; - php_sablot *handle; - HashTable *handlers_list; - char *string_key = NULL; - ulong num_key; - - if (ZEND_NUM_ARGS() != 2 || - zend_get_parameters_ex(2, &xh, &handlers) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (Z_TYPE_PP(handlers) != IS_ARRAY) { - php_error(E_ERROR, "The second parameter must be an array"); - } - - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle", le_sablot); - - handlers_list = HASH_OF(*handlers); - - for (zend_hash_internal_pointer_reset(handlers_list); - zend_hash_get_current_data(handlers_list, (void **)&indiv_handlers) == SUCCESS; - zend_hash_move_forward(handlers_list)) { - - SEPARATE_ZVAL(indiv_handlers); - - if (zend_hash_get_current_key(handlers_list, &string_key, &num_key, 0) == HASH_KEY_IS_LONG) { - php_error(E_WARNING, "The Keys of the first dimension of your array must be strings"); - RETURN_FALSE; - } - - if (!strcasecmp("getall", string_key)) { - zval_add_ref(indiv_handlers); - handle->getAllHandler = *indiv_handlers; - } else { - php_error(E_WARNING, "Invalid option: %s", string_key); - } - - } -} -/* }}} */ - -#ifdef HAVE_SABLOT_SET_ENCODING - -/* {{{ proto void xslt_set_encoding(resource xh, string encoding) - Sets output encoding to be used for Sablotron regardless of the encoding specified by the stylesheet. To unset, call with encoding_ NULL. */ -PHP_FUNCTION(xslt_set_encoding) -{ - zval **xh, **encoding; - php_sablot *handle; - int ret = 0, - loglevel = 0, - argc = ZEND_NUM_ARGS(); - - if (argc != 2 || - zend_get_parameters_ex(argc, &xh, &encoding) == FAILURE) { - WRONG_PARAM_COUNT; - } - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron", le_sablot); - convert_to_string_ex(encoding); - - SablotSetEncoding(handle->p, (char *) Z_STRVAL_PP(encoding)); - -} -/* }}} */ - -#endif - -/* {{{ proto bool xslt_set_base(resource xh, string scheme, string base) - Overrides the default base for a resource. If scheme is non-null, it only affects the uri given by scheme */ -PHP_FUNCTION(xslt_set_base) -{ - zval **xh, **scheme, **base; - php_sablot *handle; - int argc = ZEND_NUM_ARGS(), - ret = 0; - - if (argc < 2 || argc > 3 || - zend_get_parameters_ex(argc, &xh, &scheme, &base) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (argc > 2) { - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron handle", le_sablot); - - if (Z_TYPE_PP(scheme) != IS_STRING) { - ret = SablotSetBase(handle->p, Z_STRVAL_PP(base)); - } else { - ret = SablotSetBaseForScheme((void *) handle->p, - Z_STRVAL_PP(scheme), - Z_STRVAL_PP(base)); - } - } else { - if (Z_TYPE_PP(scheme) != IS_STRING) { - ret = SablotSetBase(SABLOTG(processor), Z_STRVAL_PP(base)); - } else { - ret = SablotSetBaseForScheme((void *) SABLOTG(processor), - Z_STRVAL_PP(scheme), - Z_STRVAL_PP(base)); - } - } - - SABLOT_SET_ERROR(handle, ret); - - if (ret != 0) { - RETURN_FALSE; - } else { - RETURN_TRUE; - } -} -/* }}} */ - -/* }}} */ - -/* {{{ Begin Error Handling functions */ - -/* {{{ proto mixed xslt_error([int xh]) - Return the error string related to a given error handle. If no handle is given the last error that occurred anywhere is returned. */ -PHP_FUNCTION(xslt_error) -{ - zval **xh; - php_sablot *handle; - int serrno = 0, - argc = ZEND_NUM_ARGS(); - - if (argc < 0 || argc > 1 || - zend_get_parameters_ex(argc, &xh) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (argc) { - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle", le_sablot); - - if (handle->errors) { - if (array_init(return_value) == FAILURE) { - php_error(E_WARNING, "Cannot initialize return array from xslt_error()"); - RETURN_FALSE; - } - - handle->errors = handle->errors_start.next; - while (handle->errors) { - add_assoc_string(return_value, handle->errors->key, handle->errors->value, 0); - handle->errors = handle->errors->next; - } - add_assoc_string(return_value, "errstr", (char *)SablotGetMsgText(handle->last_errno), 1); - add_assoc_long(return_value, "errno", handle->last_errno); - return; - } - - serrno = handle->last_errno; - } else { - serrno = SABLOTG(last_errno); - } - - RETURN_STRING((char *)SablotGetMsgText(serrno), 1); -} -/* }}} */ - -/* {{{ proto int xslt_errno([int xh]) - Return the error number related to a given error handle. If no handle is given the last error number that occurred anywhere is returned. */ -PHP_FUNCTION(xslt_errno) -{ - zval **xh; - php_sablot *handle; - int argc = ZEND_NUM_ARGS(); - - if (argc < 0 || argc > 1 || - zend_get_parameters_ex(argc, &xh) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (argc) { - ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle", le_sablot); - RETURN_LONG(handle->last_errno); - } else { - RETURN_LONG(SABLOTG(last_errno)); - } -} -/* }}} */ - -/* {{{ proto void xslt_set_error_handler([int xh, ] string error_handler_name) - Set a error handler (either per handle or global) */ -PHP_FUNCTION(xslt_set_error_handler) -{ - zval **arg1, **arg2; - php_sablot *handle; - int argc = ZEND_NUM_ARGS(); - - if (argc > 2 || argc < 1 || - zend_get_parameters_ex(argc, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (argc > 1) { - convert_to_string_ex(arg2); - ZEND_FETCH_RESOURCE(handle, php_sablot *, arg1, -1, "PHP-Sablotron Handle", le_sablot); - - if (!handle->errorHandler) - MAKE_STD_ZVAL(handle->errorHandler); - - *handle->errorHandler = **arg2; - zval_copy_ctor(handle->errorHandler); - } else { - convert_to_string_ex(arg1); - - if (!SABLOTG(errorHandler)) - MAKE_STD_ZVAL(SABLOTG(errorHandler)); - - *SABLOTG(errorHandler) = **arg1; - zval_copy_ctor(SABLOTG(errorHandler)); - } -} -/* }}} */ - - -/* {{{ _php_sablot_handler_pair() - Set the handler functions from a two item array */ -static void _php_sablot_handler_pair(php_sablot *handle, zval **first_func, zval **second_func, zval **indiv_handlers) -{ - HashTable *second_level = HASH_OF(*indiv_handlers); - zval **handler; - int item = 0; - - for (zend_hash_internal_pointer_reset(second_level); - zend_hash_get_current_data(second_level, (void **)&handler) == SUCCESS; - zend_hash_move_forward(second_level)) { - - SEPARATE_ZVAL(handler); - zval_add_ref(handler); - - switch (item) - { - case 0: - *first_func = *handler; - break; - case 1: - *second_func = *handler; - break; - default: - convert_to_string_ex(handler); - php_error(E_WARNING, "Sorry, too many elements, %s discarded", Z_STRVAL_PP(handler)); - zval_ptr_dtor(handler); - break; - } - item++; - } -} -/* }}} */ - -/* {{{ _php_sablot_call_handler_function() - Call a sablot call handler function, wrapper for call_user_function() */ -static void _php_sablot_call_handler_function(zval *handlerName, int argc, zval **args, char *function_name) -{ - zval *retval; - int i; - TSRMLS_FETCH(); - - MAKE_STD_ZVAL(retval); - - if (call_user_function(EG(function_table), NULL, handlerName, retval, argc, args TSRMLS_CC) == FAILURE) { - php_error(E_WARNING, "Sorry, couldn't call %s handler", function_name); - } - - zval_dtor(retval); - efree(retval); - - for (i=0; istartDocHandler) { - zval *args[1]; - args[0] = _php_sablot_resource_zval(handle->index); - - _php_sablot_call_handler_function(handle->startDocHandler, 1, args, "start document"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_startElement() - Start Element handler */ -static SAX_RETURN _php_sablot_sax_startElement(void *userData, const char *name, const char **attributes) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->startElementHandler) { - zval *args[3]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(name); - - MAKE_STD_ZVAL(args[2]); - if (array_init(args[2]) == FAILURE) { - php_error(E_WARNING, "Couldn't initialize array to be passed to start element handler"); - return; - } - - while (attributes && *attributes) { - char *key = (char *)attributes[0]; - zval *value = _php_sablot_string_zval(attributes[1]); - - add_assoc_string(args[2], key, Z_STRVAL_P(value), 0); - attributes += 2; - } - - _php_sablot_call_handler_function(handle->startElementHandler, 3, args, "start element"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_endElement() - End element handler */ -static SAX_RETURN _php_sablot_sax_endElement(void *userData, const char *name) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->endElementHandler) { - zval *args[2]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(name); - - _php_sablot_call_handler_function(handle->endElementHandler, 2, args, "end element"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_startNamespace() - Start Namespace handler */ -static SAX_RETURN _php_sablot_sax_startNamespace(void *userData, const char *prefix, const char *uri) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->startNamespaceHandler) { - zval *args[3]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(prefix); - args[2] = _php_sablot_string_zval(uri); - - _php_sablot_call_handler_function(handle->startNamespaceHandler, 3, args, "start namespace"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_endNamespace() - End Namespace Handler */ -static SAX_RETURN _php_sablot_sax_endNamespace(void *userData, const char *prefix) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->endNamespaceHandler) { - zval *args[2]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(prefix); - - _php_sablot_call_handler_function(handle->endNamespaceHandler, 2, args, "end namespace"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_comment() - Comment Handler */ -static SAX_RETURN _php_sablot_sax_comment(void *userData, const char *contents) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->commentHandler) { - zval *args[2]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(contents); - - _php_sablot_call_handler_function(handle->commentHandler, 2, args, "comment"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_PI() - Processing Instruction Handler */ -static SAX_RETURN _php_sablot_sax_PI(void *userData, const char *target, const char *contents) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->PIHandler) { - zval *args[3]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(target); - args[2] = _php_sablot_string_zval(contents); - - _php_sablot_call_handler_function(handle->PIHandler, 3, args, "PI Handler"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_characters() - Character handler */ -static SAX_RETURN _php_sablot_sax_characters(void *userData, const char *contents, int length) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->charactersHandler) { - zval *args[2]; - - args[0] = _php_sablot_resource_zval(handle->index); - args[1] = _php_sablot_string_zval(contents); - - _php_sablot_call_handler_function(handle->charactersHandler, 2, args, "characters"); - } -} -/* }}} */ - -/* {{{ _php_sablot_sax_endDoc() - End document handler */ -static SAX_RETURN _php_sablot_sax_endDoc(void *userData) -{ - php_sablot *handle = (php_sablot *)userData; - - if (handle->endDocHandler) { - zval *args[1]; - - args[0] = _php_sablot_resource_zval(handle->index); - - _php_sablot_call_handler_function(handle->endDocHandler, 1, args, "end document"); - } -} -/* }}} */ - - -/* }}} */ - -/* {{{ Sablotron Error Handling */ - -/* {{{ _php_sablot_make_code() - Makes an error code, currently does nothing */ -static MH_ERROR _php_sablot_make_code(void *userData, SablotHandle p, int severity, unsigned short facility, unsigned short code) -{ - return(code); -} -/* }}} */ - -/* {{{ _php_sablot_error() - Handle Sablotron errors */ -static MH_ERROR _php_sablot_error(void *userData, SablotHandle p, MH_ERROR code, MH_LEVEL level, char **fields) -{ - zval **argv = NULL, - *errorHandler; - - php_sablot_error *errors; - php_sablot *handle = NULL; - - char *sep = NULL; - - int isAdvanced = 0, - argc = 0, - i, - idx, - len; - - TSRMLS_FETCH(); - - if (userData == NULL) { - /* **FIXME** SABLOTG_HANDLE is not defined anywhere -RL - SABLOT_FREE_ERROR_HANDLE(SABLOTG_HANDLE); - */ - - SABLOTG(errors_start).next = NULL; - SABLOTG(errors) = &SABLOTG(errors_start); - - errors = SABLOTG(errors); - errorHandler = SABLOTG(errorHandler); - } else { - handle = (php_sablot *)userData; - - SABLOT_FREE_ERROR_HANDLE(*handle); - - handle->errors_start.next = NULL; - handle->errors = &handle->errors_start; - - errors = handle->errors; - errorHandler = handle->errorHandler; - - isAdvanced = 1; - } - - - while (fields && *fields) { - errors->next = (php_sablot_error *)emalloc(sizeof(php_sablot_error)); - errors = errors->next; - - sep = strchr(fields[0], ':'); - - idx = sep - fields[0]; - len = strlen(fields[0]); - - errors->key = emalloc(idx+1); - errors->value = emalloc((len - idx) + 1); - - memcpy(errors->key, fields[0], idx); - memcpy(errors->value, fields[0] + idx + 1, len - idx - 1); - errors->key[idx] = '\0'; - errors->value[len - idx - 1] = '\0'; - - errors->next = NULL; - fields++; - } - - if (isAdvanced) - handle->last_errno = (int) code; - else - SABLOTG(last_errno) = (int) code; - - if (errorHandler) { - zval *retval; - - MAKE_STD_ZVAL(retval); - - argc = isAdvanced ? 4 : 3; - argv = emalloc(argc * sizeof(zval *)); - - MAKE_STD_ZVAL(argv[0]); - MAKE_STD_ZVAL(argv[1]); - MAKE_STD_ZVAL(argv[2]); - - if (isAdvanced) { - MAKE_STD_ZVAL(argv[3]); - - ZVAL_RESOURCE(argv[0], handle->index); - ZVAL_LONG(argv[1], code); - ZVAL_LONG(argv[2], level); - - array_init(argv[3]); - errors = handle->errors_start.next; - while (errors) { - add_assoc_string(argv[3], errors->key, errors->value, 1); - errors = errors->next; - } - } else { - ZVAL_LONG(argv[0], code); - ZVAL_LONG(argv[1], level); - - array_init(argv[2]); - errors = SABLOTG(errors_start).next; - while (errors) { - add_assoc_string(argv[2], errors->key, errors->value, 1); - errors = errors->next; - } - } - - if (call_user_function(EG(function_table), NULL, errorHandler, retval, argc, argv TSRMLS_CC) == FAILURE) { - php_error(E_WARNING, "Sorry, couldn't call %s error handler", Z_STRVAL_P(errorHandler)); - } - - zval_dtor(retval); - efree(retval); - - for (i = 1; i < argc; i++) { - zval_ptr_dtor(&argv[i]); - } - } else { - if (level == MH_LEVEL_CRITICAL || - level == MH_LEVEL_ERROR || - level == MH_LEVEL_WARN) { - _php_sablot_standard_error(errors, isAdvanced ? handle->errors_start : SABLOTG(errors_start), code, level); - } - } - - return(0); -} -/* }}} */ - -static void _php_sablot_standard_error(php_sablot_error *errors, php_sablot_error errors_start, int code, int level) -{ - char *errstr = NULL; - TSRMLS_FETCH(); - - errors = errors_start.next; - while (errors) { - if (strcmp(errors->key, "msg") == 0) { - errstr = estrdup(errors->value); - break; - } - - errors = errors->next; - } - - switch (level) { - case MH_LEVEL_CRITICAL: - case MH_LEVEL_ERROR: - php_error(E_ERROR, errstr); - break; - case MH_LEVEL_WARN: - php_error(E_WARNING, errstr); - break; - } - - efree(errstr); -} - -/* }}} */ - -/* {{{ Sablotron Scheme Handler functions */ - -static int _php_sablot_sh_getAll(void *userData, SablotHandle p, const char *scheme, const char *rest, char **buffer, int *byteCount) -{ - php_sablot *handle = (php_sablot *) userData; - TSRMLS_FETCH(); - - if (handle->getAllHandler) { - zval *retval, - *argv[4]; - int idx, - argc = 4; - - MAKE_STD_ZVAL(retval); - - argv[0] = _php_sablot_resource_zval(handle->index); - argv[1] = _php_sablot_string_zval(scheme); - argv[2] = _php_sablot_string_zval(rest); - argv[3] = _php_sablot_string_zval(""); - - if (call_user_function(EG(function_table), - NULL, - handle->getAllHandler, - retval, - argc, - argv TSRMLS_CC) == FAILURE) { - php_error(E_WARNING, "Sorry couldn't call function, %s, with handler of type %s", - Z_STRVAL_P(handle->getAllHandler), "Scheme GetALL"); - } - - zval_dtor(retval); - efree(retval); - - *buffer = Z_STRVAL_P(argv[3]); - *byteCount = Z_STRLEN_P(argv[3]); - - for (idx = 1; idx < 3; idx++) { - zval_ptr_dtor(&(argv[idx])); - } - } - - - return(0); -} - -static int _php_sablot_sh_freeMemory(void *userData, SablotHandle p, char *buffer) -{ - /** Not implemented **/ -} - -static int _php_sablot_sh_open(void *userData, SablotHandle p, const char *scheme, const char *rest, int *handle) -{ - /** - * Not implemented - */ -} - -static int _php_sablot_sh_get(void *userData, SablotHandle p, int handle, char *buffer, int *byteCount) -{ - /** - * Not implemented - */ -} - -static int _php_sablot_sh_put(void *userData, SablotHandle p, int handle, const char *buffer, int *byteCount) -{ - /** - * Not implemented - */ -} - -static int _php_sablot_sh_close(void *userData, SablotHandle p, int handle) -{ - /** - * Not implemented - */ -} - -/* }}} */ - -/* {{{ List Handling functions */ - -/* {{{ _php_sablot_free_processor() - Free a Sablot handle */ -static void _php_sablot_free_processor(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - php_sablot *handle = (php_sablot *)rsrc->ptr; - - if (handle->p) { - SablotUnregHandler(handle->p, HLR_MESSAGE, NULL, NULL); - SablotUnregHandler(handle->p, HLR_SAX, NULL, NULL); - SablotUnregHandler(handle->p, HLR_SCHEME, NULL, NULL); - SablotDestroyProcessor(handle->p); - } - - FUNCH_FREE(handle->startDocHandler); - FUNCH_FREE(handle->startElementHandler); - FUNCH_FREE(handle->endElementHandler); - FUNCH_FREE(handle->startNamespaceHandler); - FUNCH_FREE(handle->endNamespaceHandler); - FUNCH_FREE(handle->commentHandler); - FUNCH_FREE(handle->PIHandler); - FUNCH_FREE(handle->charactersHandler); - FUNCH_FREE(handle->endDocHandler); - FUNCH_FREE(handle->getAllHandler); - - SABLOT_FREE_ERROR_HANDLE(*handle); - efree(handle); -} -/* }}} */ - -/* }}} */ - -/* {{{ Conversion Helper functions */ - -/* {{{ _php_sablot_zval_char() - Translates a PHP array to a Sablotron character array */ -static void _php_sablot_ht_char(HashTable *php, char **sablot) -{ - zval **value; - char *string_key = NULL; - ulong num_key; - int i = 0; - - for (zend_hash_internal_pointer_reset(php); - zend_hash_get_current_data(php, (void **)&value) == SUCCESS; - zend_hash_move_forward(php)) { - SEPARATE_ZVAL(value); - convert_to_string_ex(value); - - switch (zend_hash_get_current_key(php, &string_key, &num_key, 1)) { - case HASH_KEY_IS_LONG: - sablot[i++] = Z_STRVAL_PP(value); - break; - case HASH_KEY_IS_STRING: - sablot[i++] = string_key; - sablot[i++] = Z_STRVAL_PP(value); - break; - } - } - sablot[i++] = NULL; -} - -/* {{{ _php_sablot_string_zval() - Converts a Sablotron string to a zval */ -static zval *_php_sablot_string_zval(const char *str) -{ - zval *ret; - int len = strlen(str); - - MAKE_STD_ZVAL(ret); - - Z_TYPE_P(ret) = IS_STRING; - Z_STRLEN_P(ret) = len; - Z_STRVAL_P(ret) = estrndup(str, len); - - return(ret); -} -/* }}} */ - -/* {{{ _php_sablot_resource_zval() - Converts a long identifier to a resource id */ -static zval *_php_sablot_resource_zval(long value) -{ - zval *ret; - TSRMLS_FETCH(); - - MAKE_STD_ZVAL(ret); - - Z_TYPE_P(ret) = IS_RESOURCE; - Z_LVAL_P(ret) = value; - - zend_list_addref(value); - - return(ret); -} -/* }}} */ - -/* }}} */ - -/* }}} */ -#endif - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/ext/sablot/sablot.dsp b/ext/sablot/sablot.dsp deleted file mode 100644 index c375ed89f2..0000000000 --- a/ext/sablot/sablot.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="sablot" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=sablot - 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 "sablot.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 "sablot.mak" CFG="sablot - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sablot - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "sablot - Win32 Release_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)" == "sablot - 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 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SABLOT_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\ZEND" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D "NDEBUG" /D "PHP_EXPORTS" /D "HAVE_SABLOT" /D COMPILE_DL_SABLOT=1 /D ZEND_DEBUG=0 /D "ZTS" /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 sablot.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_sablot.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" - -!ELSEIF "$(CFG)" == "sablot - 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 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 /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SABLOT_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\\" /I "..\..\main" /I "..\..\TSRM" /I "..\..\ZEND" /D ZEND_WIN32=1 /D PHP_WIN32=1 /D "NDEBUG" /D "PHP_EXPORTS" /D "HAVE_SABLOT" /D COMPILE_DL_SABLOT=1 /D ZEND_DEBUG=0 /D "ZTS" /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 php4ts.lib sablot.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 /machine:I386 /out:"..\..\Release_TS/php_sablot.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" - -!ENDIF - -# Begin Target - -# Name "sablot - Win32 Debug_TS" -# Name "sablot - Win32 Release_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\sablot.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_sablot.h -# End Source File -# End Group -# End Target -# End Project