diff options
Diffstat (limited to 'ext/libxml/libxml.c')
-rw-r--r-- | ext/libxml/libxml.c | 288 |
1 files changed, 0 insertions, 288 deletions
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c deleted file mode 100644 index 8055c7844b..0000000000 --- a/ext/libxml/libxml.c +++ /dev/null @@ -1,288 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 4 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2003 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.0 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_0.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: Shane Caraveo <shane@php.net> | - | Wez Furlong <wez@thebrainroom.com> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#define IS_EXT_MODULE - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#define PHP_XML_INTERNAL -#include "zend_variables.h" -#include "ext/standard/php_string.h" -#include "ext/standard/info.h" -#include "ext/standard/file.h" - -#if HAVE_LIBXML - -#include <libxml/parser.h> -#include <libxml/parserInternals.h> -#include <libxml/tree.h> -#include <libxml/uri.h> -#include <libxml/xmlerror.h> - -#include "php_libxml.h" - -/* a true global for initialization */ -int _php_libxml_initialized = 0; - -#ifdef ZTS -int libxml_globals_id; -#else -PHP_LIBXML_API php_libxml_globals libxml_globals; -#endif - -/* {{{ dynamically loadable module stuff */ -#ifdef COMPILE_DL_LIBXML -ZEND_GET_MODULE(libxml) -# ifdef PHP_WIN32 -# include "zend_arg_defs.c" -# endif -#endif /* COMPILE_DL_LIBXML */ -/* }}} */ - -/* {{{ function prototypes */ -PHP_MINIT_FUNCTION(libxml); -PHP_RINIT_FUNCTION(libxml); -PHP_MSHUTDOWN_FUNCTION(libxml); -PHP_RSHUTDOWN_FUNCTION(libxml); -PHP_MINFO_FUNCTION(libxml); - -/* }}} */ - -/* {{{ extension definition structures */ -function_entry libxml_functions[] = { - PHP_FE(libxml_set_streams_context, NULL) - {NULL, NULL, NULL} -}; - -zend_module_entry libxml_module_entry = { - STANDARD_MODULE_HEADER, - "libxml", /* extension name */ - libxml_functions, /* extension function list */ - PHP_MINIT(libxml), /* extension-wide startup function */ - PHP_MSHUTDOWN(libxml), /* extension-wide shutdown function */ - PHP_RINIT(libxml), /* per-request startup function */ - PHP_RSHUTDOWN(libxml), /* per-request shutdown function */ - PHP_MINFO(libxml), /* information function */ - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES -}; - -/* }}} */ - -/* {{{ startup, shutdown and info functions */ -#ifdef ZTS -static void php_libxml_init_globals(php_libxml_globals *libxml_globals_p TSRMLS_DC) -{ - LIBXML(stream_context) = NULL; -} -#endif - -/* Channel libxml file io layer through the PHP streams subsystem. - * This allows use of ftps:// and https:// urls */ - -int php_libxml_streams_IO_match_wrapper(const char *filename) -{ - TSRMLS_FETCH(); - return php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC) ? 1 : 0; -} - -void *php_libxml_streams_IO_open_wrapper(const char *filename) -{ - char resolved_path[MAXPATHLEN + 1]; - php_stream_statbuf ssbuf; - php_stream_context *context = NULL; - php_stream_wrapper *wrapper = NULL; - char *path_to_open = NULL; - - TSRMLS_FETCH(); - xmlURIUnescapeString(filename, 0, resolved_path); - path_to_open = resolved_path; - - /* logic copied from _php_stream_stat, but we only want to fail - if the wrapper supports stat, otherwise, figure it out from - the open. This logic is only to support hiding warnings - that the streams layer puts out at times, but for libxml we - may try to open files that don't exist, but it is not a failure - in xml processing (eg. DTD files) */ - wrapper = php_stream_locate_url_wrapper(resolved_path, &path_to_open, ENFORCE_SAFE_MODE TSRMLS_CC); - if (wrapper && wrapper->wops->url_stat) { - if (wrapper->wops->url_stat(wrapper, path_to_open, &ssbuf TSRMLS_CC) == -1) { - return NULL; - } - } - - if (LIBXML(stream_context)) { - context = zend_fetch_resource(&LIBXML(stream_context) TSRMLS_CC, -1, "Stream-Context", NULL, 1, php_le_stream_context()); - return php_stream_open_wrapper_ex((char *)resolved_path, "rb", ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, context); - } - return php_stream_open_wrapper((char *)resolved_path, "rb", ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL); -} - -int php_libxml_streams_IO_read(void *context, char *buffer, int len) -{ - TSRMLS_FETCH(); - return php_stream_read((php_stream*)context, buffer, len); -} - -int php_libxml_streams_IO_write(void *context, const char *buffer, int len) -{ - TSRMLS_FETCH(); - return php_stream_write((php_stream*)context, buffer, len); -} - -int php_libxml_streams_IO_close(void *context) -{ - TSRMLS_FETCH(); - return php_stream_close((php_stream*)context); -} - -static void php_libxml_error_handler(void *ctx, const char *msg, ...) -{ - va_list ap; - char *buf; - int len; - - va_start(ap, msg); - len = vspprintf(&buf, 0, msg, ap); - va_end(ap); - - /* remove any trailing \n */ - while (len && buf[--len] == '\n') { - buf[len] = '\0'; - } - - php_error(E_WARNING, "%s", buf); - efree(buf); -} - -PHP_LIBXML_API void php_libxml_initialize() { - if (!_php_libxml_initialized) { - /* we should be the only one's to ever init!! */ - xmlInitParser(); - - /* Enable php stream/wrapper support for libxml - we only use php streams, so we do not enable - the default io handlers in libxml. - */ - xmlRegisterInputCallbacks( - php_libxml_streams_IO_match_wrapper, - php_libxml_streams_IO_open_wrapper, - php_libxml_streams_IO_read, - php_libxml_streams_IO_close); - - xmlRegisterOutputCallbacks( - php_libxml_streams_IO_match_wrapper, - php_libxml_streams_IO_open_wrapper, - php_libxml_streams_IO_write, - php_libxml_streams_IO_close); - - /* report errors via handler rather than stderr */ - xmlSetGenericErrorFunc(NULL, php_libxml_error_handler); - - _php_libxml_initialized = 1; - } -} - -PHP_LIBXML_API void php_libxml_shutdown() { - if (_php_libxml_initialized) { - /* reset libxml generic error handling */ - xmlSetGenericErrorFunc(NULL, NULL); - xmlCleanupParser(); - _php_libxml_initialized = 0; - } -} - -PHP_MINIT_FUNCTION(libxml) -{ - php_libxml_initialize(); - -#ifdef ZTS - ts_allocate_id(&libxml_globals_id, sizeof(php_libxml_globals), (ts_allocate_ctor) php_libxml_init_globals, NULL); -#else - LIBXML(stream_context) = NULL; -#endif - - return SUCCESS; -} - - -PHP_RINIT_FUNCTION(libxml) -{ - return SUCCESS; -} - - -PHP_MSHUTDOWN_FUNCTION(libxml) -{ - php_libxml_shutdown(); - return SUCCESS; -} - - -PHP_RSHUTDOWN_FUNCTION(libxml) -{ - return SUCCESS; -} - - -PHP_MINFO_FUNCTION(libxml) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "libXML support", "active"); - php_info_print_table_row(2, "libXML Version", LIBXML_DOTTED_VERSION); - php_info_print_table_row(2, "libXML streams", "enabled"); - php_info_print_table_end(); -} -/* }}} */ - - -/* {{{ proto void libxml_set_streams_context(resource streams_context) - Set the streams context for the next libxml document load or write */ -PHP_FUNCTION(libxml_set_streams_context) -{ - zval *arg; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) { - return; - } - if (LIBXML(stream_context)) { - ZVAL_DELREF(LIBXML(stream_context)); - LIBXML(stream_context) = NULL; - } - ZVAL_ADDREF(arg); - LIBXML(stream_context) = arg; -} -/* }}} */ - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ |