changeset 1320:cfe81e17269a

Fix some bugs in red-black tree implementation
author gthomas
date Sat, 18 Oct 2003 14:04:02 +0000
parents 94e373b3fc8d
children 83e860bfbcaa
files packages/compat/linux/current/ChangeLog packages/compat/linux/current/include/linux/rbtree.h packages/compat/linux/current/src/rbtree.c
diffstat 3 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/packages/compat/linux/current/ChangeLog
+++ b/packages/compat/linux/current/ChangeLog
@@ -1,3 +1,13 @@
+2003-10-18  Gary Thomas  <gary@mlbassoc.com>
+
+	* src/rbtree.c (rb_erase): Fix bug in red-black tree which caused
+	node corruption - merge from external sources, found by Scott Wilkerson.
+
+2003-10-18  Savin Zlobec <savin@elatec.si>
+
+    * include/linux/rbtree.h: 
+    Fixed 'pointer of type `void *' used in subtraction' compiler warrning.
+
 2003-07-27  Andrew Lunn  <andrew.lunn@ascom.ch>
 
 	* include/linux/init.h: 
--- a/packages/compat/linux/current/include/linux/rbtree.h
+++ b/packages/compat/linux/current/include/linux/rbtree.h
@@ -15,7 +15,7 @@ struct rb_root {
 #define NULL ((void *)0)
 #define RB_ROOT ((struct rb_root){NULL})
 #define rb_entry(p, container, field)		\
-	((container *) ((void *)p - ((void *)&(((container *)0)->field))))
+	((container *) ((char *)p - ((char *)&(((container *)0)->field))))
 
 #define RB_BLACK	0
 #define RB_RED		1
--- a/packages/compat/linux/current/src/rbtree.c
+++ b/packages/compat/linux/current/src/rbtree.c
@@ -294,7 +294,7 @@ void rb_erase(struct rb_node *elm, struc
 			RB_HEAD(head) = child;
 		if (RB_PARENT(elm) == old)
 			parent = elm;
-		(elm) = (old);
+		*(elm) = *(old);
 		if (RB_PARENT(old)) {
 			if (RB_LEFT(RB_PARENT(old)) == old)
 				RB_LEFT(RB_PARENT(old)) = elm;