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

Reply via email to