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.c288
1 files changed, 95 insertions, 193 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c
index ae74ea04cf..920581423e 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -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;
@@ -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;
@@ -315,26 +311,20 @@ int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
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 TSRMLS_CC);
+ xmlNodeSetContentLen(nodep, str->val, str->len + 1);
+ STR_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,15 +720,8 @@ 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 TSRMLS_CC);
+ prefix = str->val;
if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) {
strURI = (char *) nodep->ns->href;
if (strURI == NULL ||
@@ -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);
- }
+ STR_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);
- }
+ STR_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,13 +821,11 @@ 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;
@@ -928,13 +833,11 @@ int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
str = xmlNodeGetContent(nodep);
- ALLOC_ZVAL(*retval);
-
- 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;
@@ -1629,7 +1532,7 @@ PHP_FUNCTION(dom_node_lookup_prefix)
if (lookupp != NULL && (nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, uri))) {
if (nsptr->prefix != NULL) {
- RETURN_STRING((char *) nsptr->prefix, 1);
+ RETURN_STRING((char *) nsptr->prefix);
}
}
}
@@ -1698,7 +1601,7 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri)
nsptr = xmlSearchNs(nodep->doc, nodep, prefix);
if (nsptr && nsptr->href != NULL) {
- RETURN_STRING((char *) nsptr->href, 1);
+ RETURN_STRING((char *) nsptr->href);
}
RETURN_NULL();
@@ -1804,12 +1707,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,21 +1721,20 @@ 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;
+ tmp = zend_hash_str_find(ht, "namespaces", sizeof("namespaces")-1);
+ if (tmp && Z_TYPE_P(tmp) == IS_ARRAY) {
+ zval *tmpns;
+ while ((tmpns = zend_hash_get_current_data(Z_ARRVAL_P(tmp)))) {
+ if (Z_TYPE_P(tmpns) == IS_STRING) {
+ zend_string *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));
+ if (zend_hash_get_current_key_ex(Z_ARRVAL_P(tmp),
+ &prefix, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
+ xmlXPathRegisterNs(ctxp, prefix->val, Z_STRVAL_P(tmpns));
}
}
- zend_hash_move_forward(Z_ARRVAL_PP(tmp));
+ zend_hash_move_forward(Z_ARRVAL_P(tmp));
}
}
@@ -1852,14 +1754,14 @@ 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);
+ while ((tmpns = zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes)))) {
+ if (Z_TYPE_P(tmpns) == IS_STRING) {
+ inclusive_ns_prefixes[nscount++] = Z_STRVAL_P(tmpns);
}
zend_hash_move_forward(Z_ARRVAL_P(ns_prefixes));
}
@@ -1902,9 +1804,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();
@@ -1954,7 +1856,7 @@ PHP_METHOD(domnode, getNodePath)
if (value == NULL) {
RETURN_NULL();
} else {
- RETVAL_STRING(value, 1);
+ RETVAL_STRING(value);
xmlFree(value);
}
}