]> granicus.if.org Git - php/commitdiff
Port XMLWriter
authorXinchen Hui <laruence@gmail.com>
Sun, 4 May 2014 03:33:17 +0000 (11:33 +0800)
committerXinchen Hui <laruence@gmail.com>
Sun, 4 May 2014 03:33:17 +0000 (11:33 +0800)
ext/xmlwriter/php_xmlwriter.c
ext/xmlwriter/php_xmlwriter.h

index 7bc35dabc41a9671ab5e132890f6b3cbd8fcb29a..5fa80b3e87d1d896c7c76ac28aca271fe2cf459b 100644 (file)
@@ -84,7 +84,7 @@ static PHP_FUNCTION(xmlwriter_flush);
 static zend_class_entry *xmlwriter_class_entry_ce;
 
 static void xmlwriter_free_resource_ptr(xmlwriter_object *intern TSRMLS_DC);
-static void xmlwriter_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
+static void xmlwriter_dtor(zend_resource *rsrc TSRMLS_DC);
 
 typedef int (*xmlwriter_read_one_char_t)(xmlTextWriterPtr writer, const xmlChar *content);
 typedef int (*xmlwriter_read_int_t)(xmlTextWriterPtr writer);
@@ -106,11 +106,10 @@ static void xmlwriter_free_resource_ptr(xmlwriter_object *intern TSRMLS_DC)
 }
 /* }}} */
 
-#ifdef ZEND_ENGINE_2
 /* {{{ XMLWRITER_FROM_OBJECT */
 #define XMLWRITER_FROM_OBJECT(intern, object) \
        { \
-               ze_xmlwriter_object *obj = (ze_xmlwriter_object*) zend_object_store_get_object(object TSRMLS_CC); \
+               ze_xmlwriter_object *obj = Z_XMLWRITER_P(object); \
                intern = obj->xmlwriter_ptr; \
                if (!intern) { \
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid or unitialized XMLWriter object"); \
@@ -122,9 +121,9 @@ static void xmlwriter_free_resource_ptr(xmlwriter_object *intern TSRMLS_DC)
 static zend_object_handlers xmlwriter_object_handlers;
 
 /* {{{ xmlwriter_object_free_storage */
-static void xmlwriter_object_free_storage(void *object TSRMLS_DC)
+static void xmlwriter_object_free_storage(zend_object *object TSRMLS_DC)
 {
-       ze_xmlwriter_object * intern = (ze_xmlwriter_object *) object;
+       ze_xmlwriter_object *intern = php_xmlwriter_fetch_object(object);
        if (!intern) {
                return;
        }
@@ -132,37 +131,24 @@ static void xmlwriter_object_free_storage(void *object TSRMLS_DC)
                xmlwriter_free_resource_ptr(intern->xmlwriter_ptr TSRMLS_CC);
        }
        intern->xmlwriter_ptr = NULL;
-       zend_object_std_dtor(&intern->zo TSRMLS_CC);
-       
-       efree(intern);
+       zend_object_std_dtor(&intern->std TSRMLS_CC);
 }
 /* }}} */
 
 
 /* {{{ xmlwriter_object_new */
-static zend_object_value xmlwriter_object_new(zend_class_entry *class_type TSRMLS_DC)
+static zend_object *xmlwriter_object_new(zend_class_entry *class_type TSRMLS_DC)
 {
        ze_xmlwriter_object *intern;
-       zend_object_value retval;
 
-       intern = emalloc(sizeof(ze_xmlwriter_object));
-       memset(&intern->zo, 0, sizeof(zend_object));
-       intern->xmlwriter_ptr = NULL;
-       
-       zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
-       object_properties_init(&intern->zo, class_type);
+       intern = ecalloc(1, sizeof(ze_xmlwriter_object) + sizeof(zval) * (class_type->default_properties_count - 1));
+       zend_object_std_init(&intern->std, class_type TSRMLS_CC);
+       object_properties_init(&intern->std, class_type);
+       intern->std.handlers = &xmlwriter_object_handlers;
 
-       retval.handle = zend_objects_store_put(intern,
-                                               NULL,
-                                               (zend_objects_free_object_storage_t) xmlwriter_object_free_storage,
-                                               NULL TSRMLS_CC);
-       
-       retval.handlers = (zend_object_handlers *) & xmlwriter_object_handlers;
-       
-       return retval;
+       return &intern->std;
 }
 /* }}} */
-#endif
 
 #define XMLW_NAME_CHK(__err) \
        if (xmlValidateName((xmlChar *) name, 0) != 0) {        \
@@ -530,7 +516,6 @@ static const zend_function_entry xmlwriter_functions[] = {
 };
 /* }}} */
 
-#ifdef ZEND_ENGINE_2
 /* {{{ xmlwriter_class_functions */
 static const zend_function_entry xmlwriter_class_functions[] = {
        PHP_ME_MAPPING(openUri,         xmlwriter_open_uri,             arginfo_xmlwriter_open_uri, 0)
@@ -586,7 +571,6 @@ static const zend_function_entry xmlwriter_class_functions[] = {
        {NULL, NULL, NULL}
 };
 /* }}} */
-#endif
 
 /* {{{ function prototypes */
 static PHP_MINIT_FUNCTION(xmlwriter);
@@ -669,38 +653,6 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
 }
 /* }}} */
 
-#ifndef ZEND_ENGINE_2
-/* Channel libxml file io layer through the PHP streams subsystem.
- * This allows use of ftps:// and https:// urls */
-
-/* {{{ php_xmlwriter_streams_IO_open_write_wrapper */
-static void *php_xmlwriter_streams_IO_open_write_wrapper(const char *filename TSRMLS_DC)
-{
-       php_stream_wrapper *wrapper = NULL;
-       void *ret_val = NULL;
-
-       ret_val = php_stream_open_wrapper_ex((char *)filename, "wb", REPORT_ERRORS, NULL, NULL);
-       return ret_val;
-}
-/* }}} */
-
-/* {{{ php_xmlwriter_streams_IO_write */
-static int php_xmlwriter_streams_IO_write(void *context, const char *buffer, int len)
-{
-       TSRMLS_FETCH();
-       return php_stream_write((php_stream*)context, buffer, len);
-}
-/* }}} */
-
-/* {{{ php_xmlwriter_streams_IO_close */
-static int php_xmlwriter_streams_IO_close(void *context)
-{
-       TSRMLS_FETCH();
-       return php_stream_close((php_stream*)context);
-}
-/* }}} */
-#endif
-
 /* {{{ xmlwriter_module_entry
  */
 zend_module_entry xmlwriter_module_entry = {
@@ -729,7 +681,7 @@ static void xmlwriter_objects_clone(void *object, void **object_clone TSRMLS_DC)
 }}} */
 
 /* {{{ xmlwriter_dtor */
