From d61bc63c4da9484fb320435ff62101c2291ed621 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Sat, 14 Sep 2019 18:31:59 +0200 Subject: [PATCH] Change XMLWriter resources to objects While we generally prefer objects over resources for quite a while, the procedural XMLWriter API still uses resources, although there is already an object-oriented API which uses objects. This dichotomy makes no sense, slightly complicates the implementation, and doesn't allow a stepwise migration to the object-oriented API, which might be desired. Thus we completely drop the XMLWriter resources in favor of XMLWriter objects. We consider the minor BC break acceptable for a major version, since only explicit type checks (`is_resource()`, `gettype()` etc.) need to be adapted. --- NEWS | 4 + UPGRADING | 4 + ext/xmlwriter/php_xmlwriter.c | 395 +++++++++--------------------- ext/xmlwriter/php_xmlwriter.h | 10 +- ext/xmlwriter/xmlwriter.stub.php | 128 ++++------ ext/xmlwriter/xmlwriter_arginfo.h | 44 ++-- 6 files changed, 190 insertions(+), 395 deletions(-) diff --git a/NEWS b/NEWS index e11da65c57..462e1fa141 100644 --- a/NEWS +++ b/NEWS @@ -48,4 +48,8 @@ PHP NEWS - XML: . Fixed bug #76874 (xml_parser_free() should never leak memory). (Nikita) +- XMLWriter: + . Changed functions to accept/return XMKWriter objects instead of resources. + (cmb) + <<< NOTE: Insert NEWS from last stable release here prior to actual release! >>> diff --git a/UPGRADING b/UPGRADING index eb730fc86a..a007e2313f 100644 --- a/UPGRADING +++ b/UPGRADING @@ -234,6 +234,10 @@ PHP 8.0 UPGRADE NOTES instead the XmlParser instance is automatically destroyed if it is no longer referenced. +- XMLWriter: + . The XMLWriter functions now accept and return, respectively, XMLWriter + objects instead of resources. + - Zlib: . gzgetss() has been removed. diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c index d58f1afb87..684f861014 100644 --- a/ext/xmlwriter/php_xmlwriter.c +++ b/ext/xmlwriter/php_xmlwriter.c @@ -74,35 +74,15 @@ 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) { \ + ptr = obj->ptr; \ + if (!ptr) { \ php_error_docref(NULL, E_WARNING, "Invalid or uninitialized XMLWriter object"); \ RETURN_FALSE; \ } \ @@ -118,10 +98,14 @@ static void xmlwriter_object_free_storage(zend_object *object) if (!intern) { return; } - 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_object_std_dtor(&intern->std); } /* }}} */ @@ -247,8 +231,6 @@ static const zend_function_entry xmlwriter_class_functions[] = { 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 @@ -351,19 +333,8 @@ 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) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name; size_t name_len; @@ -375,23 +346,17 @@ static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_rea 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &self, xmlwriter_class_entry_ce, &name, &name_len) == FAILURE) { return; } } + XMLWRITER_FROM_OBJECT(ptr, self); if (err_string != NULL) { XMLW_NAME_CHK(err_string); } - ptr = intern->ptr; - if (ptr) { retval = internal_function(ptr, (xmlChar *) name); if (retval != -1) { @@ -404,27 +369,20 @@ 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(); 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &self, xmlwriter_class_entry_ce) == FAILURE) { return; } } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = internal_function(ptr); @@ -436,12 +394,10 @@ static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_int_t RETURN_FALSE; } -/* {{{ proto bool xmlwriter_set_indent(resource xmlwriter, bool indent) +/* {{{ proto bool xmlwriter_set_indent(XMLWriter xmlwriter, bool indent) Toggle indentation on/off - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_set_indent) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; zend_bool indent; @@ -452,18 +408,13 @@ static PHP_FUNCTION(xmlwriter_set_indent) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &self, xmlwriter_class_entry_ce, &indent) == FAILURE) { return; } } + XMLWRITER_FROM_OBJECT(ptr, self); - - ptr = intern->ptr; if (ptr) { retval = xmlTextWriterSetIndent(ptr, indent); if (retval == 0) { @@ -475,7 +426,7 @@ static PHP_FUNCTION(xmlwriter_set_indent) } /* }}} */ -/* {{{ proto bool xmlwriter_set_indent_string(resource xmlwriter, string indentString) +/* {{{ proto bool xmlwriter_set_indent_string(XMLWriter xmlwriter, string indentString) Set string used for indenting - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_set_indent_string) { @@ -483,7 +434,7 @@ static PHP_FUNCTION(xmlwriter_set_indent_string) } /* }}} */ -/* {{{ proto bool xmlwriter_start_attribute(resource xmlwriter, string name) +/* {{{ proto bool xmlwriter_start_attribute(XMLWriter xmlwriter, string name) Create start attribute - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_attribute) { @@ -491,7 +442,7 @@ static PHP_FUNCTION(xmlwriter_start_attribute) } /* }}} */ -/* {{{ proto bool xmlwriter_end_attribute(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_attribute(XMLWriter xmlwriter) End attribute - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_attribute) { @@ -499,12 +450,10 @@ static PHP_FUNCTION(xmlwriter_end_attribute) } /* }}} */ -/* {{{ proto bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri) +/* {{{ proto bool xmlwriter_start_attribute_ns(XMLWriter xmlwriter, string prefix, string name, string uri) Create start namespaced attribute - returns FALSE on error */ static 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; @@ -516,21 +465,16 @@ static PHP_FUNCTION(xmlwriter_start_attribute_ns) &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, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osss!", &self, xmlwriter_class_entry_ce, &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; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Attribute Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterStartAttributeNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri); if (retval != -1) { @@ -542,12 +486,10 @@ static PHP_FUNCTION(xmlwriter_start_attribute_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_write_attribute(resource xmlwriter, string name, string content) +/* {{{ proto bool xmlwriter_write_attribute(XMLWriter xmlwriter, string name, string content) Write full attribute - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_attribute) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; @@ -559,21 +501,16 @@ static PHP_FUNCTION(xmlwriter_write_attribute) &name, &name_len, &content, &content_len) == FAILURE) { return; } - XMLWRITER_FROM_OBJECT(intern, self); } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &self, xmlwriter_class_entry_ce, &name, &name_len, &content, &content_len) == FAILURE) { return; } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - return; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Attribute Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterWriteAttribute(ptr, (xmlChar *)name, (xmlChar *)content); if (retval != -1) { @@ -585,12 +522,10 @@ static PHP_FUNCTION(xmlwriter_write_attribute) } /* }}} */ -/* {{{ proto bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content) +/* {{{ proto bool xmlwriter_write_attribute_ns(XMLWriter xmlwriter, string prefix, string name, string uri, string content) Write full namespaced attribute - returns FALSE on error */ static 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; @@ -603,21 +538,16 @@ static PHP_FUNCTION(xmlwriter_write_attribute_ns) &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, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osss!s", &self, xmlwriter_class_entry_ce, &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; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Attribute Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterWriteAttributeNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri, (xmlChar *)content); if (retval != -1) { @@ -629,7 +559,7 @@ static PHP_FUNCTION(xmlwriter_write_attribute_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_start_element(resource xmlwriter, string name) +/* {{{ proto bool xmlwriter_start_element(XMLWriter xmlwriter, string name) Create start element tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_element) { @@ -637,12 +567,10 @@ static PHP_FUNCTION(xmlwriter_start_element) } /* }}} */ -/* {{{ proto bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri) +/* {{{ proto bool xmlwriter_start_element_ns(XMLWriter xmlwriter, string prefix, string name, string uri) Create start namespaced element tag - returns FALSE on error */ static 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; @@ -654,21 +582,16 @@ static PHP_FUNCTION(xmlwriter_start_element_ns) &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, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!ss!", &self, xmlwriter_class_entry_ce, &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; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Element Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterStartElementNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri); if (retval != -1) { @@ -681,7 +604,7 @@ static PHP_FUNCTION(xmlwriter_start_element_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_end_element(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_element(XMLWriter xmlwriter) End current element - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_element) { @@ -689,7 +612,7 @@ static PHP_FUNCTION(xmlwriter_end_element) } /* }}} */ -/* {{{ proto bool xmlwriter_full_end_element(resource xmlwriter) +/* {{{ proto bool xmlwriter_full_end_element(XMLWriter xmlwriter) End current element - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_full_end_element) { @@ -697,12 +620,10 @@ static PHP_FUNCTION(xmlwriter_full_end_element) } /* }}} */ -/* {{{ proto bool xmlwriter_write_element(resource xmlwriter, string name[, string content]) +/* {{{ proto bool xmlwriter_write_element(XMLWriter xmlwriter, string name[, string content]) Write full element tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_element) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content = NULL; size_t name_len, content_len; @@ -714,21 +635,16 @@ static PHP_FUNCTION(xmlwriter_write_element) &name, &name_len, &content, &content_len) == FAILURE) { return; } - XMLWRITER_FROM_OBJECT(intern, self); } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|s!", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|s!", &self, xmlwriter_class_entry_ce, &name, &name_len, &content, &content_len) == FAILURE) { return; } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - return; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Element Name"); - ptr = intern->ptr; - if (ptr) { if (!content) { retval = xmlTextWriterStartElement(ptr, (xmlChar *)name); @@ -751,12 +667,10 @@ static PHP_FUNCTION(xmlwriter_write_element) } /* }}} */ -/* {{{ proto bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content]) +/* {{{ proto bool xmlwriter_write_element_ns(XMLWriter 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) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *prefix, *uri, *content = NULL; size_t name_len, prefix_len, uri_len, content_len; @@ -768,21 +682,16 @@ static PHP_FUNCTION(xmlwriter_write_element_ns) &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, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!ss!|s!", &self, xmlwriter_class_entry_ce, &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; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Element Name"); - ptr = intern->ptr; - if (ptr) { if (!content) { retval = xmlTextWriterStartElementNS(ptr,(xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri); @@ -805,7 +714,7 @@ static PHP_FUNCTION(xmlwriter_write_element_ns) } /* }}} */ -/* {{{ proto bool xmlwriter_start_pi(resource xmlwriter, string target) +/* {{{ proto bool xmlwriter_start_pi(XMLWriter xmlwriter, string target) Create start PI tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_pi) { @@ -813,7 +722,7 @@ static PHP_FUNCTION(xmlwriter_start_pi) } /* }}} */ -/* {{{ proto bool xmlwriter_end_pi(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_pi(XMLWriter xmlwriter) End current PI - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_pi) { @@ -821,12 +730,10 @@ static PHP_FUNCTION(xmlwriter_end_pi) } /* }}} */ -/* {{{ proto bool xmlwriter_write_pi(resource xmlwriter, string target, string content) +/* {{{ proto bool xmlwriter_write_pi(XMLWriter xmlwriter, string target, string content) Write full PI tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_pi) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; @@ -839,21 +746,16 @@ static PHP_FUNCTION(xmlwriter_write_pi) &name, &name_len, &content, &content_len) == FAILURE) { return; } - XMLWRITER_FROM_OBJECT(intern, self); } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &self, xmlwriter_class_entry_ce, &name, &name_len, &content, &content_len) == FAILURE) { return; } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - return; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid PI Target"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterWritePI(ptr, (xmlChar *)name, (xmlChar *)content); if (retval != -1) { @@ -865,12 +767,10 @@ static PHP_FUNCTION(xmlwriter_write_pi) } /* }}} */ -/* {{{ proto bool xmlwriter_start_cdata(resource xmlwriter) +/* {{{ proto bool xmlwriter_start_cdata(XMLWriter xmlwriter) Create start CDATA tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_cdata) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; zval *self = getThis(); @@ -879,17 +779,12 @@ static PHP_FUNCTION(xmlwriter_start_cdata) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &self, xmlwriter_class_entry_ce) == FAILURE) { return; } } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartCDATA(ptr); @@ -902,7 +797,7 @@ static PHP_FUNCTION(xmlwriter_start_cdata) } /* }}} */ -/* {{{ proto bool xmlwriter_end_cdata(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_cdata(XMLWriter xmlwriter) End current CDATA - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_cdata) { @@ -910,7 +805,7 @@ static PHP_FUNCTION(xmlwriter_end_cdata) } /* }}} */ -/* {{{ proto bool xmlwriter_write_cdata(resource xmlwriter, string content) +/* {{{ proto bool xmlwriter_write_cdata(XMLWriter xmlwriter, string content) Write full CDATA tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_cdata) { @@ -918,7 +813,7 @@ static PHP_FUNCTION(xmlwriter_write_cdata) } /* }}} */ -/* {{{ proto bool xmlwriter_write_raw(resource xmlwriter, string content) +/* {{{ proto bool xmlwriter_write_raw(XMLWriter xmlwriter, string content) Write text - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_raw) { @@ -926,7 +821,7 @@ static PHP_FUNCTION(xmlwriter_write_raw) } /* }}} */ -/* {{{ proto bool xmlwriter_text(resource xmlwriter, string content) +/* {{{ proto bool xmlwriter_text(XMLWriter xmlwriter, string content) Write text - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_text) { @@ -934,12 +829,10 @@ static PHP_FUNCTION(xmlwriter_text) } /* }}} */ -/* {{{ proto bool xmlwriter_start_comment(resource xmlwriter) +/* {{{ proto bool xmlwriter_start_comment(XMLWriter xmlwriter) Create start comment - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_comment) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; int retval; zval *self = getThis(); @@ -948,17 +841,12 @@ static PHP_FUNCTION(xmlwriter_start_comment) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &self, xmlwriter_class_entry_ce) == FAILURE) { return; } } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartComment(ptr); @@ -971,7 +859,7 @@ static PHP_FUNCTION(xmlwriter_start_comment) } /* }}} */ -/* {{{ proto bool xmlwriter_end_comment(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_comment(XMLWriter xmlwriter) Create end comment - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_comment) { @@ -979,7 +867,7 @@ static PHP_FUNCTION(xmlwriter_end_comment) } /* }}} */ -/* {{{ proto bool xmlwriter_write_comment(resource xmlwriter, string content) +/* {{{ proto bool xmlwriter_write_comment(XMLWriter xmlwriter, string content) Write full comment tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_comment) { @@ -987,12 +875,10 @@ static PHP_FUNCTION(xmlwriter_write_comment) } /* }}} */ -/* {{{ proto bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone) +/* {{{ proto bool xmlwriter_start_document(XMLWriter xmlwriter, string version, string encoding, string standalone) Create document tag - returns FALSE on error */ static 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; @@ -1004,17 +890,12 @@ static PHP_FUNCTION(xmlwriter_start_document) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!s!s!", &self, xmlwriter_class_entry_ce, &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) { return; } } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartDocument(ptr, version, enc, alone); @@ -1027,7 +908,7 @@ static PHP_FUNCTION(xmlwriter_start_document) } /* }}} */ -/* {{{ proto bool xmlwriter_end_document(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_document(XMLWriter xmlwriter) End current document - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_document) { @@ -1035,12 +916,10 @@ static PHP_FUNCTION(xmlwriter_end_document) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid) +/* {{{ proto bool xmlwriter_start_dtd(XMLWriter xmlwriter, string name, string pubid, string sysid) Create start DTD tag - returns FALSE on error */ static 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; @@ -1051,17 +930,12 @@ static PHP_FUNCTION(xmlwriter_start_dtd) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|s!s!", &self, xmlwriter_class_entry_ce, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) { return; } } - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterStartDTD(ptr, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid); @@ -1074,7 +948,7 @@ static PHP_FUNCTION(xmlwriter_start_dtd) } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_dtd(XMLWriter xmlwriter) End current DTD - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_dtd) { @@ -1082,12 +956,10 @@ static PHP_FUNCTION(xmlwriter_end_dtd) } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset) +/* {{{ proto bool xmlwriter_write_dtd(XMLWriter xmlwriter, string name, string pubid, string sysid, string subset) Write full DTD tag - returns FALSE on error */ static 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; @@ -1098,19 +970,12 @@ static PHP_FUNCTION(xmlwriter_write_dtd) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|s!s!s!", &self, xmlwriter_class_entry_ce, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) { return; } } - - ptr = intern->ptr; + XMLWRITER_FROM_OBJECT(ptr, self); if (ptr) { retval = xmlTextWriterWriteDTD(ptr, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)subset); @@ -1123,7 +988,7 @@ static PHP_FUNCTION(xmlwriter_write_dtd) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd_element(resource xmlwriter, string name) +/* {{{ proto bool xmlwriter_start_dtd_element(XMLWriter xmlwriter, string name) Create start DTD element - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_dtd_element) { @@ -1131,7 +996,7 @@ static PHP_FUNCTION(xmlwriter_start_dtd_element) } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd_element(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_dtd_element(XMLWriter xmlwriter) End current DTD element - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_dtd_element) { @@ -1139,12 +1004,10 @@ static PHP_FUNCTION(xmlwriter_end_dtd_element) } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content) +/* {{{ proto bool xmlwriter_write_dtd_element(XMLWriter xmlwriter, string name, string content) Write full DTD element tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_dtd_element) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; @@ -1155,21 +1018,16 @@ static PHP_FUNCTION(xmlwriter_write_dtd_element) 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, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &self, xmlwriter_class_entry_ce, &name, &name_len, &content, &content_len) == FAILURE) { return; } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - return; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Element Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterWriteDTDElement(ptr, (xmlChar *)name, (xmlChar *)content); if (retval != -1) { @@ -1181,7 +1039,7 @@ static PHP_FUNCTION(xmlwriter_write_dtd_element) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name) +/* {{{ proto bool xmlwriter_start_dtd_attlist(XMLWriter xmlwriter, string name) Create start DTD AttList - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_dtd_attlist) { @@ -1189,7 +1047,7 @@ static PHP_FUNCTION(xmlwriter_start_dtd_attlist) } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd_attlist(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_dtd_attlist(XMLWriter xmlwriter) End current DTD AttList - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_dtd_attlist) { @@ -1197,12 +1055,10 @@ static PHP_FUNCTION(xmlwriter_end_dtd_attlist) } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content) +/* {{{ proto bool xmlwriter_write_dtd_attlist(XMLWriter xmlwriter, string name, string content) Write full DTD AttList tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_dtd_attlist) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; @@ -1214,21 +1070,16 @@ static PHP_FUNCTION(xmlwriter_write_dtd_attlist) &name, &name_len, &content, &content_len) == FAILURE) { return; } - XMLWRITER_FROM_OBJECT(intern, self); } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &self, xmlwriter_class_entry_ce, &name, &name_len, &content, &content_len) == FAILURE) { return; } - if ((intern = (xmlwriter_object *)zend_fetch_resource(Z_RES_P(pind), "XMLWriter", le_xmlwriter)) == NULL) { - return; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Element Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterWriteDTDAttlist(ptr, (xmlChar *)name, (xmlChar *)content); if (retval != -1) { @@ -1240,12 +1091,10 @@ static PHP_FUNCTION(xmlwriter_write_dtd_attlist) } /* }}} */ -/* {{{ proto bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam) +/* {{{ proto bool xmlwriter_start_dtd_entity(XMLWriter xmlwriter, string name, bool isparam) Create start DTD Entity - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_dtd_entity) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name; size_t name_len; @@ -1257,20 +1106,15 @@ static PHP_FUNCTION(xmlwriter_start_dtd_entity) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osb", &self, xmlwriter_class_entry_ce, &name, &name_len, &isparm) == FAILURE) { return; } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Attribute Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterStartDTDEntity(ptr, isparm, (xmlChar *)name); if (retval != -1) { @@ -1282,7 +1126,7 @@ static PHP_FUNCTION(xmlwriter_start_dtd_entity) } /* }}} */ -/* {{{ proto bool xmlwriter_end_dtd_entity(resource xmlwriter) +/* {{{ proto bool xmlwriter_end_dtd_entity(XMLWriter xmlwriter) End current DTD Entity - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_end_dtd_entity) { @@ -1290,12 +1134,10 @@ static PHP_FUNCTION(xmlwriter_end_dtd_entity) } /* }}} */ -/* {{{ proto bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, bool pe [, string pubid [, string sysid [, string ndataid]]]]) +/* {{{ proto bool xmlwriter_write_dtd_entity(XMLWriter 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) { - zval *pind; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *name, *content; size_t name_len, content_len; @@ -1312,22 +1154,17 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity) &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) { return; } - XMLWRITER_FROM_OBJECT(intern, self); } else { - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss|bsss", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss|bsss", &self, xmlwriter_class_entry_ce, &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; - } } + XMLWRITER_FROM_OBJECT(ptr, self); XMLW_NAME_CHK("Invalid Element Name"); - ptr = intern->ptr; - if (ptr) { retval = xmlTextWriterWriteDTDEntity(ptr, pe, (xmlChar *)name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)ndataid, (xmlChar *)content); if (retval != -1) { @@ -1339,12 +1176,11 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity) } /* }}} */ -/* {{{ proto resource xmlwriter_open_uri(string source) +/* {{{ proto XMLWriter xmlwriter_open_uri(string source) Create new xmlwriter using source uri for output */ static PHP_FUNCTION(xmlwriter_open_uri) { char *valid_file = NULL; - xmlwriter_object *intern; xmlTextWriterPtr ptr; char *source; char resolved_path[MAXPATHLEN + 1]; @@ -1378,26 +1214,29 @@ 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); } - ze_obj->xmlwriter_ptr = intern; + if (ze_obj->output) { + xmlBufferFree(ze_obj->output); + } + 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() +/* {{{ proto XMLWriter xmlwriter_open_memory() Create new xmlwriter using memory for string output */ static PHP_FUNCTION(xmlwriter_open_memory) { - xmlwriter_object *intern; xmlTextWriterPtr ptr; xmlBufferPtr buffer; zval *self = getThis(); @@ -1425,17 +1264,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); + } + if (ze_obj->output) { + xmlBufferFree(ze_obj->output); } - ze_obj->xmlwriter_ptr = intern; + 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); } } @@ -1443,8 +1286,6 @@ 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; @@ -1455,20 +1296,15 @@ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string) 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) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|b", &self, xmlwriter_class_entry_ce, &empty) == FAILURE) { return; } } - 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(); } @@ -1488,7 +1324,7 @@ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string) } /* }}} */ -/* {{{ proto string xmlwriter_output_memory(resource xmlwriter [,bool flush]) +/* {{{ proto string xmlwriter_output_memory(XMLWriter xmlwriter [,bool flush]) Output current buffer as string */ static PHP_FUNCTION(xmlwriter_output_memory) { @@ -1496,7 +1332,7 @@ static PHP_FUNCTION(xmlwriter_output_memory) } /* }}} */ -/* {{{ proto mixed xmlwriter_flush(resource xmlwriter [,bool empty]) +/* {{{ proto mixed xmlwriter_flush(XMLWriter xmlwriter [,bool empty]) Output current buffer */ static PHP_FUNCTION(xmlwriter_flush) { @@ -1509,7 +1345,6 @@ static PHP_FUNCTION(xmlwriter_flush) 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); diff --git a/ext/xmlwriter/php_xmlwriter.h b/ext/xmlwriter/php_xmlwriter.h index 0413d3031e..4f37f35586 100644 --- a/ext/xmlwriter/php_xmlwriter.h +++ b/ext/xmlwriter/php_xmlwriter.h @@ -34,16 +34,10 @@ extern zend_module_entry xmlwriter_module_entry; #include #include -/* Resource struct, not the object :) */ -typedef struct _xmlwriter_object { - xmlTextWriterPtr ptr; - xmlBufferPtr output; -} xmlwriter_object; - - /* Extends zend object */ typedef struct _ze_xmlwriter_object { - xmlwriter_object *xmlwriter_ptr; + xmlTextWriterPtr ptr; + xmlBufferPtr output; zend_object std; } ze_xmlwriter_object; diff --git a/ext/xmlwriter/xmlwriter.stub.php b/ext/xmlwriter/xmlwriter.stub.php index 00efb8844d..823628ffe2 100644 --- a/ext/xmlwriter/xmlwriter.stub.php +++ b/ext/xmlwriter/xmlwriter.stub.php @@ -1,133 +1,91 @@