# HG changeset patch # User gthomas # Date 1066485842 0 # Node ID cfe81e17269a963925763d0d0fc4e488835a8874 # Parent 94e373b3fc8dc9b62d4d71abd90ead7ad8f7789c Fix some bugs in red-black tree implementation diff --git a/packages/compat/linux/current/ChangeLog b/packages/compat/linux/current/ChangeLog --- a/packages/compat/linux/current/ChangeLog +++ b/packages/compat/linux/current/ChangeLog @@ -1,3 +1,13 @@ +2003-10-18 Gary Thomas + + * 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 + + * include/linux/rbtree.h: + Fixed 'pointer of type `void *' used in subtraction' compiler warrning. + 2003-07-27 Andrew Lunn * include/linux/init.h: diff --git a/packages/compat/linux/current/include/linux/rbtree.h b/packages/compat/linux/current/include/linux/rbtree.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 diff --git a/packages/compat/linux/current/src/rbtree.c b/packages/compat/linux/current/src/rbtree.c --- 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;