-static void xmlwriter_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
+static void xmlwriter_dtor(zend_resource *rsrc TSRMLS_DC) {
        xmlwriter_object *intern;
 
        intern = (xmlwriter_object *) rsrc->ptr;
@@ -745,7 +697,6 @@ static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_rea
        char *name;
        int name_len, retval;
 
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -753,14 +704,12 @@ static void php_xmlwriter_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_rea
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
                        return;
                }
        
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        if (err_string != NULL) {
@@ -785,7 +734,6 @@ static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_int_t
        xmlwriter_object *intern;
        xmlTextWriterPtr ptr;
        int retval;
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -793,13 +741,11 @@ static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, xmlwriter_read_int_t
                if (zend_parse_parameters_none() == FAILURE) {
                        return;
                }
-       } else 
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        ptr = intern->ptr;
@@ -825,7 +771,6 @@ static PHP_FUNCTION(xmlwriter_set_indent)
        int retval;
        zend_bool indent;
 
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -833,13 +778,11 @@ static PHP_FUNCTION(xmlwriter_set_indent)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &pind, &indent) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
 
@@ -891,7 +834,6 @@ static PHP_FUNCTION(xmlwriter_start_attribute_ns)
        xmlTextWriterPtr ptr;
        char *name, *prefix, *uri;
        int name_len, prefix_len, uri_len, retval;
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -900,14 +842,12 @@ static PHP_FUNCTION(xmlwriter_start_attribute_ns)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss!", &pind, 
                        &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Attribute Name");
@@ -935,8 +875,6 @@ static PHP_FUNCTION(xmlwriter_write_attribute)
        xmlTextWriterPtr ptr;
        char *name, *content;
        int name_len, content_len, retval;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -945,14 +883,12 @@ static PHP_FUNCTION(xmlwriter_write_attribute)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind, 
                        &name, &name_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Attribute Name");
