chregu          Mon Jan  6 04:59:54 2003 EDT

  Modified files:              
    /php4/ext/domxml    php_domxml.c php_domxml.h 
  Log:
  - get_path forgotten in .h file
  - fix crash in domxml_node_insert_before() (by Lukas Schröder)
  
  
Index: php4/ext/domxml/php_domxml.c
diff -u php4/ext/domxml/php_domxml.c:1.229 php4/ext/domxml/php_domxml.c:1.230
--- php4/ext/domxml/php_domxml.c:1.229  Mon Jan  6 03:47:35 2003
+++ php4/ext/domxml/php_domxml.c        Mon Jan  6 04:59:53 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_domxml.c,v 1.229 2003/01/06 08:47:35 chregu Exp $ */
+/* $Id: php_domxml.c,v 1.230 2003/01/06 09:59:53 chregu Exp $ */
 
 /* TODO
  * - Support Notation Nodes
@@ -2426,9 +2426,40 @@
 
        DOMXML_GET_OBJ(child, node, le_domxmlnodep);
 
+       new_child = NULL;
+
        if (ref != NULL) {
                DOMXML_GET_OBJ(refp, ref, le_domxmlnodep);
-               new_child = xmlAddPrevSibling(refp, child);
+               
+                /* 
+                 * The following code is from libxml2/tree.c 
+                 * libxml does free textnodes, if there are adjacent TEXT nodes
+                 * This is bad behaviour for domxml, since then we have have reference
+                 * to undefined nodes. The idea here is, that we do this text 
+comparison
+                 * by ourself and not free the nodes. and only if libxml2 won't do 
+any harm
+                 * call the function from libxml2.
+                 * The code is exactly the same as in libxml2, only xmlFreeNode was 
+taken away.
+                 */
+
+               if (child->type == XML_TEXT_NODE) {
+                       if (refp->type == XML_TEXT_NODE) {
+                               xmlChar *tmp;
+
+                               tmp = xmlStrdup(child->content);
+                               tmp = xmlStrcat(tmp, refp->content);
+                               xmlNodeSetContent(refp, tmp);
+                               xmlFree(tmp);
+                               new_child = refp;
+                       }
+                       if ((refp->prev != NULL) && (refp->prev->type == XML_TEXT_NODE)
+                               && (refp->name == refp->prev->name)) {
+                               xmlNodeAddContent(refp->prev, child->content);
+                               new_child = refp->prev;
+                       }
+               }
+
+               if (new_child == NULL)
+                       new_child = xmlAddPrevSibling(refp, child);
        } else {
                /* first unlink node, if child is already a child of parent
                        for some strange reason, this is needed
Index: php4/ext/domxml/php_domxml.h
diff -u php4/ext/domxml/php_domxml.h:1.74 php4/ext/domxml/php_domxml.h:1.75
--- php4/ext/domxml/php_domxml.h:1.74   Tue Dec 31 11:06:32 2002
+++ php4/ext/domxml/php_domxml.h        Mon Jan  6 04:59:53 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_domxml.h,v 1.74 2002/12/31 16:06:32 sebastian Exp $ */
+/* $Id: php_domxml.h,v 1.75 2003/01/06 09:59:53 chregu Exp $ */
 
 #ifndef PHP_DOMXML_H
 #define PHP_DOMXML_H
@@ -153,6 +153,7 @@
 PHP_FUNCTION(domxml_node_get_content);
 PHP_FUNCTION(domxml_node_text_concat);
 PHP_FUNCTION(domxml_node_set_name);
+PHP_FUNCTION(domxml_node_get_path);
 PHP_FUNCTION(domxml_node_name);
 PHP_FUNCTION(domxml_node_type);
 PHP_FUNCTION(domxml_node_value);



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to