diff options
Diffstat (limited to 'ext/xmlwriter/php_xmlwriter.c')
-rw-r--r-- | ext/xmlwriter/php_xmlwriter.c | 1276 |
1 files changed, 243 insertions, 1033 deletions
diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c index 5cb141dad3..61e4a3a7d9 100644 --- a/ext/xmlwriter/php_xmlwriter.c +++ b/ext/xmlwriter/php_xmlwriter.c @@ -1,7 +1,5 @@ /* +----------------------------------------------------------------------+ - | PHP Version 7 | - +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | @@ -26,84 +24,22 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "php_xmlwriter.h" +#include "php_xmlwriter_arginfo.h" #include "ext/standard/php_string.h" -static PHP_FUNCTION(xmlwriter_set_indent); -static PHP_FUNCTION(xmlwriter_set_indent_string); -static PHP_FUNCTION(xmlwriter_start_attribute); -static PHP_FUNCTION(xmlwriter_end_attribute); -static PHP_FUNCTION(xmlwriter_write_attribute); -static PHP_FUNCTION(xmlwriter_start_attribute_ns); -static PHP_FUNCTION(xmlwriter_write_attribute_ns); -static PHP_FUNCTION(xmlwriter_start_element); -static PHP_FUNCTION(xmlwriter_end_element); -static PHP_FUNCTION(xmlwriter_full_end_element); -static PHP_FUNCTION(xmlwriter_start_element_ns); -static PHP_FUNCTION(xmlwriter_write_element); -static PHP_FUNCTION(xmlwriter_write_element_ns); -static PHP_FUNCTION(xmlwriter_start_pi); -static PHP_FUNCTION(xmlwriter_end_pi); -static PHP_FUNCTION(xmlwriter_write_pi); -static PHP_FUNCTION(xmlwriter_start_cdata); -static PHP_FUNCTION(xmlwriter_end_cdata); -static PHP_FUNCTION(xmlwriter_write_cdata); -static PHP_FUNCTION(xmlwriter_text); -static PHP_FUNCTION(xmlwriter_write_raw); -static PHP_FUNCTION(xmlwriter_start_document); -static PHP_FUNCTION(xmlwriter_end_document); -static PHP_FUNCTION(xmlwriter_start_comment); -static PHP_FUNCTION(xmlwriter_end_comment); -static PHP_FUNCTION(xmlwriter_write_comment); -static PHP_FUNCTION(xmlwriter_start_dtd); -static PHP_FUNCTION(xmlwriter_end_dtd); -static PHP_FUNCTION(xmlwriter_write_dtd); -static PHP_FUNCTION(xmlwriter_start_dtd_element); -static PHP_FUNCTION(xmlwriter_end_dtd_element); -static PHP_FUNCTION(xmlwriter_write_dtd_element); -static PHP_FUNCTION(xmlwriter_start_dtd_attlist); -static PHP_FUNCTION(xmlwriter_end_dtd_attlist); -static PHP_FUNCTION(xmlwriter_write_dtd_attlist); -static PHP_FUNCTION(xmlwriter_start_dtd_entity); -static PHP_FUNCTION(xmlwriter_end_dtd_entity); -static PHP_FUNCTION(xmlwriter_write_dtd_entity); -static PHP_FUNCTION(xmlwriter_open_uri); -static PHP_FUNCTION(xmlwriter_open_memory); -static PHP_FUNCTION(xmlwriter_output_memory); -static PHP_FUNCTION(xmlwriter_flush); - static zend_class_entry *xmlwriter_class_entry_ce; -static void xmlwriter_free_resource_ptr(xmlwriter_object *intern); -static void xmlwriter_dtor(zend_resource *rsrc); - typedef int (*xmlwriter_read_one_char_t)(xmlTextWriterPtr writer, const xmlChar *content); typedef int (*xmlwriter_read_int_t)(xmlTextWriterPtr writer); -/* {{{ xmlwriter_object_free_storage */ -static void xmlwriter_free_resource_ptr(xmlwriter_object *intern) -{ - if (intern) { - if (intern->ptr) { - xmlFreeTextWriter(intern->ptr); - intern->ptr = NULL; - } - if (intern->output) { - xmlBufferFree(intern->output); - intern->output = NULL; - } - efree(intern); - } -} -/* }}} */ - /* {{{ XMLWRITER_FROM_OBJECT */ -#define XMLWRITER_FROM_OBJECT(intern, object) \ +#define XMLWRITER_FROM_OBJECT(ptr, object) \ { \ ze_xmlwriter_object *obj = Z_XMLWRITER_P(object); \ - intern = obj->xmlwriter_ptr; \ - if (!intern) { \ - php_error_docref(NULL, E_WARNING, "Invalid or uninitialized XMLWriter object"); \ - RETURN_FALSE; \ + ptr = obj->ptr; \ + if (!ptr) { \ + zend_throw_error(NULL, "Invalid or uninitialized XMLWriter object"); \ + RETURN_THROWS(); \ } \ } /* }}} */ @@ -116,10 +52,14 @@ static void xmlwriter_object_dtor(zend_object *object) ze_xmlwriter_object *intern = php_xmlwriter_fetch_object(object); /* freeing the resource here may leak, but otherwise we may use it after it has been freed */ - if (intern->xmlwriter_ptr) { - xmlwriter_free_resource_ptr(intern->xmlwriter_ptr); + if (intern->ptr) { + xmlFreeTextWriter(intern->ptr); + intern->ptr = NULL; + } + if (intern->output) { + xmlBufferFree(intern->output); + intern->output = NULL; } - intern->xmlwriter_ptr = NULL; zend_objects_destroy_object(object); } /* }}} */ @@ -148,418 +88,16 @@ static zend_object *xmlwriter_object_new(zend_class_entry *class_type) } /* }}} */ -#define XMLW_NAME_CHK(__err) \ +#define XMLW_NAME_CHK(__arg_no, __subject) \ if (xmlValidateName((xmlChar *) name, 0) != 0) { \ - php_error_docref(NULL, E_WARNING, "%s", __err); \ - RETURN_FALSE; \ + zend_argument_value_error(__arg_no, "must be a valid %s, \"%s\" given", __subject, name); \ + RETURN_THROWS(); \ } \ -/* {{{ arginfo */ -ZEND_BEGIN_ARG_INFO(arginfo_xmlwriter_void, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_resource, 0, 0, 1) - ZEND_ARG_INFO(0, xmlwriter) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_open_uri, 0, 0, 1) - ZEND_ARG_INFO(0, uri) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_set_indent, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, indent) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_set_indent, 0, 0, 1) - ZEND_ARG_INFO(0, indent) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_set_indent_string, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, indentString) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_set_indent_string, 0, 0, 1) - ZEND_ARG_INFO(0, indentString) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_attribute, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_attribute, 0, 0, 1) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_attribute_ns, 0, 0, 4) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_attribute_ns, 0, 0, 3) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_attribute_ns, 0, 0, 5) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_attribute_ns, 0, 0, 4) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_attribute, 0, 0, 3) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_attribute, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_element, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_element, 0, 0, 1) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_element_ns, 0, 0, 4) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_element_ns, 0, 0, 3) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_element, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_element, 0, 0, 1) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_element_ns, 0, 0, 4) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_element_ns, 0, 0, 3) - ZEND_ARG_INFO(0, prefix) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, uri) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_pi, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, target) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_pi, 0, 0, 1) - ZEND_ARG_INFO(0, target) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_pi, 0, 0, 3) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, target) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_pi, 0, 0, 2) - ZEND_ARG_INFO(0, target) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_cdata, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_cdata, 0, 0, 1) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_text, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_text, 0, 0, 1) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_raw, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_raw, 0, 0, 1) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_document, 0, 0, 1) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, version) - ZEND_ARG_INFO(0, encoding) - ZEND_ARG_INFO(0, standalone) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_document, 0, 0, 0) - ZEND_ARG_INFO(0, version) - ZEND_ARG_INFO(0, encoding) - ZEND_ARG_INFO(0, standalone) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_comment, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_comment, 0, 0, 1) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, qualifiedName) - ZEND_ARG_INFO(0, publicId) - ZEND_ARG_INFO(0, systemId) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd, 0, 0, 1) - ZEND_ARG_INFO(0, qualifiedName) - ZEND_ARG_INFO(0, publicId) - ZEND_ARG_INFO(0, systemId) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, publicId) - ZEND_ARG_INFO(0, systemId) - ZEND_ARG_INFO(0, subset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd, 0, 0, 1) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, publicId) - ZEND_ARG_INFO(0, systemId) - ZEND_ARG_INFO(0, subset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd_element, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, qualifiedName) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd_element, 0, 0, 1) - ZEND_ARG_INFO(0, qualifiedName) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd_element, 0, 0, 3) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd_element, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd_attlist, 0, 0, 2) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd_attlist, 0, 0, 1) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd_attlist, 0, 0, 3) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd_attlist, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_start_dtd_entity, 0, 0, 3) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, isparam) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_start_dtd_entity, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, isparam) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_write_dtd_entity, 0, 0, 3) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_write_dtd_entity, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_output_memory, 0, 0, 1) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, flush) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_output_memory, 0, 0, 0) - ZEND_ARG_INFO(0, flush) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_flush, 0, 0, 1) - ZEND_ARG_INFO(0, xmlwriter) - ZEND_ARG_INFO(0, empty) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlwriter_method_flush, 0, 0, 0) - ZEND_ARG_INFO(0, empty) -ZEND_END_ARG_INFO() -/* }}} */ - -/* {{{ xmlwriter_functions */ -static const zend_function_entry xmlwriter_functions[] = { - PHP_FE(xmlwriter_open_uri, arginfo_xmlwriter_open_uri) - PHP_FE(xmlwriter_open_memory, arginfo_xmlwriter_void) - PHP_FE(xmlwriter_set_indent, arginfo_xmlwriter_set_indent) - PHP_FE(xmlwriter_set_indent_string, arginfo_xmlwriter_set_indent_string) - PHP_FE(xmlwriter_start_comment, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_end_comment, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_start_attribute, arginfo_xmlwriter_start_attribute) - PHP_FE(xmlwriter_end_attribute, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_attribute, arginfo_xmlwriter_write_attribute) - PHP_FE(xmlwriter_start_attribute_ns,arginfo_xmlwriter_start_attribute_ns) - PHP_FE(xmlwriter_write_attribute_ns,arginfo_xmlwriter_write_attribute_ns) - PHP_FE(xmlwriter_start_element, arginfo_xmlwriter_start_element) - PHP_FE(xmlwriter_end_element, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_full_end_element, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_start_element_ns, arginfo_xmlwriter_start_element_ns) - PHP_FE(xmlwriter_write_element, arginfo_xmlwriter_write_element) - PHP_FE(xmlwriter_write_element_ns, arginfo_xmlwriter_write_element_ns) - PHP_FE(xmlwriter_start_pi, arginfo_xmlwriter_start_pi) - PHP_FE(xmlwriter_end_pi, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_pi, arginfo_xmlwriter_write_pi) - PHP_FE(xmlwriter_start_cdata, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_end_cdata, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_cdata, arginfo_xmlwriter_write_cdata) - PHP_FE(xmlwriter_text, arginfo_xmlwriter_text) - PHP_FE(xmlwriter_write_raw, arginfo_xmlwriter_write_raw) - PHP_FE(xmlwriter_start_document, arginfo_xmlwriter_start_document) - PHP_FE(xmlwriter_end_document, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_comment, arginfo_xmlwriter_write_comment) - PHP_FE(xmlwriter_start_dtd, arginfo_xmlwriter_start_dtd) - PHP_FE(xmlwriter_end_dtd, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_dtd, arginfo_xmlwriter_write_dtd) - PHP_FE(xmlwriter_start_dtd_element, arginfo_xmlwriter_start_dtd_element) - PHP_FE(xmlwriter_end_dtd_element, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_dtd_element, arginfo_xmlwriter_write_dtd_element) - PHP_FE(xmlwriter_start_dtd_attlist, arginfo_xmlwriter_start_dtd_attlist) - PHP_FE(xmlwriter_end_dtd_attlist, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_dtd_attlist, arginfo_xmlwriter_write_dtd_attlist) - PHP_FE(xmlwriter_start_dtd_entity, arginfo_xmlwriter_start_dtd_entity) - PHP_FE(xmlwriter_end_dtd_entity, arginfo_xmlwriter_resource) - PHP_FE(xmlwriter_write_dtd_entity, arginfo_xmlwriter_write_dtd_entity) - PHP_FE(xmlwriter_output_memory, arginfo_xmlwriter_output_memory) - PHP_FE(xmlwriter_flush, arginfo_xmlwriter_flush) - PHP_FE_END -}; -/* }}} */ - -/* {{{ xmlwriter_class_functions */ -static const zend_function_entry xmlwriter_class_functions[] = { - PHP_ME_MAPPING(openUri, xmlwriter_open_uri, arginfo_xmlwriter_open_uri, 0) - PHP_ME_MAPPING(openMemory, xmlwriter_open_memory, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(setIndent, xmlwriter_set_indent, arginfo_xmlwriter_method_set_indent, 0) - PHP_ME_MAPPING(setIndentString, xmlwriter_set_indent_string, arginfo_xmlwriter_method_set_indent_string, 0) - PHP_ME_MAPPING(startComment, xmlwriter_start_comment, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(endComment, xmlwriter_end_comment, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(startAttribute, xmlwriter_start_attribute, arginfo_xmlwriter_method_start_attribute, 0) - PHP_ME_MAPPING(endAttribute, xmlwriter_end_attribute, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeAttribute, xmlwriter_write_attribute, arginfo_xmlwriter_method_write_attribute, 0) - PHP_ME_MAPPING(startAttributeNs, xmlwriter_start_attribute_ns,arginfo_xmlwriter_method_start_attribute_ns, 0) - PHP_ME_MAPPING(writeAttributeNs, xmlwriter_write_attribute_ns,arginfo_xmlwriter_method_write_attribute_ns, 0) - PHP_ME_MAPPING(startElement, xmlwriter_start_element, arginfo_xmlwriter_method_start_element, 0) - PHP_ME_MAPPING(endElement, xmlwriter_end_element, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(fullEndElement, xmlwriter_full_end_element, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(startElementNs, xmlwriter_start_element_ns, arginfo_xmlwriter_method_start_element_ns, 0) - PHP_ME_MAPPING(writeElement, xmlwriter_write_element, arginfo_xmlwriter_method_write_element, 0) - PHP_ME_MAPPING(writeElementNs, xmlwriter_write_element_ns, arginfo_xmlwriter_method_write_element_ns, 0) - PHP_ME_MAPPING(startPi, xmlwriter_start_pi, arginfo_xmlwriter_method_start_pi, 0) - PHP_ME_MAPPING(endPi, xmlwriter_end_pi, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writePi, xmlwriter_write_pi, arginfo_xmlwriter_method_write_pi, 0) - PHP_ME_MAPPING(startCdata, xmlwriter_start_cdata, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(endCdata, xmlwriter_end_cdata, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeCdata, xmlwriter_write_cdata, arginfo_xmlwriter_method_write_cdata, 0) - PHP_ME_MAPPING(text, xmlwriter_text, arginfo_xmlwriter_method_text, 0) - PHP_ME_MAPPING(writeRaw, xmlwriter_write_raw, arginfo_xmlwriter_method_write_raw, 0) - PHP_ME_MAPPING(startDocument, xmlwriter_start_document, arginfo_xmlwriter_method_start_document, 0) - PHP_ME_MAPPING(endDocument, xmlwriter_end_document, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeComment, xmlwriter_write_comment, arginfo_xmlwriter_method_write_comment, 0) - PHP_ME_MAPPING(startDtd, xmlwriter_start_dtd, arginfo_xmlwriter_method_start_dtd, 0) - PHP_ME_MAPPING(endDtd, xmlwriter_end_dtd, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeDtd, xmlwriter_write_dtd, arginfo_xmlwriter_method_write_dtd, 0) - PHP_ME_MAPPING(startDtdElement, xmlwriter_start_dtd_element,arginfo_xmlwriter_method_start_dtd_element, 0) - PHP_ME_MAPPING(endDtdElement, xmlwriter_end_dtd_element, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeDtdElement, xmlwriter_write_dtd_element, arginfo_xmlwriter_method_write_dtd_element, 0) - PHP_ME_MAPPING(startDtdAttlist, xmlwriter_start_dtd_attlist, arginfo_xmlwriter_method_start_dtd_attlist, 0) - PHP_ME_MAPPING(endDtdAttlist, xmlwriter_end_dtd_attlist, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeDtdAttlist, xmlwriter_write_dtd_attlist, arginfo_xmlwriter_method_write_dtd_attlist, 0) - PHP_ME_MAPPING(startDtdEntity, xmlwriter_start_dtd_entity, arginfo_xmlwriter_method_start_dtd_entity, 0) - PHP_ME_MAPPING(endDtdEntity, xmlwriter_end_dtd_entity, arginfo_xmlwriter_void, 0) - PHP_ME_MAPPING(writeDtdEntity, xmlwriter_write_dtd_entity, arginfo_xmlwriter_method_write_dtd_entity, 0) - PHP_ME_MAPPING(outputMemory, xmlwriter_output_memory, arginfo_xmlwriter_method_output_memory, 0) - PHP_ME_MAPPING(flush, xmlwriter_flush, arginfo_xmlwriter_method_flush, 0) - PHP_FE_END -}; -/* }}} */ - /* {{{ function prototypes */ static PHP_MINIT_FUNCTION(xmlwriter); static PHP_MSHUTDOWN_FUNCTION(xmlwriter); static PHP_MINFO_FUNCTION(xmlwriter); - -static int le_xmlwriter; /* }}} */ /* _xmlwriter_get_valid_file_path should be made a @@ -635,12 +173,11 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i } /* }}} */ -/* {{{ xmlwriter_module_entry - */ +/* {{{ xmlwriter_module_entry */ zend_module_entry xmlwriter_module_entry = { STANDARD_MODULE_HEADER, "xmlwriter", - xmlwriter_functions, + ext_functions, PHP_MINIT(xmlwriter), PHP_MSHUTDOWN(xmlwriter), NULL, @@ -662,47 +199,23 @@ static void xmlwriter_objects_clone(void *object, void **object_clone) } }}} */ -/* {{{ xmlwriter_dtor */ -static void xmlwriter_dtor(zend_resource *rsrc) { - xmlwriter_object *intern; - - intern = (xmlwriter_object *) rsrc->ptr; - xmlwriter_free_resource_ptr(intern); -} -/* }}} */ - -static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_one_char_t internal_function, char *err_string) +static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_one_char_t internal_function, char *subject_name) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name; size_t name_len; int retval; + zval *self; - zval *self = getThis(); - - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &pind, &name, &name_len) == FAILURE) { - return; - } - - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &self, xmlwriter_class_entry_ce, &name, &name_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - if (err_string != NULL) { - XMLW_NAME_CHK(err_string); + if (subject_name != NULL) { + XMLW_NAME_CHK(2, subject_name); } - ptr = intern->ptr; - if (ptr) { retval = internal_function(ptr, (xmlChar *) name); if (retval != -1) { @@ -715,27 +228,14 @@ static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_rea static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_int_t internal_function) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; - zval *self = getThis(); + zval *self; - if (self) { - XMLWRITER_FROM_OBJECT(intern, self); - if (zend_parse_parameters_none() == FAILURE) { - return; - } - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pind) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &self, xmlwriter_class_entry_ce) == FAILURE) { + RETURN_THROWS(); } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = internal_function(ptr); @@ -747,34 +247,19 @@ static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_int_t RETURN_FALSE; } -/* {{{ proto bool xmlwriter_set_indent(resource xmlwriter, bool indent) -Toggle indentation on/off - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_set_indent) +/* {{{ Toggle indentation on/off - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_set_indent) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; zend_bool indent; + zval *self; - zval *self = getThis(); - - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &indent) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rb", &pind, &indent) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ob", &self, xmlwriter_class_entry_ce, &indent) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - - ptr = intern->ptr; if (ptr) { retval = xmlTextWriterSetIndent(ptr, indent); if (retval == 0) { @@ -786,61 +271,43 @@ static PHP_FUNCTION(xmlwriter_set_indent) } /* }}} */ -/* {{{ proto bool xmlwriter_set_indent_string(resource xmlwriter, string indentString) -Set string used for indenting - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_set_indent_string) +/* {{{ Set string used for indenting - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_set_indent_string) { php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterSetIndentString, NULL); } /* }}} */ -/* {{{ proto bool xmlwriter_start_attribute(resource xmlwriter, string name) -Create start attribute - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_attribute) +/* {{{ Create start attribute - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_attribute) { - php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartAttribute, "Invalid Attribute Name"); + php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartAttribute, "attribute name"); } /* }}} */ -/* {{{ proto bool xmlwriter_end_attribute(resource xmlwriter) -End attribute - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_attribute) +/* {{{ End attribute - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_attribute) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndAttribute); } /* }}} */ -/* {{{ proto bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri) -Create start namespaced attribute - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_attribute_ns) +/* {{{ Create start namespaced attribute - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_attribute_ns) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *prefix, *uri; size_t name_len, prefix_len, uri_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sss!", - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsss!", &pind, - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os!ss!", &self, xmlwriter_class_entry_ce, + &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Attribute Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(3, "attribute name"); if (ptr) { retval = xmlTextWriterStartAttributeNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri); @@ -853,37 +320,22 @@ static PHP_FUNCTION(xmlwriter_start_attribute_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_write_attribute(resource xmlwriter, string name, string content) -Write full attribute - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_attribute) +/* {{{ Write full attribute - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_attribute) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss", &self, xmlwriter_class_entry_ce, + &name, &name_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Attribute Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "attribute name"); if (ptr) { retval = xmlTextWriterWriteAttribute(ptr, (xmlChar *)name, (xmlChar *)content); @@ -896,38 +348,22 @@ static PHP_FUNCTION(xmlwriter_write_attribute) } /* }}} */ -/* {{{ proto bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content) -Write full namespaced attribute - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_attribute_ns) +/* {{{ Write full namespaced attribute - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_attribute_ns) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *prefix, *uri, *content; size_t name_len, prefix_len, uri_len, content_len; int retval; + zval *self; - zval *self = getThis(); - - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sss!s", - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsss!s", &pind, - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os!ss!s", &self, xmlwriter_class_entry_ce, + &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Attribute Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(3, "attribute name"); if (ptr) { retval = xmlTextWriterWriteAttributeNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri, (xmlChar *)content); @@ -940,45 +376,29 @@ static PHP_FUNCTION(xmlwriter_write_attribute_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_start_element(resource xmlwriter, string name) -Create start element tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_element) +/* {{{ Create start element tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_element) { - php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartElement, "Invalid Element Name"); + php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartElement, "element name"); } /* }}} */ -/* {{{ proto bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri) -Create start namespaced element tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_element_ns) +/* {{{ Create start namespaced element tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_element_ns) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *prefix, *uri; size_t name_len, prefix_len, uri_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!ss!", - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs!ss!", &pind, - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os!ss!", &self, xmlwriter_class_entry_ce, + &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Element Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(3, "element name"); if (ptr) { retval = xmlTextWriterStartElementNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri); @@ -992,53 +412,36 @@ static PHP_FUNCTION(xmlwriter_start_element_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_end_element(resource xmlwriter) -End current element - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_element) +/* {{{ End current element - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_element) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndElement); } /* }}} */ -/* {{{ proto bool xmlwriter_full_end_element(resource xmlwriter) -End current element - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_full_end_element) +/* {{{ End current element - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_full_end_element) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterFullEndElement); } /* }}} */ -/* {{{ proto bool xmlwriter_write_element(resource xmlwriter, string name[, string content]) -Write full element tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_element) +/* {{{ Write full element tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_element) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content = NULL; size_t name_len, content_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!", - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|s!", &pind, - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|s!", &self, xmlwriter_class_entry_ce, + &name, &name_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Element Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "element name"); if (ptr) { if (!content) { @@ -1062,37 +465,22 @@ static PHP_FUNCTION(xmlwriter_write_element) } /* }}} */ -/* {{{ proto bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content]) -Write full namesapced element tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_element_ns) +/* {{{ Write full namesapced element tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_element_ns) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *prefix, *uri, *content = NULL; size_t name_len, prefix_len, uri_len, content_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!ss!|s!", - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs!ss!|s!", &pind, - &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os!ss!|s!", &self, xmlwriter_class_entry_ce, + &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Element Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(3, "element name"); if (ptr) { if (!content) { @@ -1116,54 +504,36 @@ static PHP_FUNCTION(xmlwriter_write_element_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_start_pi(resource xmlwriter, string target) -Create start PI tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_pi) +/* {{{ Create start PI tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_pi) { - php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartPI, "Invalid PI Target"); + php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartPI, "PI target"); } /* }}} */ -/* {{{ proto bool xmlwriter_end_pi(resource xmlwriter) -End current PI - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_pi) +/* {{{ End current PI - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_pi) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndPI); } /* }}} */ -/* {{{ proto bool xmlwriter_write_pi(resource xmlwriter, string target, string content) -Write full PI tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_pi) +/* {{{ Write full PI tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_pi) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; int retval; + zval *self; - zval *self = getThis(); - - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss", &self, xmlwriter_class_entry_ce, + &name, &name_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid PI Target"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "PI target"); if (ptr) { retval = xmlTextWriterWritePI(ptr, (xmlChar *)name, (xmlChar *)content); @@ -1176,31 +546,17 @@ static PHP_FUNCTION(xmlwriter_write_pi) } /* }}} */ -/* {{{ proto bool xmlwriter_start_cdata(resource xmlwriter) -Create start CDATA tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_cdata) +/* {{{ Create start CDATA tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_cdata) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters_none() == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pind) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &self, xmlwriter_class_entry_ce) == FAILURE) { + RETURN_THROWS(); } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartCDATA(ptr); @@ -1213,63 +569,45 @@ static PHP_FUNCTION(xmlwriter_start_cdata) } /* }}} */ -/* {{{ proto bool xmlwriter_end_cdata(resource xmlwriter) -End current CDATA - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_cdata) +/* {{{ End current CDATA - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_cdata) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndCDATA); } /* }}} */ -/* {{{ proto bool xmlwriter_write_cdata(resource xmlwriter, string content) -Write full CDATA tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_cdata) +/* {{{ Write full CDATA tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_cdata) { php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteCDATA, NULL); } /* }}} */ -/* {{{ proto bool xmlwriter_write_raw(resource xmlwriter, string content) -Write text - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_raw) +/* {{{ Write text - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_raw) { php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteRaw, NULL); } /* }}} */ -/* {{{ proto bool xmlwriter_text(resource xmlwriter, string content) -Write text - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_text) +/* {{{ Write text - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_text) { php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteString, NULL); } /* }}} */ -/* {{{ proto bool xmlwriter_start_comment(resource xmlwriter) -Create start comment - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_comment) +/* {{{ Create start comment - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_comment) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters_none() == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &pind) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &self, xmlwriter_class_entry_ce) == FAILURE) { + RETURN_THROWS(); } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartComment(ptr); @@ -1282,50 +620,33 @@ static PHP_FUNCTION(xmlwriter_start_comment) } /* }}} */ -/* {{{ proto bool xmlwriter_end_comment(resource xmlwriter) -Create end comment - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_comment) +/* {{{ Create end comment - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_comment) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndComment); } /* }}} */ -/* {{{ proto bool xmlwriter_write_comment(resource xmlwriter, string content) -Write full comment tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_comment) +/* {{{ Write full comment tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_comment) { php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterWriteComment, NULL); } /* }}} */ -/* {{{ proto bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone) -Create document tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_document) +/* {{{ Create document tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_document) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *version = NULL, *enc = NULL, *alone = NULL; size_t version_len, enc_len, alone_len; int retval; + zval *self; - zval *self = getThis(); - - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!s!s!", &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|s!s!s!", &pind, &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|s!s!s!", &self, xmlwriter_class_entry_ce, &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) { + RETURN_THROWS(); } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartDocument(ptr, version, enc, alone); @@ -1338,41 +659,26 @@ static PHP_FUNCTION(xmlwriter_start_document) } /* }}} */ -/* {{{ proto bool xmlwriter_end_document(resource xmlwriter) -End current document - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_document) +/* {{{ End current document - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_document) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDocument); } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid) -Create start DTD tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_dtd) +/* {{{ Create start DTD tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_dtd) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *pubid = NULL, *sysid = NULL; size_t name_len, pubid_len, sysid_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!s!", &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) { - return; - } - - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|s!s!", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|s!s!", &self, xmlwriter_class_entry_ce, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) { + RETURN_THROWS(); } - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartDTD(ptr, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid); @@ -1385,43 +691,26 @@ static PHP_FUNCTION(xmlwriter_start_dtd) } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd(resource xmlwriter) -End current DTD - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_dtd) +/* {{{ End current DTD - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_dtd) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTD); } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset) -Write full DTD tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_dtd) +/* {{{ Write full DTD tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_dtd) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *pubid = NULL, *sysid = NULL, *subset = NULL; size_t name_len, pubid_len, sysid_len, subset_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!s!s!", &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) { - return; - } - - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|s!s!s!", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) { - return; - } - - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|s!s!s!", &self, xmlwriter_class_entry_ce, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) { + RETURN_THROWS(); } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterWriteDTD(ptr, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)subset); @@ -1434,52 +723,36 @@ static PHP_FUNCTION(xmlwriter_write_dtd) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd_element(resource xmlwriter, string name) -Create start DTD element - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_dtd_element) +/* {{{ Create start DTD element - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_dtd_element) { - php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartDTDElement, "Invalid Element Name"); + php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartDTDElement, "element name"); } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd_element(resource xmlwriter) -End current DTD element - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_dtd_element) +/* {{{ End current DTD element - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_dtd_element) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTDElement); } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content) -Write full DTD element tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_dtd_element) +/* {{{ Write full DTD element tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_dtd_element) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss", &self, xmlwriter_class_entry_ce, + &name, &name_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Element Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "element name"); if (ptr) { retval = xmlTextWriterWriteDTDElement(ptr, (xmlChar *)name, (xmlChar *)content); @@ -1492,53 +765,36 @@ static PHP_FUNCTION(xmlwriter_write_dtd_element) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name) -Create start DTD AttList - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_dtd_attlist) +/* {{{ Create start DTD AttList - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_dtd_attlist) { - php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartDTDAttlist, "Invalid Element Name"); + php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterStartDTDAttlist, "element name"); } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd_attlist(resource xmlwriter) -End current DTD AttList - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_dtd_attlist) +/* {{{ End current DTD AttList - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_dtd_attlist) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTDAttlist); } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content) -Write full DTD AttList tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_dtd_attlist) +/* {{{ Write full DTD AttList tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_dtd_attlist) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; int retval; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, - &name, &name_len, &content, &content_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss", &self, xmlwriter_class_entry_ce, + &name, &name_len, &content, &content_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Element Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "element name"); if (ptr) { retval = xmlTextWriterWriteDTDAttlist(ptr, (xmlChar *)name, (xmlChar *)content); @@ -1551,36 +807,22 @@ static PHP_FUNCTION(xmlwriter_write_dtd_attlist) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam) -Create start DTD Entity - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_start_dtd_entity) +/* {{{ Create start DTD Entity - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_start_dtd_entity) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name; size_t name_len; int retval; zend_bool isparm; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "sb", &name, &name_len, &isparm) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsb", &pind, &name, &name_len, &isparm) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Osb", &self, xmlwriter_class_entry_ce, &name, &name_len, &isparm) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Attribute Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "attribute name"); if (ptr) { retval = xmlTextWriterStartDTDEntity(ptr, isparm, (xmlChar *)name); @@ -1593,20 +835,16 @@ static PHP_FUNCTION(xmlwriter_start_dtd_entity) } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd_entity(resource xmlwriter) -End current DTD Entity - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_end_dtd_entity) +/* {{{ End current DTD Entity - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_end_dtd_entity) { php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, xmlTextWriterEndDTDEntity); } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, bool pe [, string pubid [, string sysid [, string ndataid]]]]) -Write full DTD Entity tag - returns FALSE on error */ -static PHP_FUNCTION(xmlwriter_write_dtd_entity) +/* {{{ Write full DTD Entity tag - returns FALSE on error */ +PHP_FUNCTION(xmlwriter_write_dtd_entity) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; @@ -1615,29 +853,16 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity) char *pubid = NULL, *sysid = NULL, *ndataid = NULL; zend_bool pe = 0; size_t pubid_len, sysid_len, ndataid_len; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|bsss", - &name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len, - &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss|bsss", &pind, - &name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len, - &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) { - return; - } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss|bs!s!s!", &self, xmlwriter_class_entry_ce, + &name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len, + &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) { + RETURN_THROWS(); } + XMLWRITER_FROM_OBJECT(ptr, self); - XMLW_NAME_CHK("Invalid Element Name"); - - ptr = intern->ptr; + XMLW_NAME_CHK(2, "element name"); if (ptr) { retval = xmlTextWriterWriteDTDEntity(ptr, pe, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)ndataid, (xmlChar *)content); @@ -1650,12 +875,10 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity) } /* }}} */ -/* {{{ proto resource xmlwriter_open_uri(string source) -Create new xmlwriter using source uri for output */ -static PHP_FUNCTION(xmlwriter_open_uri) +/* {{{ Create new xmlwriter using source uri for output */ +PHP_FUNCTION(xmlwriter_open_uri) { char *valid_file = NULL; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *source; char resolved_path[MAXPATHLEN + 1]; @@ -1664,7 +887,7 @@ static PHP_FUNCTION(xmlwriter_open_uri) ze_xmlwriter_object *ze_obj = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &source, &source_len) == FAILURE) { - return; + RETURN_THROWS(); } if (self) { @@ -1673,8 +896,8 @@ static PHP_FUNCTION(xmlwriter_open_uri) } if (source_len == 0) { - php_error_docref(NULL, E_WARNING, "Empty string as source"); - RETURN_FALSE; + zend_argument_value_error(1, "cannot be empty"); + RETURN_THROWS(); } valid_file = _xmlwriter_get_valid_file_path(source, resolved_path, MAXPATHLEN); @@ -1689,33 +912,35 @@ static PHP_FUNCTION(xmlwriter_open_uri) RETURN_FALSE; } - intern = emalloc(sizeof(xmlwriter_object)); - intern->ptr = ptr; - intern->output = NULL; if (self) { - if (ze_obj->xmlwriter_ptr) { - xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr); + if (ze_obj->ptr) { + xmlFreeTextWriter(ze_obj->ptr); + } + if (ze_obj->output) { + xmlBufferFree(ze_obj->output); } - ze_obj->xmlwriter_ptr = intern; + ze_obj->ptr = ptr; + ze_obj->output = NULL; RETURN_TRUE; } else { - RETURN_RES(zend_register_resource(intern, le_xmlwriter)); + ze_obj = php_xmlwriter_fetch_object(xmlwriter_object_new(xmlwriter_class_entry_ce)); + ze_obj->ptr = ptr; + ze_obj->output = NULL; + RETURN_OBJ(&ze_obj->std); } } /* }}} */ -/* {{{ proto resource xmlwriter_open_memory() -Create new xmlwriter using memory for string output */ -static PHP_FUNCTION(xmlwriter_open_memory) +/* {{{ Create new xmlwriter using memory for string output */ +PHP_FUNCTION(xmlwriter_open_memory) { - xmlwriter_object *intern; xmlTextWriterPtr ptr; xmlBufferPtr buffer; zval *self = getThis(); ze_xmlwriter_object *ze_obj = NULL; if (zend_parse_parameters_none() == FAILURE) { - return; + RETURN_THROWS(); } if (self) { @@ -1736,17 +961,21 @@ static PHP_FUNCTION(xmlwriter_open_memory) RETURN_FALSE; } - intern = emalloc(sizeof(xmlwriter_object)); - intern->ptr = ptr; - intern->output = buffer; if (self) { - if (ze_obj->xmlwriter_ptr) { - xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr); + if (ze_obj->ptr) { + xmlFreeTextWriter(ze_obj->ptr); } - ze_obj->xmlwriter_ptr = intern; + if (ze_obj->output) { + xmlBufferFree(ze_obj->output); + } + ze_obj->ptr = ptr; + ze_obj->output = buffer; RETURN_TRUE; } else { - RETURN_RES(zend_register_resource(intern, le_xmlwriter)); + ze_obj = php_xmlwriter_fetch_object(xmlwriter_object_new(xmlwriter_class_entry_ce)); + ze_obj->ptr = ptr; + ze_obj->output = buffer; + RETURN_OBJ(&ze_obj->std); } } @@ -1754,32 +983,19 @@ static PHP_FUNCTION(xmlwriter_open_memory) /* {{{ php_xmlwriter_flush */ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; xmlBufferPtr buffer; zend_bool empty = 1; int output_bytes; - zval *self = getThis(); + zval *self; - if (self) { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &empty) == FAILURE) { - return; - } - XMLWRITER_FROM_OBJECT(intern, self); - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|b", &pind, &empty) == FAILURE) { - return; - } - - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - RETURN_FALSE; - } + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|b", &self, xmlwriter_class_entry_ce, &empty) == FAILURE) { + RETURN_THROWS(); } - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { - buffer = intern->output; + buffer = Z_XMLWRITER_P(self)->output; if (force_string == 1 && buffer == NULL) { RETURN_EMPTY_STRING(); } @@ -1799,35 +1015,31 @@ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string) } /* }}} */ -/* {{{ proto string xmlwriter_output_memory(resource xmlwriter [,bool flush]) -Output current buffer as string */ -static PHP_FUNCTION(xmlwriter_output_memory) +/* {{{ Output current buffer as string */ +PHP_FUNCTION(xmlwriter_output_memory) { php_xmlwriter_flush(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ -/* {{{ proto mixed xmlwriter_flush(resource xmlwriter [,bool empty]) -Output current buffer */ -static PHP_FUNCTION(xmlwriter_flush) +/* {{{ Output current buffer */ +PHP_FUNCTION(xmlwriter_flush) { php_xmlwriter_flush(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* }}} */ -/* {{{ PHP_MINIT_FUNCTION - */ +/* {{{ PHP_MINIT_FUNCTION */ static PHP_MINIT_FUNCTION(xmlwriter) { zend_class_entry ce; - le_xmlwriter = zend_register_list_destructors_ex(xmlwriter_dtor, NULL, "xmlwriter", module_number); memcpy(&xmlwriter_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); xmlwriter_object_handlers.offset = XtOffsetOf(ze_xmlwriter_object, std); xmlwriter_object_handlers.dtor_obj = xmlwriter_object_dtor; xmlwriter_object_handlers.free_obj = xmlwriter_object_free_storage; xmlwriter_object_handlers.clone_obj = NULL; - INIT_CLASS_ENTRY(ce, "XMLWriter", xmlwriter_class_functions); + INIT_CLASS_ENTRY(ce, "XMLWriter", class_XMLWriter_methods); ce.create_object = xmlwriter_object_new; xmlwriter_class_entry_ce = zend_register_internal_class(&ce); @@ -1835,16 +1047,14 @@ static PHP_MINIT_FUNCTION(xmlwriter) } /* }}} */ -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ +/* {{{ PHP_MSHUTDOWN_FUNCTION */ static PHP_MSHUTDOWN_FUNCTION(xmlwriter) { return SUCCESS; } /* }}} */ -/* {{{ PHP_MINFO_FUNCTION - */ +/* {{{ PHP_MINFO_FUNCTION */ static PHP_MINFO_FUNCTION(xmlwriter) { php_info_print_table_start(); |