summaryrefslogtreecommitdiff
path: root/ext/dom/php_dom.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/php_dom.c')
-rw-r--r--ext/dom/php_dom.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index 6f3dfcb73e..633cf55de7 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -102,8 +102,13 @@ int decrement_document_reference(dom_object *object TSRMLS_DC) {
object->document->refcount--;
ret_refcount = object->document->refcount;
if (ret_refcount == 0) {
- dom_clean_nodes(object TSRMLS_CC);
- node_free_resource(object->document->ptr TSRMLS_CC);
+ if (object->document->ptr != NULL) {
+ dom_clean_nodes(object TSRMLS_CC);
+ /* No references to Doc so can use xmlFreeDoc
+ node_free_resource(object->document->ptr TSRMLS_CC); */
+ xmlFreeDoc((xmlDoc *) object->document->ptr);
+ object->document->ptr = NULL;
+ }
efree(object->document);
object->document = NULL;
}
@@ -590,7 +595,7 @@ PHP_MINFO_FUNCTION(dom)
php_info_print_table_start();
php_info_print_table_row(2, "DOM/XML", "enabled");
php_info_print_table_row(2, "DOM/XML API Version", DOM_API_VERSION);
- php_info_print_table_row(2, "libxml Version", xmlParserVersion);
+ php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION);
#if defined(LIBXML_HTML_ENABLED)
php_info_print_table_row(2, "HTML Support", "enabled");
#endif
@@ -979,6 +984,10 @@ zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *wrapper_in, zval *
object_init_ex(wrapper, ce);
+ /* Add object properties not needing function calls */
+ if (obj->type == XML_DOCUMENT_NODE || obj->type == XML_HTML_DOCUMENT_NODE) {
+ add_property_bool(wrapper, "formatOutput", 0);
+ }
intern = (dom_object *)zend_objects_get_address(wrapper TSRMLS_CC);
if (obj->doc != NULL) {
if (domobj != NULL) {
@@ -1019,6 +1028,20 @@ int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child)
}
/* }}} end dom_hierarchy */
+/* {{{ dom_has_feature(char *feature, char *version) */
+int dom_has_feature(char *feature, char *version)
+{
+ int retval = 0;
+
+ if (!(strcmp (version, "1.0") && strcmp (version,"2.0") && strcmp(version, ""))) {
+ if ((!strcasecmp(feature, "Core") && strcmp (version, "1.0")) || !strcasecmp(feature, "XML"))
+ retval = 1;
+ }
+
+ return retval;
+}
+/* }}} end dom_has_feature */
+
/* {{{ void dom_element_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, zval **retval TSRMLS_DC) */
void dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, zval **retval, dom_object *intern TSRMLS_DC)
{