rrichards Mon Jul 7 15:37:33 2003 EDT Modified files: /php-src/ext/dom xml_common.h text.c processinginstruction.c php_dom.h php_dom.c notation.c node.c entity.c element.c documenttype.c document.c characterdata.c attr.c Log: implement node proxies: next phase of interop
Index: php-src/ext/dom/xml_common.h diff -u php-src/ext/dom/xml_common.h:1.9 php-src/ext/dom/xml_common.h:1.10 --- php-src/ext/dom/xml_common.h:1.9 Fri Jun 20 10:08:56 2003 +++ php-src/ext/dom/xml_common.h Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: xml_common.h,v 1.9 2003/06/20 14:08:56 rrichards Exp $ */ +/* $Id: xml_common.h,v 1.10 2003/07/07 19:37:32 rrichards Exp $ */ #ifndef PHP_XML_COMMON_H #define PHP_XML_COMMON_H @@ -27,15 +27,21 @@ int refcount; } dom_ref_obj; +typedef struct _node_ptr { + xmlNodePtr node; + int refcount; + void *_private; +} node_ptr; + typedef struct _node_object { zend_object std; - xmlNodePtr node; + node_ptr *node; dom_ref_obj *document; } node_object; typedef struct _dom_object { zend_object std; - void *ptr; + node_ptr *ptr; dom_ref_obj *document; HashTable *prop_handler; zend_object_handle handle; @@ -63,7 +69,7 @@ #define NODE_GET_OBJ(__ptr, __id, __prtype, __intern) { \ __intern = (node_object *)zend_object_store_get_object(__id TSRMLS_CC); \ - if (!(__ptr = (__prtype)__intern->node)) { \ + if (__intern->ptr == NULL || !(__ptr = (__prtype)__intern->ptr->node)) { \ php_error(E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\ RETURN_NULL();\ } \ Index: php-src/ext/dom/text.c diff -u php-src/ext/dom/text.c:1.10 php-src/ext/dom/text.c:1.11 --- php-src/ext/dom/text.c:1.10 Sun Jun 15 15:58:42 2003 +++ php-src/ext/dom/text.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: text.c,v 1.10 2003/06/15 19:58:42 rrichards Exp $ */ +/* $Id: text.c,v 1.11 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -84,7 +84,7 @@ xmlNodePtr node; xmlChar *wholetext; - node = obj->ptr; + node = dom_object_get_node(obj); ALLOC_ZVAL(*retval); wholetext = xmlNodeListGetString(node->doc, node, 1); Index: php-src/ext/dom/processinginstruction.c diff -u php-src/ext/dom/processinginstruction.c:1.3 php-src/ext/dom/processinginstruction.c:1.4 --- php-src/ext/dom/processinginstruction.c:1.3 Tue Jun 10 16:03:27 2003 +++ php-src/ext/dom/processinginstruction.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: processinginstruction.c,v 1.3 2003/06/10 20:03:27 imajes Exp $ */ +/* $Id: processinginstruction.c,v 1.4 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -85,7 +85,7 @@ { xmlNodePtr nodep; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (nodep->name), 1); @@ -107,7 +107,7 @@ xmlNodePtr nodep; xmlChar *content; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); @@ -127,7 +127,7 @@ { xmlNode *nodep; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); return SUCCESS; Index: php-src/ext/dom/php_dom.h diff -u php-src/ext/dom/php_dom.h:1.8 php-src/ext/dom/php_dom.h:1.9 --- php-src/ext/dom/php_dom.h:1.8 Thu Jun 26 06:40:26 2003 +++ php-src/ext/dom/php_dom.h Mon Jul 7 15:37:32 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dom.h,v 1.8 2003/06/26 10:40:26 rrichards Exp $ */ +/* $Id: php_dom.h,v 1.9 2003/07/07 19:37:32 rrichards Exp $ */ #ifndef PHP_DOM_H #define PHP_DOM_H @@ -64,12 +64,14 @@ #include "dom_fe.h" -void php_dom_set_object(dom_object *wrapper, void *obj TSRMLS_DC); +void php_dom_set_object(dom_object *object, xmlNodePtr obj TSRMLS_DC); dom_object *dom_object_get_data(xmlNodePtr obj); +xmlNodePtr dom_object_get_node(dom_object *obj); zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC); void php_dom_throw_error(int error_code, zval **retval TSRMLS_DC); void node_free_resource(xmlNodePtr node TSRMLS_DC); void node_list_unlink(xmlNodePtr node TSRMLS_DC); +int decrement_node_ptr(dom_object *object TSRMLS_DC); int increment_document_reference(dom_object *object, xmlDocPtr docp TSRMLS_DC); int decrement_document_reference(dom_object *object TSRMLS_DC); xmlNsPtr dom_get_ns(char *uri, char *qName, int uri_len, int qName_len, int *errorcode, char **localname); @@ -88,7 +90,7 @@ #define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \ __intern = (dom_object *)zend_object_store_get_object(__id TSRMLS_CC); \ - if (!(__ptr = (__prtype)__intern->ptr)) { \ + if (__intern->ptr == NULL || !(__ptr = (__prtype)__intern->ptr->node)) { \ php_error(E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\ RETURN_NULL();\ } \ Index: php-src/ext/dom/php_dom.c diff -u php-src/ext/dom/php_dom.c:1.15 php-src/ext/dom/php_dom.c:1.16 --- php-src/ext/dom/php_dom.c:1.15 Sun Jun 15 20:18:28 2003 +++ php-src/ext/dom/php_dom.c Mon Jul 7 15:37:32 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dom.c,v 1.15 2003/06/16 00:18:28 helly Exp $ */ +/* $Id: php_dom.c,v 1.16 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -74,7 +74,7 @@ }; -/* {{{ void increment_document_reference(dom_object *object) */ +/* {{{ int increment_document_reference(dom_object *object) */ int increment_document_reference(dom_object *object, xmlDocPtr docp TSRMLS_DC) { int ret_refcount = -1; @@ -82,16 +82,17 @@ object->document->refcount++; ret_refcount = object->document->refcount; } else if (docp != NULL) { + ret_refcount = 1; object->document = emalloc(sizeof(dom_ref_obj)); object->document->ptr = docp; - object->document->refcount = 1; + object->document->refcount = ret_refcount; } return ret_refcount; } /* }}} end increment_document_reference */ -/* {{{ void decrement_document_reference(dom_object *object) */ +/* {{{ int decrement_document_reference(dom_object *object) */ int decrement_document_reference(dom_object *object TSRMLS_DC) { int ret_refcount = -1; @@ -104,46 +105,93 @@ object->document->ptr = NULL; } efree(object->document); - object->document = NULL; } + object->document = NULL; } return ret_refcount; } /* }}} end decrement_document_reference */ +/* {{{ int decrement_node_ptr(dom_object *object) */ +int decrement_node_ptr(dom_object *object TSRMLS_DC) { + int ret_refcount = -1; + + if (object != NULL && object->ptr != NULL) { + ret_refcount = --object->ptr->refcount; + if (ret_refcount == 0) { + if (object->ptr->node != NULL) { + object->ptr->node->_private = NULL; + } + efree(object->ptr); + } + object->ptr = NULL; + } + + return ret_refcount; +} +/* }}} end decrement_node_ptr */ + +/* {{{ xmlNodePtr dom_object_get_node(dom_object *obj) */ +xmlNodePtr dom_object_get_node(dom_object *obj) +{ + if (obj->ptr != NULL) { + return obj->ptr->node; + } else { + return NULL; + } +} +/* }}} end dom_object_get_node */ + /* {{{ dom_object_set_data */ static void dom_object_set_data(xmlNodePtr obj, dom_object *wrapper TSRMLS_DC) { - - obj->_private = wrapper; + if (wrapper == NULL) { + obj->_private = NULL; + } else { + obj->_private = wrapper->ptr; + } } /* }}} end dom_object_set_data */ -/* {{{ dom_object_get_data */ +/* {{{ dom_object *dom_object_get_data(xmlNodePtr obj) */ dom_object *dom_object_get_data(xmlNodePtr obj) { - return (dom_object *) obj->_private; + if (obj->_private != NULL) { + return (dom_object *) ((node_ptr *) obj->_private)->_private; + } else { + return NULL; + } } /* }}} end dom_object_get_data */ /* {{{ php_dom_clear_object */ static void php_dom_clear_object(dom_object *object TSRMLS_DC) { - object->ptr = NULL; if (object->prop_handler) { object->prop_handler = NULL; } + decrement_node_ptr(object TSRMLS_CC); decrement_document_reference(object TSRMLS_CC); - object->document = NULL; } -/* }}} end dom_object_get_data */ +/* }}} end php_dom_clear_object */ -/* {{{ php_dom_set_object */ -void php_dom_set_object(dom_object *object, void *obj TSRMLS_DC) +/* {{{ void php_dom_set_object(dom_object *object, xmlNodePtr obj TSRMLS_DC) */ +void php_dom_set_object(dom_object *object, xmlNodePtr obj TSRMLS_DC) { - object->ptr = obj; - dom_object_set_data(obj, object TSRMLS_CC); + if (obj->_private == NULL) { + object->ptr = emalloc(sizeof(node_ptr)); + object->ptr->node = obj; + object->ptr->refcount = 1; + object->ptr->_private = object; + dom_object_set_data(obj, object TSRMLS_CC); + } else if (object->ptr == NULL) { + object->ptr = obj->_private; + object->ptr->refcount++; + if (object->ptr->_private == NULL) { + object->ptr->_private = object; + } + } } /* }}} end php_dom_set_object */ @@ -154,7 +202,6 @@ wrapper = dom_object_get_data(nodep); if (wrapper != NULL ) { - dom_object_set_data(nodep, NULL TSRMLS_CC); php_dom_clear_object(wrapper TSRMLS_CC); } } @@ -635,6 +682,9 @@ void dom_node_free(xmlNodePtr node) { if(node) { + if (node->_private != NULL) { + ((node_ptr *) node->_private)->node = NULL; + } switch (node->type) { case XML_ATTRIBUTE_NODE: xmlFreeProp((xmlAttrPtr) node); @@ -686,9 +736,6 @@ /* {{{ node_free_resource */ void node_free_resource(xmlNodePtr node TSRMLS_DC) { - xmlDtdPtr extSubset, intSubset; - xmlDocPtr docp; - if (!node) { return; } @@ -696,34 +743,7 @@ switch (node->type) { case XML_DOCUMENT_NODE: case XML_HTML_DOCUMENT_NODE: - { - docp = (xmlDocPtr) node; - if (docp->ids != NULL) xmlFreeIDTable((xmlIDTablePtr) docp->ids); - docp->ids = NULL; - if (docp->refs != NULL) xmlFreeRefTable((xmlRefTablePtr) docp->refs); - docp->refs = NULL; - extSubset = docp->extSubset; - intSubset = docp->intSubset; - if (intSubset == extSubset) - extSubset = NULL; - if (extSubset != NULL) { - node_free_list((xmlNodePtr) extSubset->children TSRMLS_CC); - xmlUnlinkNode((xmlNodePtr) docp->extSubset); - docp->extSubset = NULL; - xmlFreeDtd(extSubset); - } - if (intSubset != NULL) { - node_free_list((xmlNodePtr) intSubset->children TSRMLS_CC); - xmlUnlinkNode((xmlNodePtr) docp->intSubset); - docp->intSubset = NULL; - xmlFreeDtd(intSubset); - } - - node_free_list(node->children TSRMLS_CC); - node_free_list((xmlNodePtr) node->properties TSRMLS_CC); - xmlFreeDoc((xmlDoc *) node); break; - } default: if (node->parent == NULL) { node_free_list((xmlNodePtr) node->children TSRMLS_CC); @@ -739,13 +759,7 @@ node_free_list((xmlNodePtr) node->properties TSRMLS_CC); } dom_unregister_node(node TSRMLS_CC); - switch (node->type) { - case XML_ATTRIBUTE_NODE: - xmlFreeProp((xmlAttrPtr) node); - break; - default: - xmlFreeNode((xmlNode *) node); - } + dom_node_free(node); } else { dom_unregister_node(node TSRMLS_CC); } @@ -769,15 +783,12 @@ zend_hash_destroy(intern->std.properties); FREE_HASHTABLE(intern->std.properties); - if (intern->ptr) { - if (((xmlNodePtr) intern->ptr)->type != XML_DOCUMENT_NODE && ((xmlNodePtr) intern->ptr)->type != XML_HTML_DOCUMENT_NODE) { - node_free_resource(intern->ptr TSRMLS_CC); + if (intern->ptr != NULL && intern->ptr->node != NULL) { + if (((xmlNodePtr) intern->ptr->node)->type != XML_DOCUMENT_NODE && ((xmlNodePtr) intern->ptr->node)->type != XML_HTML_DOCUMENT_NODE) { + node_free_resource(dom_object_get_node(intern) TSRMLS_CC); } else { + decrement_node_ptr(intern TSRMLS_CC); retcount = decrement_document_reference(intern TSRMLS_CC); - if (retcount != 0) { - dom_object_set_data(intern->ptr, NULL TSRMLS_CC); - } - intern->document = NULL; } intern->ptr = NULL; } Index: php-src/ext/dom/notation.c diff -u php-src/ext/dom/notation.c:1.2 php-src/ext/dom/notation.c:1.3 --- php-src/ext/dom/notation.c:1.2 Tue Jun 10 16:03:27 2003 +++ php-src/ext/dom/notation.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: notation.c,v 1.2 2003/06/10 20:03:27 imajes Exp $ */ +/* $Id: notation.c,v 1.3 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -49,7 +49,7 @@ { xmlNotationPtr nodep; - nodep = obj->ptr; + nodep = (xmlNotationPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (nodep->PublicID) { ZVAL_STRING(*retval, (char *) (nodep->PublicID), 1); @@ -73,7 +73,7 @@ { xmlNotationPtr nodep; - nodep = obj->ptr; + nodep = (xmlNotationPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (nodep->SystemID) { ZVAL_STRING(*retval, (char *) (nodep->PublicID), 1); Index: php-src/ext/dom/node.c diff -u php-src/ext/dom/node.c:1.6 php-src/ext/dom/node.c:1.7 --- php-src/ext/dom/node.c:1.6 Sun Jun 15 15:58:42 2003 +++ php-src/ext/dom/node.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: node.c,v 1.6 2003/06/15 19:58:42 rrichards Exp $ */ +/* $Id: node.c,v 1.7 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -66,7 +66,7 @@ xmlNode *nodep; char *str = NULL; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); switch (nodep->type) { case XML_ATTRIBUTE_NODE: @@ -131,7 +131,7 @@ xmlNode *nodep; char *str = NULL; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); /* TODO: Element node is invalid for this property - currently here as a convience method while developing */ switch (nodep->type) { @@ -166,7 +166,7 @@ { xmlNode *nodep; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); switch (nodep->type) { case XML_ATTRIBUTE_NODE: @@ -199,7 +199,7 @@ { xmlNode *nodep; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); ZVAL_LONG(*retval, nodep->type); @@ -220,7 +220,7 @@ xmlNode *nodep, *nodeparent; int ret; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); nodeparent = nodep->parent; if (!nodeparent) { @@ -249,7 +249,8 @@ { xmlNodePtr nodep, last; int ret; - nodep = obj->ptr; + + nodep = dom_object_get_node(obj); if ((nodep->type == XML_DOCUMENT_NODE) || (nodep->type == XML_HTML_DOCUMENT_NODE)) { last = ((xmlDoc *) nodep)->children; @@ -285,8 +286,7 @@ xmlNode *nodep, *first; int ret; - nodep = obj->ptr; - + nodep = dom_object_get_node(obj); first = nodep->children; if (!first) { @@ -316,7 +316,7 @@ xmlNode *nodep, *last; int ret; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); last = nodep->last; if (!last) { @@ -346,7 +346,7 @@ xmlNode *nodep, *prevsib; int ret; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); prevsib = nodep->prev; if (!prevsib) { @@ -376,7 +376,7 @@ xmlNode *nodep, *nextsib; int ret; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); nextsib = nodep->next; if (!nextsib) { @@ -405,9 +405,9 @@ { xmlNodePtr nodep; xmlAttr *attr; - int ret; - nodep = obj->ptr; + + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); @@ -444,7 +444,7 @@ xmlDocPtr docp; int ret; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { ALLOC_ZVAL(*retval); @@ -480,7 +480,7 @@ xmlNode *nodep; char *str = NULL; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); switch (nodep->type) { case XML_ELEMENT_NODE: @@ -520,7 +520,7 @@ xmlNsPtr ns; char *str = NULL; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); switch (nodep->type) { case XML_ELEMENT_NODE: @@ -556,7 +556,7 @@ char *strURI; char *prefix; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); switch (nodep->type) { case XML_ELEMENT_NODE: @@ -617,7 +617,8 @@ int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC) { xmlNode *nodep; - nodep = obj->ptr; + + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); @@ -661,7 +662,7 @@ xmlNode *nodep; char *str = NULL; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); str = xmlNodeGetContent(nodep); @@ -767,7 +768,8 @@ if (lastattr != (xmlAttrPtr) child) { xmlUnlinkNode((xmlNodePtr) lastattr); node_free_resource((xmlNodePtr) lastattr TSRMLS_CC); - xmlFreeProp(lastattr); + /* Freed above + xmlFreeProp(lastattr); */ } else { DOM_RET_OBJ(rv, child, &ret, intern); return; @@ -808,7 +810,8 @@ if (lastattr != (xmlAttrPtr) child) { xmlUnlinkNode((xmlNodePtr) lastattr); node_free_resource((xmlNodePtr) lastattr TSRMLS_CC); - xmlFreeProp(lastattr); + /* Freed above + xmlFreeProp(lastattr); */ } else { DOM_RET_OBJ(rv, child, &ret, intern); return; @@ -1012,7 +1015,8 @@ if (lastattr != (xmlAttrPtr) child) { xmlUnlinkNode((xmlNodePtr) lastattr); node_free_resource((xmlNodePtr) lastattr TSRMLS_CC); - xmlFreeProp(lastattr); + /* Freed above + xmlFreeProp(lastattr); */ } } } else if (child->type == XML_DOCUMENT_FRAG_NODE) { Index: php-src/ext/dom/entity.c diff -u php-src/ext/dom/entity.c:1.2 php-src/ext/dom/entity.c:1.3 --- php-src/ext/dom/entity.c:1.2 Tue Jun 10 16:03:27 2003 +++ php-src/ext/dom/entity.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: entity.c,v 1.2 2003/06/10 20:03:27 imajes Exp $ */ +/* $Id: entity.c,v 1.3 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -48,7 +48,8 @@ int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) { xmlEntity *nodep; - nodep = obj->ptr; + + nodep = (xmlEntity *) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { @@ -72,7 +73,8 @@ int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) { xmlEntity *nodep; - nodep = obj->ptr; + + nodep = (xmlEntity *) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { @@ -98,7 +100,7 @@ xmlEntity *nodep; char *content; - nodep = obj->ptr; + nodep = (xmlEntity *) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { Index: php-src/ext/dom/element.c diff -u php-src/ext/dom/element.c:1.5 php-src/ext/dom/element.c:1.6 --- php-src/ext/dom/element.c:1.5 Sun Jun 15 15:58:42 2003 +++ php-src/ext/dom/element.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: element.c,v 1.5 2003/06/15 19:58:42 rrichards Exp $ */ +/* $Id: element.c,v 1.6 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -107,7 +107,7 @@ { xmlNodePtr nodep; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (nodep->name), 1); return SUCCESS; @@ -296,7 +296,7 @@ if ((oldobj = dom_object_get_data((xmlNodePtr) existattrp)) == NULL) { xmlUnlinkNode((xmlNodePtr) existattrp); } else { - if (oldobj->ptr == attrp) { + if (oldobj->ptr->node == (xmlNodePtr) attrp) { RETURN_NULL(); } xmlUnlinkNode((xmlNodePtr) existattrp); @@ -637,7 +637,7 @@ if ((oldobj = dom_object_get_data((xmlNodePtr) existattrp)) == NULL) { xmlUnlinkNode((xmlNodePtr) existattrp); } else { - if (oldobj->ptr == attrp) { + if (oldobj->ptr->node == (xmlNodePtr) attrp) { RETURN_NULL(); } xmlUnlinkNode((xmlNodePtr) existattrp); Index: php-src/ext/dom/documenttype.c diff -u php-src/ext/dom/documenttype.c:1.3 php-src/ext/dom/documenttype.c:1.4 --- php-src/ext/dom/documenttype.c:1.3 Tue Jun 10 16:03:27 2003 +++ php-src/ext/dom/documenttype.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: documenttype.c,v 1.3 2003/06/10 20:03:27 imajes Exp $ */ +/* $Id: documenttype.c,v 1.4 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -67,7 +67,7 @@ { xmlDtdPtr dtdptr; - dtdptr = obj->ptr; + dtdptr = (xmlDtdPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (dtdptr->name), 1); @@ -91,7 +91,7 @@ xmlNode *nodep = NULL; int ret, htsize, index = 0; - doctypep = obj->ptr; + doctypep = (xmlDtdPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); array_init(*retval); @@ -137,7 +137,7 @@ xmlNode *nodep = NULL; int ret, htsize, index = 0; - doctypep = obj->ptr; + doctypep = (xmlDtdPtr) dom_object_get_node(obj); MAKE_STD_ZVAL(*retval); array_init(*retval); @@ -179,7 +179,7 @@ { xmlDtdPtr dtdptr; - dtdptr = obj->ptr; + dtdptr = (xmlDtdPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (dtdptr->ExternalID) { @@ -204,7 +204,7 @@ { xmlDtdPtr dtdptr; - dtdptr = obj->ptr; + dtdptr = (xmlDtdPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); if (dtdptr->SystemID) { @@ -232,7 +232,7 @@ xmlOutputBuffer *buff = NULL; xmlChar *strintsubset; - dtdptr = obj->ptr; + dtdptr = (xmlDtdPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); Index: php-src/ext/dom/document.c diff -u php-src/ext/dom/document.c:1.8 php-src/ext/dom/document.c:1.9 --- php-src/ext/dom/document.c:1.8 Tue Jul 1 15:28:30 2003 +++ php-src/ext/dom/document.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: document.c,v 1.8 2003/07/01 19:28:30 rrichards Exp $ */ +/* $Id: document.c,v 1.9 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -107,8 +107,7 @@ xmlDtdPtr dtdptr; int ret; - docp = obj->ptr; - + docp = (xmlDocPtr) dom_object_get_node(obj); dtdptr = xmlGetIntSubset(docp); if (!dtdptr) { @@ -155,7 +154,7 @@ xmlNode *root; int ret; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); root = xmlDocGetRootElement(docp); if (!root) { @@ -204,7 +203,7 @@ xmlDoc *docp; char *encoding; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); encoding = (char *) docp->encoding; ALLOC_ZVAL(*retval); @@ -253,7 +252,7 @@ xmlDoc *docp; int standalone; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); standalone = docp->standalone; ZVAL_BOOL(*retval, standalone); @@ -266,7 +265,7 @@ xmlDoc *docp; int standalone; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); standalone = Z_LVAL_P(newval); if (standalone > 0) { docp->standalone = 1; @@ -295,7 +294,7 @@ xmlDoc *docp; char *version; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); version = (char *) docp->version; ALLOC_ZVAL(*retval); @@ -312,7 +311,7 @@ { xmlDoc *docp; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); if (docp->version != NULL) { xmlFree((xmlChar *) docp->version ); } @@ -357,7 +356,7 @@ xmlDoc *docp; char *url; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); url = (char *) docp->URL; @@ -374,7 +373,7 @@ { xmlDoc *docp; - docp = obj->ptr; + docp = (xmlDocPtr) dom_object_get_node(obj); if (docp->URL != NULL) { xmlFree((xmlChar *) docp->URL); } @@ -975,6 +974,7 @@ if (intern != NULL) { olddoc = (xmlDocPtr)intern->ptr; if (olddoc != NULL) { + decrement_node_ptr(intern TSRMLS_CC); refcount = decrement_document_reference(intern TSRMLS_CC); if (refcount != 0) { olddoc->_private = NULL; @@ -983,7 +983,7 @@ intern->document = NULL; increment_document_reference(intern, docp TSRMLS_CC); - php_dom_set_object(intern, docp TSRMLS_CC); + php_dom_set_object(intern, (xmlNodePtr) docp TSRMLS_CC); } add_property_bool(id, "formatOutput", 0); @@ -1019,6 +1019,7 @@ if (intern != NULL) { docp = (xmlDocPtr)intern->ptr; if (docp != NULL) { + decrement_node_ptr(intern TSRMLS_CC); refcount = decrement_document_reference(intern TSRMLS_CC); if (refcount != 0) { docp->_private = NULL; @@ -1028,7 +1029,7 @@ increment_document_reference(intern, newdoc TSRMLS_CC); } - php_dom_set_object(intern, newdoc TSRMLS_CC); + php_dom_set_object(intern, (xmlNodePtr) newdoc TSRMLS_CC); RETURN_TRUE; } else { @@ -1064,6 +1065,7 @@ if (intern != NULL) { docp = (xmlDocPtr)intern->ptr; if (docp != NULL) { + decrement_node_ptr(intern TSRMLS_CC); refcount = decrement_document_reference(intern TSRMLS_CC); if (refcount != 0) { docp->_private = NULL; @@ -1074,7 +1076,7 @@ increment_document_reference(intern, newdoc TSRMLS_CC); } - php_dom_set_object(intern, newdoc TSRMLS_CC); + php_dom_set_object(intern, (xmlNodePtr) newdoc TSRMLS_CC); RETURN_TRUE; } else { Index: php-src/ext/dom/characterdata.c diff -u php-src/ext/dom/characterdata.c:1.5 php-src/ext/dom/characterdata.c:1.6 --- php-src/ext/dom/characterdata.c:1.5 Thu Jun 12 13:04:28 2003 +++ php-src/ext/dom/characterdata.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: characterdata.c,v 1.5 2003/06/12 17:04:28 rrichards Exp $ */ +/* $Id: characterdata.c,v 1.6 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -53,7 +53,7 @@ xmlNodePtr nodep; xmlChar *content; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); @@ -72,7 +72,7 @@ { xmlNode *nodep; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); return SUCCESS; } @@ -104,7 +104,7 @@ xmlChar *content; long length; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); ALLOC_ZVAL(*retval); Index: php-src/ext/dom/attr.c diff -u php-src/ext/dom/attr.c:1.3 php-src/ext/dom/attr.c:1.4 --- php-src/ext/dom/attr.c:1.3 Tue Jun 10 16:03:27 2003 +++ php-src/ext/dom/attr.c Mon Jul 7 15:37:32 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: attr.c,v 1.3 2003/06/10 20:03:27 imajes Exp $ */ +/* $Id: attr.c,v 1.4 2003/07/07 19:37:32 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -89,7 +89,7 @@ { xmlAttrPtr attrp; - attrp = obj->ptr; + attrp = (xmlAttrPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (attrp->name), 1); @@ -127,7 +127,7 @@ xmlAttrPtr attrp; xmlChar *content; - attrp = obj->ptr; + attrp = (xmlAttrPtr) dom_object_get_node(obj); ALLOC_ZVAL(*retval); @@ -148,7 +148,7 @@ { xmlAttrPtr attrp; - attrp = obj->ptr; + attrp = (xmlAttrPtr) dom_object_get_node(obj); if (attrp->children) { node_list_unlink(attrp->children TSRMLS_CC); @@ -172,7 +172,7 @@ xmlNodePtr nodep, nodeparent; int ret; - nodep = obj->ptr; + nodep = dom_object_get_node(obj); nodeparent = nodep->parent; if (!nodeparent) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php