@@ -981,7 +917,6 @@ static PHP_FUNCTION(xmlwriter_write_attribute_ns)
        char *name, *prefix, *uri, *content;
        int name_len, prefix_len, uri_len, content_len, retval;
 
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -990,14 +925,12 @@ static PHP_FUNCTION(xmlwriter_write_attribute_ns)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss!s", &pind, 
                        &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Attribute Name");
@@ -1033,7 +966,6 @@ static PHP_FUNCTION(xmlwriter_start_element_ns)
        xmlTextWriterPtr ptr;
        char *name, *prefix, *uri;
        int name_len, prefix_len, uri_len, retval;
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -1042,14 +974,12 @@ static PHP_FUNCTION(xmlwriter_start_element_ns)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!ss!", &pind, 
                        &prefix, &prefix_len, &name, &name_len, &uri, &uri_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Element Name");
@@ -1093,8 +1023,6 @@ static PHP_FUNCTION(xmlwriter_write_element)
        xmlTextWriterPtr ptr;
        char *name, *content = NULL;
        int name_len, content_len, retval;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -1103,14 +1031,12 @@ static PHP_FUNCTION(xmlwriter_write_element)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s!", &pind, 
                        &name, &name_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Element Name");
@@ -1148,8 +1074,6 @@ static PHP_FUNCTION(xmlwriter_write_element_ns)
        xmlTextWriterPtr ptr;
        char *name, *prefix, *uri, *content = NULL;
        int name_len, prefix_len, uri_len, content_len, retval;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -1158,14 +1082,12 @@ static PHP_FUNCTION(xmlwriter_write_element_ns)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!ss!|s!", &pind, 
                        &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Element Name");
@@ -1220,7 +1142,6 @@ static PHP_FUNCTION(xmlwriter_write_pi)
        char *name, *content;
        int name_len, content_len, retval;
 
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
@@ -1229,14 +1150,12 @@ static PHP_FUNCTION(xmlwriter_write_pi)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind, 
                        &name, &name_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid PI Target");
@@ -1262,18 +1181,15 @@ static PHP_FUNCTION(xmlwriter_start_cdata)
        xmlwriter_object *intern;
        xmlTextWriterPtr ptr;
        int retval;
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        ptr = intern->ptr;
@@ -1330,18 +1246,15 @@ static PHP_FUNCTION(xmlwriter_start_comment)
        xmlwriter_object *intern;
        xmlTextWriterPtr ptr;
        int retval;
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        
        if (this) {
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        ptr = intern->ptr;
@@ -1385,7 +1298,6 @@ static PHP_FUNCTION(xmlwriter_start_document)
        char *version = NULL, *enc = NULL, *alone = NULL;
        int version_len, enc_len, alone_len, retval;
 
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1393,13 +1305,11 @@ static PHP_FUNCTION(xmlwriter_start_document)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s!s!s!", &pind, &version, &version_len, &enc, &enc_len, &alone, &alone_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        ptr = intern->ptr;
@@ -1432,8 +1342,6 @@ static PHP_FUNCTION(xmlwriter_start_dtd)
        xmlTextWriterPtr ptr;
        char *name, *pubid = NULL, *sysid = NULL;
        int name_len, pubid_len, sysid_len, retval;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1442,14 +1350,12 @@ static PHP_FUNCTION(xmlwriter_start_dtd)
                }
 
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s!s!", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) == FAILURE) {
                        return;
                }
        
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
        ptr = intern->ptr;
 
@@ -1481,8 +1387,6 @@ static PHP_FUNCTION(xmlwriter_write_dtd)
        xmlTextWriterPtr ptr;
        char *name, *pubid = NULL, *sysid = NULL, *subset = NULL;
        int name_len, pubid_len, sysid_len, subset_len, retval;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1491,14 +1395,12 @@ static PHP_FUNCTION(xmlwriter_write_dtd)
                }
 
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s!s!s!", &pind, &name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) == FAILURE) {
                        return;
                }
        
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        ptr = intern->ptr;
@@ -1539,8 +1441,6 @@ static PHP_FUNCTION(xmlwriter_write_dtd_element)
        xmlTextWriterPtr ptr;
        char *name, *content;
        int name_len, content_len, retval;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1548,14 +1448,12 @@ static PHP_FUNCTION(xmlwriter_write_dtd_element)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind, 
                        &name, &name_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Element Name");
