diff options
author | Tjerk Meesters <datibbaw@php.net> | 2014-09-02 06:34:18 +0800 |
---|---|---|
committer | Tjerk Meesters <datibbaw@php.net> | 2014-09-02 06:34:18 +0800 |
commit | f54451cf399ebba0e52b42ab45de52f0f4bc3afb (patch) | |
tree | f6b03bf141b7237063356193a9497fad2b34ff78 /ext/dom/node.c | |
parent | 8da58e36b4facf3cccb14183303ded36eff95e71 (diff) | |
download | php-git-f54451cf399ebba0e52b42ab45de52f0f4bc3afb.tar.gz |
Make DOMNode::textContent writeable
Diffstat (limited to 'ext/dom/node.c')
-rw-r--r-- | ext/dom/node.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c index ae74ea04cf..2c484adae9 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -352,14 +352,7 @@ 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); - } + convert_to_string_copy(newval, value_copy); xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); if (newval == &value_copy) { zval_dtor(newval); @@ -794,14 +787,7 @@ 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); - } + convert_to_string_copy(newval, value_copy); prefix = Z_STRVAL_P(newval); if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) { strURI = (char *) nodep->ns->href; @@ -942,6 +928,23 @@ 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); + zval value_copy; + xmlChar *enc_str; + + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + + convert_to_string_copy(newval, value_copy); + enc_str = xmlEncodeEntitiesReentrant(nodep->doc, Z_STRVAL_P(newval)); + xmlNodeSetContent(nodep, enc_str); + xmlFree(enc_str); + if (newval == &value_copy) { + zval_dtor(newval); + } + return SUCCESS; } |