projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Do not check for the daemon() system call
[tinc]
/
lib
/
rbl.c
diff --git
a/lib/rbl.c
b/lib/rbl.c
index
3b97da6
..
1a40535
100644
(file)
--- a/
lib/rbl.c
+++ b/
lib/rbl.c
@@
-17,13
+17,16
@@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: rbl.c,v 1.1.2.
8 2000/11/20 19:12:10
guus Exp $
+ $Id: rbl.c,v 1.1.2.
11 2000/11/22 19:14:08
guus Exp $
*/
*/
+#include "config.h"
+
#include <stdlib.h>
#include <xalloc.h>
#include "rbl.h"
#include <stdlib.h>
#include <xalloc.h>
#include "rbl.h"
+#include <system.h>
/* Allocate a new rbl node */
rbl_t *new_rbl()
/* Allocate a new rbl node */
rbl_t *new_rbl()
@@
-34,6
+37,8
@@
rbl_t *new_rbl()
/* Free a rbl node */
void free_rbl(rbl_t *rbl)
{
/* Free a rbl node */
void free_rbl(rbl_t *rbl)
{
+ if(rbl->data && rbl->tree->delete)
+ rbl->tree->delete(rbl->data);
free(rbl);
}
free(rbl);
}
@@
-63,7
+68,7
@@
rbl_t *rbl_search_closest_rbl(rbltree_t *tree, void *data)
{
rbl_t *rbl, *next;
int result;
{
rbl_t *rbl, *next;
int result;
-
+
next = rbl = tree->top;
while(next)
next = rbl = tree->top;
while(next)
@@
-85,31
+90,36
@@
rbl_t *rbl_search_closest_rbl(rbltree_t *tree, void *data)
void *rbl_search_closest(rbltree_t *tree, void *data)
{
void *rbl_search_closest(rbltree_t *tree, void *data)
{
- return rbl_search_closest_rbl(tree, data)->data;
+ rbl_t *rbl;
+
+ rbl = rbl_search_closest_rbl(tree, data);
+
+ if(rbl)
+ return rbl->data;
+ else
+ return NULL;
}
/* Search exact match or return NULL pointer */
rbl_t *rbl_search_rbl(rbltree_t *tree, void *data)
{
}
/* Search exact match or return NULL pointer */
rbl_t *rbl_search_rbl(rbltree_t *tree, void *data)
{
- rbl_t *rbl
, *next
;
+ rbl_t *rbl;
int result;
int result;
+
+ rbl = tree->top;
- next = rbl = tree->top;
-
- while(next)
+ while(rbl)
{
{
- rbl = next;
-
result = tree->compare(data, rbl->data);
if(result < 0)
result = tree->compare(data, rbl->data);
if(result < 0)
-
next
= rbl->left;
+
rbl
= rbl->left;
else if(result > 0)
else if(result > 0)
-
next
= rbl->right;
+
rbl
= rbl->right;
else
return rbl;
}
else
return rbl;
}
-
+
return NULL;
}
return NULL;
}
@@
-432,7
+442,7
@@
rbl_t *rbl_unlink_rbl(rbl_t *rbl)
if(y->color == RBL_BLACK && x)
rbl_delete_fixup(x);
if(y->color == RBL_BLACK && x)
rbl_delete_fixup(x);
-
+
return rbl;
}
return rbl;
}
@@
-444,38
+454,27
@@
rbl_t *rbl_unlink(rbltree_t *tree, void *data)
rbl = rbl_search_rbl(tree, data);
if(rbl)
rbl = rbl_search_rbl(tree, data);
if(rbl)
- r
eturn r
bl_unlink_rbl(rbl);
- else
-
return NULL
;
+ rbl_unlink_rbl(rbl);
+
+
return rbl
;
}
/* Unlink node and free it */
void rbl_delete_rbl(rbl_t *rbl)
{
}
/* Unlink node and free it */
void rbl_delete_rbl(rbl_t *rbl)
{
- free_rbl(rbl_unlink_rbl(rbl));
+ rbl_unlink_rbl(rbl);
+ free_rbl(rbl);
}
/* Search node in tree, unlink and free it */
void rbl_delete(rbltree_t *tree, void *data)
{
}
/* Search node in tree, unlink and free it */
void rbl_delete(rbltree_t *tree, void *data)
{
- free_rbl(rbl_unlink(tree, data));
-}
-
-rbl_unlink_rbltree_branch(rbl_t *rbl)
-{
- if(rbl->left)
- rbl_unlink_rbltree_branch(rbl->left);
+ rbl_t *rbl;
- if(rbl->right)
- rbl_unlink_rbltree_branch(rbl->right);
+ rbl = rbl_unlink(tree, data);
- if(rbl->parent)
- {
- if(rbl == rbl->parent->left)
- rbl->parent->left = NULL;
- else
- rbl->parent->right = NULL;
- }
+ if(rbl)
+ free_rbl(rbl);
}
/* Optimized unlinking for a complete tree */
}
/* Optimized unlinking for a complete tree */
@@
-507,7
+506,7
@@
void rbl_delete_rbltree(rbltree_t *tree)
for(rbl = tree->head; rbl; rbl = next)
{
next = rbl->next;
for(rbl = tree->head; rbl; rbl = next)
{
next = rbl->next;
-
tree->delete(rbl->data
);
+
free_rbl(rbl
);
}
tree->top = NULL;
}
tree->top = NULL;