rrichards               Sun Aug 24 06:23:44 2003 EDT

  Modified files:              
    /php-src/ext/dom    php_dom.c node.c element.c domimplementation.c 
                        domexception.c document.c characterdata.c attr.c 
  Log:
  implement stricterrorcheck
  fix clonenode
  cleanup error routines
  
Index: php-src/ext/dom/php_dom.c
diff -u php-src/ext/dom/php_dom.c:1.27 php-src/ext/dom/php_dom.c:1.28
--- php-src/ext/dom/php_dom.c:1.27      Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/php_dom.c   Sun Aug 24 06:23:43 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dom.c,v 1.27 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: php_dom.c,v 1.28 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -88,7 +88,11 @@
                        return SUCCESS;
                        break;
                default:
-                       return FAILURE;
+                       if (node->doc == NULL) {
+                               return SUCCESS;
+                       } else {
+                               return FAILURE;
+                       }
        }
 }
 /* }}} end dom_node_is_read_only */
@@ -110,6 +114,14 @@
 }
 /* }}} end dom_node_children_valid */
 
+int dom_get_strict_error(dom_ref_obj *document) {
+       if (document) {
+               return document->stricterror;
+       } else {
+               return 1;
+       }
+}
+
 /* {{{ int increment_document_reference(dom_object *object) */
 int increment_document_reference(dom_object *object, xmlDocPtr docp TSRMLS_DC) {
        int ret_refcount = -1;
@@ -122,6 +134,7 @@
                object->document = emalloc(sizeof(dom_ref_obj));
                object->document->ptr = docp;
                object->document->refcount = ret_refcount;
+               object->document->stricterror = 1;
        }
 
        return ret_refcount;
