]> granicus.if.org Git - php/commitdiff
@- Added domxml_node_get_path() (Lukas Schröder)
authorChristian Stocker <chregu@php.net>
Mon, 6 Jan 2003 08:47:35 +0000 (08:47 +0000)
committerChristian Stocker <chregu@php.net>
Mon, 6 Jan 2003 08:47:35 +0000 (08:47 +0000)
- Fixed segfault, when trying to add a node to itself.

ext/domxml/php_domxml.c

index 690885fc0fad2c84280f16decdf39a6bcc058542..67290d79c7f06f6184543d68f6d9bf392453236c 100644 (file)
@@ -420,6 +420,7 @@ static zend_function_entry php_domxmlnode_class_functions[] = {
        PHP_FALIAS(get_content,                         domxml_node_get_content,                NULL)
        PHP_FALIAS(text_concat,                         domxml_node_text_concat,                NULL)
        PHP_FALIAS(set_name,                            domxml_node_set_name,                   NULL)
+       PHP_FALIAS(get_path,                            domxml_node_get_path,                   NULL)
        PHP_FALIAS(is_blank_node,                       domxml_is_blank_node,                   NULL)
        PHP_FALIAS(dump_node,                           domxml_dump_node,                               NULL)
        {NULL, NULL, NULL}
@@ -2190,6 +2191,25 @@ PHP_FUNCTION(domxml_node_namespace_uri)
 }
 /* }}} */
 
+/* {{{ proto string domxml_node_get_path(void)
+   Returns the path of the node in the document */
+PHP_FUNCTION(domxml_node_get_path)
+{
+       zval *id;
+       xmlNodePtr nodep;
+       xmlChar *path;
+
+       DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
+
+       DOMXML_NO_ARGS();
+
+       path = xmlGetNodePath(nodep);
+       if (!path) {
+               RETURN_FALSE;
+       }
+       RETVAL_STRING((char *)path, 1);
+       xmlFree(path);
+}
 
 /* {{{ proto object domxml_node_parent(void)
    Returns parent of node */
@@ -2302,6 +2322,12 @@ PHP_FUNCTION(domxml_node_append_child)
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't append attribute node");
                RETURN_FALSE;
        }
+
+       /* XXX:ls */
+       if (child == parent) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't append node to itself");
+               RETURN_FALSE;
+       }
        
        if (!(child->doc == NULL || child->doc == parent->doc)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't append node, which is in a different document than the parent node");