]> granicus.if.org Git - php/commitdiff
Fixed SimpleXMl build with DOM
authorXinchen Hui <laruence@gmail.com>
Sun, 4 May 2014 03:46:17 +0000 (11:46 +0800)
committerXinchen Hui <laruence@gmail.com>
Sun, 4 May 2014 03:46:17 +0000 (11:46 +0800)
ext/dom/xml_common.h
ext/libxml/php_libxml.h
ext/simplexml/simplexml.c

index 17b3a5733eeaebe4c24102b80eb15feb2bf2114f..49226c459cee854c0056bfb5ca7fed3acf2a21cf 100644 (file)
@@ -66,7 +66,7 @@ PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj);
     (const xmlChar *) "http://www.w3.org/2000/xmlns/"
 
 #define NODE_GET_OBJ(__ptr, __id, __prtype, __intern) { \
-       __intern = (php_libxml_node_object *)zend_object_store_get_object(__id TSRMLS_CC); \
+       __intern = Z_LIBXML_NODE_P(__id); \
        if (__intern->node == NULL || !(__ptr = (__prtype)__intern->node->node)) { \
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
                RETURN_NULL();\
@@ -74,7 +74,7 @@ PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj);
 }
 
 #define DOC_GET_OBJ(__ptr, __id, __prtype, __intern) { \
-       __intern = (php_libxml_node_object *)zend_object_store_get_object(__id TSRMLS_CC); \
+       __intern = Z_LIBXML_NODE_P(__id); \
        if (__intern->document != NULL) { \
                if (!(__ptr = (__prtype)__intern->document->ptr)) { \
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
index 246994ddf8cf0666a695528fd365b6a8f2284f6d..b79ca17556eb4f079c57ad1007e9fbd25ffebfc6 100644 (file)
@@ -81,6 +81,13 @@ typedef struct _php_libxml_node_object {
        zend_object  std;
 } php_libxml_node_object;
 
+
+static inline php_libxml_node_object *php_libxml_node_fetch_object(zend_object *obj) {
+       return (php_libxml_node_object *)((char*)(obj) - XtOffsetOf(php_libxml_node_object, std));
+}
+
+#define Z_LIBXML_NODE_P(zv) php_libxml_node_fetch_object(Z_OBJ_P((zv)))
+
 typedef void * (*php_libxml_export_node) (zval *object TSRMLS_DC);
 
 PHP_LIBXML_API int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC);
index 4ee251ecf84989f207829dc15555bd6d54447054..099d9722bd48d8ac18d22e894504bb0df4af87c9 100644 (file)
@@ -2398,7 +2398,7 @@ PHP_FUNCTION(simplexml_import_dom)
                return;
        }
 
-       object = (php_libxml_node_object *) ((char *) Z_OBJ_P(node) - Z_OBJ_HT_P(node)->offset);
+       object = Z_LIBXML_NODE_P(node);
 
        nodep = php_libxml_import_node(node TSRMLS_CC);