@@ -344,6 +357,10 @@
        }
        if (ret == SUCCESS) {
                hnd->write_func(obj, value TSRMLS_CC);
+               if (! PZVAL_IS_REF(value) && value->refcount == 0) {
+                       value->refcount++;
+                       zval_ptr_dtor(&value);
+               }
        } else {
                std_hnd = zend_get_std_object_handlers();
                std_hnd->write_property(object, member, value TSRMLS_CC);
Index: php-src/ext/dom/node.c
diff -u php-src/ext/dom/node.c:1.10 php-src/ext/dom/node.c:1.11
--- php-src/ext/dom/node.c:1.10 Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/node.c      Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: node.c,v 1.10 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: node.c,v 1.11 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -194,7 +194,7 @@
 /* {{{ proto nodeType  unsigned short  
 readonly=yes 
 URL: 
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-111237558
-Since: 
+Since:
 */
 int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
 {
@@ -238,7 +238,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, 
obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -311,7 +311,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object(first, &ret, NULL, *retval, obj 
TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -344,7 +344,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object(last, &ret, NULL, *retval, obj 
TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -374,7 +374,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object(prevsib, &ret, NULL, *retval, obj 
TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -384,10 +384,10 @@
 
 
 
-/* {{{ proto nextSibling       node    
+/* {{{ proto nextSibling       node
 readonly=yes 
 URL: 
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6AC54C2F
-Since: 
+Since:
 */
 int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
 {
@@ -404,7 +404,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object(nextsib, &ret, NULL, *retval, obj 
TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -478,7 +478,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, NULL, 
*retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -586,9 +586,7 @@
                                         strcmp (strURI, DOM_XMLNS_NAMESPACE)) ||
                                        (nodep->type == XML_ATTRIBUTE_NODE && !strcmp 
(nodep->name, "xmlns"))) {
 
-                                       /* TODO: throw error - find out how to without 
a return_value
-                                       php_dom_throw_error(NAMESPACE_ERR, 
&return_value TSRMLS_CC); */
-                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"Invalid Namespace");
+                                       php_dom_throw_error(NAMESPACE_ERR, 
dom_get_strict_error(obj->document) TSRMLS_CC);
                                        return FAILURE; 
                                }
                                ns = xmlNewNs(NULL, nodep->ns->href, (xmlChar 
*)prefix);
@@ -649,8 +647,8 @@
 
 
 
-/* {{{ proto baseURI   string  
-readonly=yes 
+/* {{{ proto baseURI   string
+readonly=yes
 URL: 
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-baseURI
 Since: DOM Level 3
 */
@@ -704,14 +702,14 @@
 
 /* {{{ proto domnode dom_node_insert_before(node newChild, node refChild);
 URL: 
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727
-Since: 
+Since:
 */
 PHP_FUNCTION(dom_node_insert_before)
 {
        zval *id, *node, *ref, *rv = NULL;
        xmlNodePtr child, new_child, parentp, refp;
        dom_object *intern, *childobj, *refpobj;
-       int ret;
+       int ret, stricterror;
 
        DOM_GET_THIS_OBJ(parentp, id, xmlNodePtr, intern);
 
@@ -723,21 +721,21 @@
 
        new_child = NULL;
 
-       if (dom_node_is_read_only(parentp) == SUCCESS || 
+       stricterror = dom_get_strict_error(intern->document);
+
+       if (dom_node_is_read_only(parentp) == SUCCESS ||
                (child->parent != NULL && dom_node_is_read_only(child->parent) == 
SUCCESS)) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
        if (dom_hierarchy(parentp, child) == FAILURE) {
-               php_dom_throw_error(HIERARCHY_REQUEST_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Hierarchy Request Error");
+               php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
        if (child->doc != parentp->doc && child->doc != NULL) {
-               php_dom_throw_error(WRONG_DOCUMENT_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't add newnode as 
it was created from a different document");
+               php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -749,8 +747,7 @@
        if (ref != NULL) {
                DOM_GET_OBJ(refp, ref, xmlNodePtr, refpobj);
                if (refp->parent != parentp) {
-                       php_dom_throw_error(NOT_FOUND_ERR, &return_value TSRMLS_CC);
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't add 
newnode as refnode is not child of node");
+                       php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC);
                        RETURN_FALSE;
                }
 
@@ -868,7 +865,7 @@
        zval *id, *newnode, *oldnode;
        xmlNodePtr children, newchild, oldchild, nodep;
        dom_object *intern, *newchildobj, *oldchildobj;
-       int foundoldchild = 0;
+       int foundoldchild = 0, stricterror;
 
        int ret;
 
@@ -890,21 +887,21 @@
                RETURN_FALSE;
        }
 
+       stricterror = dom_get_strict_error(intern->document);
+
        if (dom_node_is_read_only(nodep) == SUCCESS || 
                (newchild->parent != NULL && dom_node_is_read_only(newchild->parent) 
== SUCCESS)) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
        if (newchild->doc != nodep->doc && newchild->doc != NULL) {
-               php_dom_throw_error(WRONG_DOCUMENT_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't add newnode as 
it was created from a different document");
+               php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
        if (dom_hierarchy(nodep, newchild) == FAILURE) {
-               php_dom_throw_error(HIERARCHY_REQUEST_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Hierarchy Request Error");
+               php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -931,7 +928,7 @@
                DOM_RET_OBJ(rv, oldchild, &ret, intern);
                return;
        } else {
-               php_dom_throw_error(NOT_FOUND_ERR, &return_value TSRMLS_CC);
+               php_dom_throw_error(NOT_FOUND_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -948,7 +945,7 @@
        zval *id, *node;
        xmlNodePtr children, child, nodep;
        dom_object *intern, *childobj;
-       int ret;
+       int ret, stricterror;
 
        DOM_GET_THIS_OBJ(nodep, id, xmlNodePtr, intern);
 
@@ -962,15 +959,17 @@
 
        DOM_GET_OBJ(child, node, xmlNodePtr, childobj);
 
+       stricterror = dom_get_strict_error(intern->document);
+
        if (dom_node_is_read_only(nodep) == SUCCESS || 
                (child->parent != NULL && dom_node_is_read_only(child->parent) == 
SUCCESS)) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
        children = nodep->children;
        if (!children) {
-               php_dom_throw_error(NOT_FOUND_ERR, &return_value TSRMLS_CC);
+               php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -984,7 +983,7 @@
                children = children->next;
        }
 
-       php_dom_throw_error(NOT_FOUND_ERR, &return_value TSRMLS_CC);
+       php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC);
        RETURN_FALSE
 }
 /* }}} end dom_node_remove_child */
@@ -1000,7 +999,7 @@
        xmlNodePtr child, nodep, new_child = NULL;
        dom_object *intern, *childobj;
        xmlNsPtr nsptr;
-       int ret;
+       int ret, stricterror;
 
        DOM_GET_THIS_OBJ(nodep, id, xmlNodePtr, intern);
 
@@ -1014,21 +1013,21 @@
 
        DOM_GET_OBJ(child, node, xmlNodePtr, childobj);
 
-       if (dom_node_is_read_only(nodep) == SUCCESS || 
+       stricterror = dom_get_strict_error(intern->document);
+
+       if (dom_node_is_read_only(nodep) == SUCCESS ||
                (child->parent != NULL && dom_node_is_read_only(child->parent) == 
SUCCESS)) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
        if (dom_hierarchy(nodep, child) == FAILURE) {
-               php_dom_throw_error(HIERARCHY_REQUEST_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Hierarchy Request Error");
+               php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
        if (!(child->doc == NULL || child->doc == nodep->doc)) {
-               php_dom_throw_error(WRONG_DOCUMENT_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't append node, which 
is in a different document than the parent node");
+               php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -1083,7 +1082,7 @@
        new_child = xmlAddChild(nodep, child);
 
        if (new_child == NULL) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't append node");
+               php_error(E_WARNING, "Couldn't append node");
                RETURN_FALSE;
        }
 
@@ -1147,7 +1146,7 @@
                return;
        }
 
-       node = xmlCopyNode(n, recursive);
+       node = xmlDocCopyNode(n, n->doc, recursive);
        if (!node) {
                RETURN_FALSE;
        }
@@ -1351,7 +1350,7 @@
                        RETURN_STRING((char *) nsptr->href, 1);
                }
        }
-               
+
        RETURN_NULL();
 }
 /* }}} end dom_node_lookup_namespace_uri */
Index: php-src/ext/dom/element.c
diff -u php-src/ext/dom/element.c:1.12 php-src/ext/dom/element.c:1.13
--- php-src/ext/dom/element.c:1.12      Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/element.c   Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: element.c,v 1.12 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: element.c,v 1.13 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -185,7 +185,7 @@
        }
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -207,7 +207,7 @@
 
 /* {{{ proto dom_void dom_element_remove_attribute(string name);
 URL: 
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9
-Since: 
+Since:
 */
 PHP_FUNCTION(dom_element_remove_attribute)
 {
@@ -225,7 +225,7 @@
        }
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -296,7 +296,7 @@
        }
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -357,7 +357,7 @@
        }
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -500,7 +500,7 @@
        char *uri, *name;
        char *localname = NULL, *prefix = NULL;
        dom_object *intern;
-       int errorcode = 0;
+       int errorcode = 0, stricterror;
 
        DOM_GET_THIS_OBJ(elemp, id, xmlNodePtr, intern);
 
@@ -508,8 +508,10 @@
                return;
        }
 
+       stricterror = dom_get_strict_error(intern->document);
+
        if (dom_node_is_read_only(elemp) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -543,8 +545,7 @@
        }
 
        if (errorcode != 0) {
-               php_dom_throw_error(errorcode, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace");
+               php_dom_throw_error(errorcode, stricterror TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -577,7 +578,7 @@
        }
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -664,7 +665,7 @@
        }
 
        if (dom_node_is_read_only(nodep) == SUCCESS) {
-               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value 
TSRMLS_CC);
+               php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
Index: php-src/ext/dom/domimplementation.c
diff -u php-src/ext/dom/domimplementation.c:1.8 php-src/ext/dom/domimplementation.c:1.9
--- php-src/ext/dom/domimplementation.c:1.8     Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/domimplementation.c Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domimplementation.c,v 1.8 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: domimplementation.c,v 1.9 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -98,8 +98,7 @@
        if (uri->opaque != NULL) {
                localname = xmlStrdup(uri->opaque);
                if (xmlStrchr(localname, (xmlChar) ':') != NULL) {
-                       php_dom_throw_error(NAMESPACE_ERR, &return_value TSRMLS_CC);
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid 
Namespace");
+                       php_dom_throw_error(NAMESPACE_ERR, 1 TSRMLS_CC);
                        xmlFreeURI(uri);
                        xmlFree(localname);
                        RETURN_FALSE;
@@ -149,8 +148,7 @@
                        RETURN_FALSE;
                }
                if (doctype->doc != NULL) {
-                       php_dom_throw_error(WRONG_DOCUMENT_ERR, &return_value 
TSRMLS_CC);
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "DocumentType: 
Wrong Document");
+                       php_dom_throw_error(WRONG_DOCUMENT_ERR, 1 TSRMLS_CC);
                        RETURN_FALSE;
                }
        } else {
@@ -172,8 +170,7 @@
                if (localname != NULL) {
                        xmlFree(localname);
                }
-               php_dom_throw_error(errorcode, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace");
+               php_dom_throw_error(errorcode, 1 TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -207,7 +204,7 @@
                        xmlFreeDoc(docp);
                        xmlFree(localname);
                        /* Need some type of error here */
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unexpected 
Error");
+                       php_error(E_WARNING, "Unexpected Error");
                        RETURN_FALSE;
                }
 
Index: php-src/ext/dom/domexception.c
diff -u php-src/ext/dom/domexception.c:1.3 php-src/ext/dom/domexception.c:1.4
--- php-src/ext/dom/domexception.c:1.3  Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/domexception.c      Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: domexception.c,v 1.3 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: domexception.c,v 1.4 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -42,16 +42,11 @@
 };
 
 /* {{{ php_dom_throw_error */
-void php_dom_throw_error(int error_code, zval **retval TSRMLS_DC)
+void php_dom_throw_error(int error_code, int strict_error TSRMLS_DC)
 {
        zval *dom_exception;
        char *error_message;
 
-       ALLOC_ZVAL(dom_exception);
-       Z_TYPE_P(dom_exception) = IS_OBJECT;
-       object_init_ex(dom_exception, dom_domexception_class_entry);
-       dom_exception->refcount = 1;
-       dom_exception->is_ref = 1;
        switch (error_code)
        {
                case INDEX_SIZE_ERR:
@@ -106,9 +101,18 @@
                        error_message = "Unhandled Error";
        }
 
-       add_property_long(dom_exception, "code", error_code);
-       add_property_stringl(dom_exception, "message", error_message, 
strlen(error_message), 1);
-       EG(exception) = dom_exception;
+       if (strict_error == 1) {
+               ALLOC_ZVAL(dom_exception);
+               Z_TYPE_P(dom_exception) = IS_OBJECT;
+               object_init_ex(dom_exception, dom_domexception_class_entry);
+               dom_exception->refcount = 1;
+               dom_exception->is_ref = 1;
+               add_property_long(dom_exception, "code", error_code);
+               add_property_stringl(dom_exception, "message", error_message, 
strlen(error_message), 1);
+               EG(exception) = dom_exception;
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, error_message);
+       }
 }
 /* }}} end php_dom_throw_error */
 #endif
Index: php-src/ext/dom/document.c
diff -u php-src/ext/dom/document.c:1.20 php-src/ext/dom/document.c:1.21
--- php-src/ext/dom/document.c:1.20     Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/document.c  Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: document.c,v 1.20 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: document.c,v 1.21 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -118,8 +118,6 @@
        int len;
        xmlParserCtxtPtr parser;
 
-       TSRMLS_FETCH();
-
        parser = (xmlParserCtxtPtr) ctx;
 
        va_start(ap, msg);
@@ -131,7 +129,7 @@
                buf[len] = '\0';
        }
 
-       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s in %s, line: %d", buf, 
parser->input->filename, parser->input->line);
+       php_error(E_WARNING, "%s in %s, line: %d", buf, parser->input->filename, 
parser->input->line);
        efree(buf);
 }
 /* }}} end php_dom_ctx_error */
@@ -156,7 +154,7 @@
 
        ALLOC_ZVAL(*retval);
        if (NULL == (*retval = php_dom_create_object((xmlNodePtr) dtdptr, &ret, NULL, 
*retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -203,7 +201,7 @@
 
        ALLOC_ZVAL(*retval);
        if (NULL == (*retval = php_dom_create_object(root, &ret, NULL, *retval, obj 
TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;
@@ -266,12 +264,12 @@
                xmlFree((xmlChar *)docp->encoding);
        }
 
-       docp->encoding = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
-    charset = (int)xmlParseCharEncoding((const char*) docp->encoding);
+    charset = (int)xmlParseCharEncoding((const xmlChar *) Z_STRVAL_P(newval));
     if (charset > 0) {
+               docp->encoding = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
                return SUCCESS;
     } else {
-        /* TODO: ERROR XML_CHAR_ENCODING_ERROR */
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Document 
Encoding");
     }
 
        return SUCCESS;
@@ -372,12 +370,23 @@
 int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC)
 {
        ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       if (obj->document) {
+               ZVAL_BOOL(*retval, obj->document->stricterror);
+       } else {
+               ZVAL_FALSE(*retval);
+       }
        return SUCCESS;
 }
 
 int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
+       int stricterror;
+
+       if (obj->document && newval->type == IS_BOOL) {
+               stricterror = Z_LVAL_P(newval);
+               obj->document->stricterror = stricterror;
+       }
+
        return SUCCESS;
 }
 
@@ -826,8 +835,7 @@
                if (nodep != NULL) {
                        xmlFreeNode(nodep);
                }
-               php_dom_throw_error(errorcode, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace");
+               php_dom_throw_error(errorcode, dom_get_strict_error(intern->document) 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -892,8 +900,7 @@
                if (nodep != NULL) {
                        xmlFreeProp((xmlAttrPtr) nodep);
                }
-               php_dom_throw_error(errorcode, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Namespace");
+               php_dom_throw_error(errorcode, dom_get_strict_error(intern->document) 
TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -1092,8 +1099,6 @@
        ctxt->validate = validate;
     ctxt->loadsubset = resolve_externals;
     ctxt->keepBlanks = keep_blanks;
-    if (ctxt->keepBlanks == 0)
-               ctxt->sax->ignorableWhitespace = ignorableWhitespace;
        ctxt->replaceEntities = substitute_ent;
 
        ctxt->vctxt.error = php_dom_ctx_error;
@@ -1245,13 +1250,12 @@
                /* Dump contents of Node */
                DOM_GET_OBJ(node, nodep, xmlNodePtr, nodeobj);
                if (node->doc != docp) {
-                       php_dom_throw_error(WRONG_DOCUMENT_ERR, &return_value 
TSRMLS_CC);
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Node not from 
same document");
+                       php_dom_throw_error(WRONG_DOCUMENT_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                        RETURN_FALSE;
                }
                buf = xmlBufferCreate();
                if (!buf) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not fetch 
buffer");
+                       php_error(E_WARNING, "Could not fetch buffer");
                        RETURN_FALSE;
                }
 
Index: php-src/ext/dom/characterdata.c
diff -u php-src/ext/dom/characterdata.c:1.7 php-src/ext/dom/characterdata.c:1.8
--- php-src/ext/dom/characterdata.c:1.7 Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/characterdata.c     Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: characterdata.c,v 1.7 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: characterdata.c,v 1.8 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -150,8 +150,7 @@
 
        if (offset < 0 || count < 0 || offset > length) {
                xmlFree(cur);
-               php_dom_throw_error(INDEX_SIZE_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Index Size Error");
+               php_dom_throw_error(INDEX_SIZE_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -226,8 +225,7 @@
 
        if (offset < 0 || offset > length) {
                xmlFree(cur);
-               php_dom_throw_error(INDEX_SIZE_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Index Size Error");
+               php_dom_throw_error(INDEX_SIZE_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -274,8 +272,7 @@
 
        if (offset < 0 || count < 0 || offset > length) {
                xmlFree(cur);
-               php_dom_throw_error(INDEX_SIZE_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Index Size Error");
+               php_dom_throw_error(INDEX_SIZE_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
@@ -331,8 +328,7 @@
 
        if (offset < 0 || count < 0 || offset > length) {
                xmlFree(cur);
-               php_dom_throw_error(INDEX_SIZE_ERR, &return_value TSRMLS_CC);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Index Size Error");
+               php_dom_throw_error(INDEX_SIZE_ERR, 
dom_get_strict_error(intern->document) TSRMLS_CC);
                RETURN_FALSE;
        }
 
Index: php-src/ext/dom/attr.c
diff -u php-src/ext/dom/attr.c:1.6 php-src/ext/dom/attr.c:1.7
--- php-src/ext/dom/attr.c:1.6  Fri Aug 22 11:04:10 2003
+++ php-src/ext/dom/attr.c      Sun Aug 24 06:23:43 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: attr.c,v 1.6 2003/08/22 15:04:10 wez Exp $ */
+/* $Id: attr.c,v 1.7 2003/08/24 10:23:43 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -185,7 +185,7 @@
        ALLOC_ZVAL(*retval);
 
        if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, 
obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required 
DOM object");
+               php_error(E_WARNING, "Cannot create required DOM object");
                return FAILURE;
        }
        return SUCCESS;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to