summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/dom/xml_common.h4
-rw-r--r--ext/libxml/php_libxml.h7
-rw-r--r--ext/simplexml/simplexml.c2
3 files changed, 10 insertions, 3 deletions
diff --git a/ext/dom/xml_common.h b/ext/dom/xml_common.h
index 17b3a5733e..49226c459c 100644
--- a/ext/dom/xml_common.h
+++ b/ext/dom/xml_common.h
@@ -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);\
diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h
index 246994ddf8..b79ca17556 100644
--- a/ext/libxml/php_libxml.h
+++ b/ext/libxml/php_libxml.h
@@ -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);
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 4ee251ecf8..099d9722bd 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -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);