diff options
Diffstat (limited to 'ext/dom/node.c')
-rw-r--r-- | ext/dom/node.c | 367 |
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); } } |