@@ -1599,9 +1497,6 @@ static PHP_FUNCTION(xmlwriter_write_dtd_attlist)
        xmlTextWriterPtr ptr;
        char *name, *content;
        int name_len, content_len, retval;
-
-       
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1610,14 +1505,12 @@ static PHP_FUNCTION(xmlwriter_write_dtd_attlist)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind, 
                        &name, &name_len, &content, &content_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Element Name");
@@ -1645,9 +1538,6 @@ static PHP_FUNCTION(xmlwriter_start_dtd_entity)
        char *name;
        int name_len, retval;
        zend_bool isparm;
-
-       
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1655,13 +1545,11 @@ static PHP_FUNCTION(xmlwriter_start_dtd_entity)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsb", &pind, &name, &name_len, &isparm) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Attribute Name");
@@ -1700,8 +1588,6 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity)
        char *pubid = NULL, *sysid = NULL, *ndataid = NULL;
        zend_bool pe = 0;
        int pubid_len, sysid_len, ndataid_len;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1711,15 +1597,13 @@ static PHP_FUNCTION(xmlwriter_write_dtd_entity)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|bsss", &pind, 
                        &name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len,
                        &sysid, &sysid_len, &ndataid, &ndataid_len) == FAILURE) {
                        return;
                }
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
 
        XMLW_NAME_CHK("Invalid Element Name");
@@ -1748,27 +1632,17 @@ static PHP_FUNCTION(xmlwriter_open_uri)
        char *source;
        char resolved_path[MAXPATHLEN + 1];
        int source_len;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        ze_xmlwriter_object *ze_obj = NULL;
-#endif
-
-#ifndef ZEND_ENGINE_2
-       xmlOutputBufferPtr out_buffer;
-       void *ioctx;
-#endif
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {
                return;
        }
        
-#ifdef ZEND_ENGINE_2
        if (this) {
                /* We do not use XMLWRITER_FROM_OBJECT, xmlwriter init function here */
-               ze_obj = (ze_xmlwriter_object*) zend_object_store_get_object(this TSRMLS_CC); 
+               ze_obj = Z_XMLWRITER_P(this); 
        }
-#endif
 
        if (source_len == 0) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string as source");
@@ -1781,26 +1655,7 @@ static PHP_FUNCTION(xmlwriter_open_uri)
                RETURN_FALSE;
        }
 
-       /* TODO: Fix either the PHP stream or libxml APIs: it can then detect when a given 
-                path is valid and not report out of memory error. Once it is done, remove the
-                directory check in _xmlwriter_get_valid_file_path */
-#ifndef ZEND_ENGINE_2
-       ioctx = php_xmlwriter_streams_IO_open_write_wrapper(valid_file TSRMLS_CC);
-       if (ioctx == NULL) {
-               RETURN_FALSE;
-       }
-
-       out_buffer = xmlOutputBufferCreateIO(php_xmlwriter_streams_IO_write, 
-               php_xmlwriter_streams_IO_close, ioctx, NULL);
-
-       if (out_buffer == NULL) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create output buffer");
-               RETURN_FALSE;
-       }
-       ptr = xmlNewTextWriter(out_buffer);
-#else
        ptr = xmlNewTextWriterFilename(valid_file, 0);
-#endif
 
        if (!ptr) {
                RETURN_FALSE;
@@ -1809,18 +1664,13 @@ static PHP_FUNCTION(xmlwriter_open_uri)
        intern = emalloc(sizeof(xmlwriter_object));
        intern->ptr = ptr;
        intern->output = NULL;
-#ifndef ZEND_ENGINE_2
-       intern->uri_output = out_buffer;
-#else
        if (this) {
                if (ze_obj->xmlwriter_ptr) {
                        xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr TSRMLS_CC);
                }
                ze_obj->xmlwriter_ptr = intern;
                RETURN_TRUE;
-       } else
-#endif
-       {
+       } else {
                ZEND_REGISTER_RESOURCE(return_value,intern,le_xmlwriter);
        }
 }
@@ -1833,18 +1683,13 @@ static PHP_FUNCTION(xmlwriter_open_memory)
        xmlwriter_object *intern;
        xmlTextWriterPtr ptr;
        xmlBufferPtr buffer;
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
        ze_xmlwriter_object *ze_obj = NULL;
