summaryrefslogtreecommitdiff
path: root/ext/dom/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/node.c')
-rw-r--r--ext/dom/node.c367
1 files changed, 141 insertions, 226 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c
index 32795671df..b2079ffda2 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -1,8 +1,8 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -196,7 +196,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D095
Since:
*/
-int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_node_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNsPtr ns;
@@ -216,9 +216,9 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
ns = nodep->ns;
if (ns != NULL && ns->prefix) {
qname = xmlStrdup(ns->prefix);
- qname = xmlStrcat(qname, ":");
+ qname = xmlStrcat(qname, (xmlChar *) ":");
qname = xmlStrcat(qname, nodep->name);
- str = qname;
+ str = (char *) qname;
} else {
str = (char *) nodep->name;
}
@@ -226,10 +226,10 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
case XML_NAMESPACE_DECL:
ns = nodep->ns;
if (ns != NULL && ns->prefix) {
- qname = xmlStrdup("xmlns");
- qname = xmlStrcat(qname, ":");
+ qname = xmlStrdup((xmlChar *) "xmlns");
+ qname = xmlStrcat(qname, (xmlChar *) ":");
qname = xmlStrcat(qname, nodep->name);
- str = qname;
+ str = (char *) qname;
} else {
str = (char *) nodep->name;
}
@@ -262,12 +262,10 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node Type");
}
- ALLOC_ZVAL(*retval);
-
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
+ if (str != NULL) {
+ ZVAL_STRING(retval, str);
} else {
- ZVAL_EMPTY_STRING(*retval);
+ ZVAL_EMPTY_STRING(retval);
}
if (qname != NULL) {
@@ -285,13 +283,11 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D080
Since:
*/
-int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_node_value_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
char *str = NULL;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@@ -305,36 +301,30 @@ int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
case XML_COMMENT_NODE:
case XML_CDATA_SECTION_NODE:
case XML_PI_NODE:
- str = xmlNodeGetContent(nodep);
+ str = (char *) xmlNodeGetContent(nodep);
break;
case XML_NAMESPACE_DECL:
- str = xmlNodeGetContent(nodep->children);
+ str = (char *) xmlNodeGetContent(nodep->children);
break;
default:
str = NULL;
break;
}
- ALLOC_ZVAL(*retval);
-
if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
+ ZVAL_STRING(retval, str);
xmlFree(str);
} else {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
}
-
return SUCCESS;
}
int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
{
- xmlNode *nodep;
- zval value_copy;
-
- nodep = dom_object_get_node(obj);
+ xmlNode *nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@@ -352,19 +342,12 @@ int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
case XML_COMMENT_NODE:
case XML_CDATA_SECTION_NODE:
case XML_PI_NODE:
- if (newval->type != IS_STRING) {
- if(Z_REFCOUNT_P(newval) > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
- xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
- if (newval == &value_copy) {
- zval_dtor(newval);
+ {
+ zend_string *str = zval_get_string(newval);
+ xmlNodeSetContentLen(nodep, (xmlChar *) str->val, str->len + 1);
+ zend_string_release(str);
+ break;
}
- break;
default:
break;
}
@@ -379,7 +362,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-111237558
Since:
*/
-int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_node_type_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
@@ -390,13 +373,11 @@ int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
/* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */
if (nodep->type == XML_DTD_NODE) {
- ZVAL_LONG(*retval, XML_DOCUMENT_TYPE_NODE);
+ ZVAL_LONG(retval, XML_DOCUMENT_TYPE_NODE);
} else {
- ZVAL_LONG(*retval, nodep->type);
+ ZVAL_LONG(retval, nodep->type);
}
return SUCCESS;
@@ -409,10 +390,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1060184317
Since:
*/
-int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_parent_node_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *nodeparent;
- int ret;
nodep = dom_object_get_node(obj);
@@ -421,18 +401,13 @@ int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
nodeparent = nodep->parent;
if (!nodeparent) {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
return SUCCESS;
}
- if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, *retval, obj TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
+ php_dom_create_object(nodeparent, retval, obj TSRMLS_CC);
return SUCCESS;
}
@@ -443,25 +418,21 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1451460987
Since:
*/
-int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_child_nodes_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
dom_object *intern;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
if (dom_node_children_valid(nodep) == FAILURE) {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
} else {
- php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC);
- intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+ php_dom_create_interator(retval, DOM_NODELIST TSRMLS_CC);
+ intern = Z_DOMOBJ_P(retval);
dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
}
@@ -475,10 +446,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-169727388
Since:
*/
-int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_first_child_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *first = NULL;
- int ret;
nodep = dom_object_get_node(obj);
@@ -491,17 +461,12 @@ int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
first = nodep->children;
}
- ALLOC_ZVAL(*retval);
-
if (!first) {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
return SUCCESS;
}
- if (NULL == (*retval = php_dom_create_object(first, &ret, *retval, obj TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
+ php_dom_create_object(first, retval, obj TSRMLS_CC);
return SUCCESS;
}
@@ -512,10 +477,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-61AD09FB
Since:
*/
-int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_last_child_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *last = NULL;
- int ret;
nodep = dom_object_get_node(obj);
@@ -528,17 +492,12 @@ int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
last = nodep->last;
}
- ALLOC_ZVAL(*retval);
-
if (!last) {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
return SUCCESS;
}
- if (NULL == (*retval = php_dom_create_object(last, &ret, *retval, obj TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
+ php_dom_create_object(last, retval, obj TSRMLS_CC);
return SUCCESS;
}
@@ -549,10 +508,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-640FB3C8
Since:
*/
-int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_previous_sibling_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *prevsib;
- int ret;
nodep = dom_object_get_node(obj);
@@ -561,18 +519,13 @@ int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
prevsib = nodep->prev;
if (!prevsib) {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
return SUCCESS;
}
- if (NULL == (*retval = php_dom_create_object(prevsib, &ret, *retval, obj TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
+ php_dom_create_object(prevsib, retval, obj TSRMLS_CC);
return SUCCESS;
}
@@ -583,10 +536,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6AC54C2F
Since:
*/
-int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_next_sibling_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *nextsib;
- int ret;
nodep = dom_object_get_node(obj);
@@ -600,12 +552,7 @@ int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object(nextsib, &ret, *retval, obj TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
+ php_dom_create_object(nextsib, retval, obj TSRMLS_CC);
return SUCCESS;
}
@@ -616,26 +563,22 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-84CF096
Since:
*/
-int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_attributes_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
dom_object *intern;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
if (nodep->type == XML_ELEMENT_NODE) {
- php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
- intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+ php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
+ intern = Z_DOMOBJ_P(retval);
dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
} else {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
}
return SUCCESS;
@@ -648,13 +591,10 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-node-ownerDoc
Since:
*/
-int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_owner_document_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
xmlDocPtr docp;
- int ret;
-
- nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@@ -662,8 +602,7 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
}
if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
- ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
return SUCCESS;
}
@@ -672,12 +611,7 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
- if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, *retval, obj TSRMLS_CC))) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
- return FAILURE;
- }
+ php_dom_create_object((xmlNodePtr) docp, retval, obj TSRMLS_CC);
return SUCCESS;
}
@@ -688,13 +622,11 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSname
Since: DOM Level 2
*/
-int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_namespace_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
char *str = NULL;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@@ -713,12 +645,10 @@ int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
break;
}
- ALLOC_ZVAL(*retval);
-
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
+ if (str != NULL) {
+ ZVAL_STRING(retval, str);
} else {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
}
return SUCCESS;
@@ -731,14 +661,12 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSPrefix
Since: DOM Level 2
*/
-int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_prefix_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
xmlNsPtr ns;
char *str = NULL;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@@ -758,12 +686,10 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
break;
}
- ALLOC_ZVAL(*retval);
-
if (str == NULL) {
- ZVAL_EMPTY_STRING(*retval);
+ ZVAL_EMPTY_STRING(retval);
} else {
- ZVAL_STRING(*retval, str, 1);
+ ZVAL_STRING(retval, str);
}
return SUCCESS;
@@ -771,7 +697,7 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
{
- zval value_copy;
+ zend_string *str;
xmlNode *nodep, *nsnode = NULL;
xmlNsPtr ns = NULL, curns;
char *strURI;
@@ -794,22 +720,15 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
nsnode = xmlDocGetRootElement(nodep->doc);
}
}
- if (newval->type != IS_STRING) {
- if(Z_REFCOUNT_P(newval) > 1) {
- value_copy = *newval;
- zval_copy_ctor(&value_copy);
- newval = &value_copy;
- }
- convert_to_string(newval);
- }
- prefix = Z_STRVAL_P(newval);
+ str = zval_get_string(newval);
+ prefix = str->val;
if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) {
strURI = (char *) nodep->ns->href;
if (strURI == NULL ||
- (!strcmp (prefix, "xml") && strcmp(strURI, XML_XML_NAMESPACE)) ||
- (nodep->type == XML_ATTRIBUTE_NODE && !strcmp (prefix, "xmlns") &&
- strcmp (strURI, DOM_XMLNS_NAMESPACE)) ||
- (nodep->type == XML_ATTRIBUTE_NODE && !strcmp (nodep->name, "xmlns"))) {
+ (!strcmp(prefix, "xml") && strcmp(strURI, (char *) XML_XML_NAMESPACE)) ||
+ (nodep->type == XML_ATTRIBUTE_NODE && !strcmp(prefix, "xmlns") &&
+ strcmp(strURI, (char *) DOM_XMLNS_NAMESPACE)) ||
+ (nodep->type == XML_ATTRIBUTE_NODE && !strcmp((char *) nodep->name, "xmlns"))) {
ns = NULL;
} else {
curns = nsnode->nsDef;
@@ -826,18 +745,14 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
}
if (ns == NULL) {
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
+ zend_string_release(str);
php_dom_throw_error(NAMESPACE_ERR, dom_get_strict_error(obj->document) TSRMLS_CC);
return FAILURE;
}
xmlSetNs(nodep, ns);
}
- if (newval == &value_copy) {
- zval_dtor(newval);
- }
+ zend_string_release(str);
break;
default:
break;
@@ -853,23 +768,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSLocalN
Since: DOM Level 2
*/
-int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_local_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
-
- nodep = dom_object_get_node(obj);
+ xmlNode *nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) {
- ZVAL_STRING(*retval, (char *) (nodep->name), 1);
+ ZVAL_STRING(retval, (char *) (nodep->name));
} else {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
}
return SUCCESS;
@@ -882,26 +793,22 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-baseURI
Since: DOM Level 3
*/
-int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_base_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
xmlChar *baseuri;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
- ALLOC_ZVAL(*retval);
-
baseuri = xmlNodeGetBase(nodep->doc, nodep);
if (baseuri) {
- ZVAL_STRING(*retval, (char *) (baseuri), 1);
+ ZVAL_STRING(retval, (char *) (baseuri));
xmlFree(baseuri);
} else {
- ZVAL_NULL(*retval);
+ ZVAL_NULL(retval);
}
return SUCCESS;
@@ -914,27 +821,23 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-textContent
Since: DOM Level 3
*/
-int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_text_content_read(dom_object *obj, zval *retval TSRMLS_DC)
{
- xmlNode *nodep;
+ xmlNode *nodep = dom_object_get_node(obj);
char *str = NULL;
- nodep = dom_object_get_node(obj);
-
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
- str = xmlNodeGetContent(nodep);
-
- ALLOC_ZVAL(*retval);
+ str = (char *) xmlNodeGetContent(nodep);
- if(str != NULL) {
- ZVAL_STRING(*retval, str, 1);
+ if (str != NULL) {
+ ZVAL_STRING(retval, str);
xmlFree(str);
} else {
- ZVAL_EMPTY_STRING(*retval);
+ ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@@ -942,6 +845,21 @@ int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC)
{
+ xmlNode *nodep = dom_object_get_node(obj);
+ zend_string *str;
+ xmlChar *enc_str;
+
+ if (nodep == NULL) {
+ php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
+ return FAILURE;
+ }
+
+ str = zval_get_string(newval);
+ enc_str = xmlEncodeEntitiesReentrant(nodep->doc, (xmlChar *) str->val);
+ xmlNodeSetContent(nodep, enc_str);
+ xmlFree(enc_str);
+ zend_string_release(str);
+
return SUCCESS;
}
@@ -1431,7 +1349,7 @@ PHP_FUNCTION(dom_node_clone_node)
xmlNode *n, *node;
int ret;
dom_object *intern;
- long recursive = 0;
+ zend_long recursive = 0;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &id, dom_node_class_entry, &recursive) == FAILURE) {
return;
@@ -1510,7 +1428,7 @@ Since: DOM Level 2
PHP_FUNCTION(dom_node_is_supported)
{
zval *id;
- int feature_len, version_len;
+ size_t feature_len, version_len;
char *feature, *version;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_node_class_entry, &feature, &feature_len, &version, &version_len) == FAILURE) {
@@ -1598,7 +1516,7 @@ PHP_FUNCTION(dom_node_lookup_prefix)
xmlNodePtr nodep, lookupp = NULL;
dom_object *intern;
xmlNsPtr nsptr;
- int uri_len = 0;
+ size_t uri_len = 0;
char *uri;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_node_class_entry, &uri, &uri_len) == FAILURE) {
@@ -1627,9 +1545,10 @@ PHP_FUNCTION(dom_node_lookup_prefix)
lookupp = nodep->parent;
}
- if (lookupp != NULL && (nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, uri))) {
- if (nsptr->prefix != NULL) {
- RETURN_STRING((char *) nsptr->prefix, 1);
+ if (lookupp != NULL) {
+ nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, (xmlChar *) uri);
+ if (nsptr && nsptr->prefix != NULL) {
+ RETURN_STRING((char *) nsptr->prefix);
}
}
}
@@ -1648,7 +1567,7 @@ PHP_FUNCTION(dom_node_is_default_namespace)
xmlNodePtr nodep;
dom_object *intern;
xmlNsPtr nsptr;
- int uri_len = 0;
+ size_t uri_len = 0;
char *uri;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_node_class_entry, &uri, &uri_len) == FAILURE) {
@@ -1662,7 +1581,7 @@ PHP_FUNCTION(dom_node_is_default_namespace)
if (nodep && uri_len > 0) {
nsptr = xmlSearchNs(nodep->doc, nodep, NULL);
- if (nsptr && xmlStrEqual(nsptr->href, uri)) {
+ if (nsptr && xmlStrEqual(nsptr->href, (xmlChar *) uri)) {
RETURN_TRUE;
}
}
@@ -1681,8 +1600,8 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri)
xmlNodePtr nodep;
dom_object *intern;
xmlNsPtr nsptr;
- int prefix_len = 0;
- char *prefix=NULL;
+ size_t prefix_len;
+ char *prefix;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!", &id, dom_node_class_entry, &prefix, &prefix_len) == FAILURE) {
return;
@@ -1696,9 +1615,9 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri)
}
}
- nsptr = xmlSearchNs(nodep->doc, nodep, prefix);
+ nsptr = xmlSearchNs(nodep->doc, nodep, (xmlChar *) prefix);
if (nsptr && nsptr->href != NULL) {
- RETURN_STRING((char *) nsptr->href, 1);
+ RETURN_STRING((char *) nsptr->href);
}
RETURN_NULL();
@@ -1756,7 +1675,8 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
zend_bool exclusive=0, with_comments=0;
xmlChar **inclusive_ns_prefixes = NULL;
char *file = NULL;
- int ret = -1, file_len = 0;
+ int ret = -1;
+ size_t file_len = 0;
xmlOutputBufferPtr buf;
xmlXPathContextPtr ctxp=NULL;
xmlXPathObjectPtr xpathobjp=NULL;
@@ -1788,7 +1708,7 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
if (nodep->type != XML_DOCUMENT_NODE) {
ctxp = xmlXPathNewContext(docp);
ctxp->node = nodep;
- xpathobjp = xmlXPathEvalExpression("(.//. | .//@* | .//namespace::*)", ctxp);
+ xpathobjp = xmlXPathEvalExpression((xmlChar *) "(.//. | .//@* | .//namespace::*)", ctxp);
ctxp->node = NULL;
if (xpathobjp && xpathobjp->type == XPATH_NODESET) {
nodeset = xpathobjp->nodesetval;
@@ -1804,12 +1724,12 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
} else {
/*xpath query from xpath_array */
HashTable *ht = Z_ARRVAL_P(xpath_array);
- zval **tmp;
+ zval *tmp;
char *xquery;
- if (zend_hash_find(ht, "query", sizeof("query"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_STRING) {
- xquery = Z_STRVAL_PP(tmp);
+ tmp = zend_hash_str_find(ht, "query", sizeof("query")-1);
+ if (tmp && Z_TYPE_P(tmp) == IS_STRING) {
+ xquery = Z_STRVAL_P(tmp);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "'query' missing from xpath array or is not a string");
RETURN_FALSE;
@@ -1818,25 +1738,21 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
ctxp = xmlXPathNewContext(docp);
ctxp->node = nodep;
- if (zend_hash_find(ht, "namespaces", sizeof("namespaces"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_ARRAY) {
- zval **tmpns;
- while (zend_hash_get_current_data(Z_ARRVAL_PP(tmp), (void **)&tmpns) == SUCCESS) {
- if (Z_TYPE_PP(tmpns) == IS_STRING) {
- char *prefix;
- ulong idx;
- uint prefix_key_len;
-
- if (zend_hash_get_current_key_ex(Z_ARRVAL_PP(tmp),
- &prefix, &prefix_key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
- xmlXPathRegisterNs(ctxp, prefix, Z_STRVAL_PP(tmpns));
+ tmp = zend_hash_str_find(ht, "namespaces", sizeof("namespaces")-1);
+ if (tmp && Z_TYPE_P(tmp) == IS_ARRAY) {
+ zval *tmpns;
+ zend_string *prefix;
+
+ ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(tmp), prefix, tmpns) {
+ if (Z_TYPE_P(tmpns) == IS_STRING) {
+ if (prefix) {
+ xmlXPathRegisterNs(ctxp, (xmlChar *) prefix->val, (xmlChar *) Z_STRVAL_P(tmpns));
}
}
- zend_hash_move_forward(Z_ARRVAL_PP(tmp));
- }
+ } ZEND_HASH_FOREACH_END();
}
- xpathobjp = xmlXPathEvalExpression(xquery, ctxp);
+ xpathobjp = xmlXPathEvalExpression((xmlChar *) xquery, ctxp);
ctxp->node = NULL;
if (xpathobjp && xpathobjp->type == XPATH_NODESET) {
nodeset = xpathobjp->nodesetval;
@@ -1852,17 +1768,16 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
if (ns_prefixes != NULL) {
if (exclusive) {
- zval **tmpns;
+ zval *tmpns;
int nscount = 0;
inclusive_ns_prefixes = safe_emalloc(zend_hash_num_elements(Z_ARRVAL_P(ns_prefixes)) + 1,
sizeof(xmlChar *), 0);
- while (zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes), (void **)&tmpns) == SUCCESS) {
- if (Z_TYPE_PP(tmpns) == IS_STRING) {
- inclusive_ns_prefixes[nscount++] = Z_STRVAL_PP(tmpns);
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(ns_prefixes), tmpns) {
+ if (Z_TYPE_P(tmpns) == IS_STRING) {
+ inclusive_ns_prefixes[nscount++] = (xmlChar *) Z_STRVAL_P(tmpns);
}
- zend_hash_move_forward(Z_ARRVAL_P(ns_prefixes));
- }
+ } ZEND_HASH_FOREACH_END();
inclusive_ns_prefixes[nscount] = NULL;
} else {
php_error_docref(NULL TSRMLS_CC, E_NOTICE,
@@ -1902,9 +1817,9 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
#endif
if (ret > 0) {
#ifdef LIBXML2_NEW_BUFFER
- RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1);
+ RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret);
#else
- RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
+ RETVAL_STRINGL((char *) buf->buffer->content, ret);
#endif
} else {
RETVAL_EMPTY_STRING();
@@ -1950,11 +1865,11 @@ PHP_METHOD(domnode, getNodePath)
DOM_GET_THIS_OBJ(nodep, id, xmlNodePtr, intern);
- value = xmlGetNodePath(nodep);
+ value = (char *) xmlGetNodePath(nodep);
if (value == NULL) {
RETURN_NULL();
} else {
- RETVAL_STRING(value, 1);
+ RETVAL_STRING(value);
xmlFree(value);
}
}