-#endif
 
-#ifdef ZEND_ENGINE_2
        if (this) {
                /* We do not use XMLWRITER_FROM_OBJECT, xmlwriter init function here */
-               ze_obj = (ze_xmlwriter_object*) zend_object_store_get_object(this TSRMLS_CC); 
+               ze_obj = Z_XMLWRITER_P(this);
        }
-#endif
 
        buffer = xmlBufferCreate();
 
@@ -1862,18 +1707,13 @@ static PHP_FUNCTION(xmlwriter_open_memory)
        intern = emalloc(sizeof(xmlwriter_object));
        intern->ptr = ptr;
        intern->output = buffer;
-#ifndef ZEND_ENGINE_2
-       intern->uri_output = NULL;
-#else
        if (this) {
                if (ze_obj->xmlwriter_ptr) {
                        xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr TSRMLS_CC);
                }
                ze_obj->xmlwriter_ptr = intern;
                RETURN_TRUE;
-       } else
-#endif
-       {
+       } else {
                ZEND_REGISTER_RESOURCE(return_value,intern,le_xmlwriter);
        }
 
@@ -1888,9 +1728,6 @@ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string)
        xmlBufferPtr buffer;
        zend_bool empty = 1;
        int output_bytes;
-
-
-#ifdef ZEND_ENGINE_2
        zval *this = getThis();
 
        if (this) {
@@ -1898,14 +1735,12 @@ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string)
                        return;
                }
                XMLWRITER_FROM_OBJECT(intern, this);
-       } else
-#endif
-       {
+       } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|b", &pind, &empty) == FAILURE) {
                        return;
                }
 
-               ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
+               ZEND_FETCH_RESOURCE(intern, xmlwriter_object *, pind, -1, "XMLWriter", le_xmlwriter);
        }
        ptr = intern->ptr;
 
@@ -1916,7 +1751,7 @@ static void php_xmlwriter_flush(INTERNAL_FUNCTION_PARAMETERS, int force_string)
                }
                output_bytes = xmlTextWriterFlush(ptr);
                if (buffer) {
-                       RETVAL_STRING((char *) buffer->content, 1);
+                       RETVAL_STRING((char *) buffer->content);
                        if (empty) {
                                xmlBufferEmpty(buffer);
                        }
@@ -1950,19 +1785,17 @@ static PHP_FUNCTION(xmlwriter_flush)
  */
 static PHP_MINIT_FUNCTION(xmlwriter)
 {
-#ifdef ZEND_ENGINE_2
        zend_class_entry ce;
-#endif
-
        le_xmlwriter = zend_register_list_destructors_ex(xmlwriter_dtor, NULL, "xmlwriter", module_number);
 
-#ifdef ZEND_ENGINE_2
        memcpy(&xmlwriter_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
-       xmlwriter_object_handlers.clone_obj      = NULL;
+       xmlwriter_object_handlers.offset = XtOffsetOf(ze_xmlwriter_object, std);
+       xmlwriter_object_handlers.free_obj = xmlwriter_object_free_storage;
+       xmlwriter_object_handlers.clone_obj = NULL;
        INIT_CLASS_ENTRY(ce, "XMLWriter", xmlwriter_class_functions);
        ce.create_object = xmlwriter_object_new;
        xmlwriter_class_entry_ce = zend_register_internal_class(&ce TSRMLS_CC);
-#endif
+
        return SUCCESS;
 }
 /* }}} */
index 929b87ba083d6b349e58e7693698b9fa2d407a5d..a4f43baaf568ed579a5068b236381141e237934c 100644 (file)
@@ -45,10 +45,16 @@ typedef struct _xmlwriter_object {
 
 /* Extends zend object */
 typedef struct _ze_xmlwriter_object {
-       zend_object zo;
        xmlwriter_object *xmlwriter_ptr;
+       zend_object std;
 } ze_xmlwriter_object;
 
+static inline ze_xmlwriter_object *php_xmlwriter_fetch_object(zend_object *obj) {
+       return (ze_xmlwriter_object *)((char*)(obj) - XtOffsetOf(ze_xmlwriter_object, std));
+}
+
+#define Z_XMLWRITER_P(zv) php_xmlwriter_fetch_object(Z_OBJ_P((zv)))
+
 #endif /* PHP_XMLWRITER_H */
 
 /*