tree: don't set error on failure, this is the caller's responsibility

This commit is contained in:
Bert Belder 2017-09-25 20:32:27 +02:00
parent 562bf271df
commit 7b43e9c9f0
3 changed files with 18 additions and 11 deletions

View File

@ -321,15 +321,22 @@ int ep_port_ctl(ep_port_t* port_info,
int ep_port_add_socket(ep_port_t* port_info,
ep_sock_t* sock_info,
SOCKET socket) {
return tree_add(&port_info->sock_tree, &sock_info->tree_node, socket);
if (tree_add(&port_info->sock_tree, &sock_info->tree_node, socket) < 0)
return_error(-1, ERROR_ALREADY_EXISTS);
return 0;
}
int ep_port_del_socket(ep_port_t* port_info, ep_sock_t* sock_info) {
return tree_del(&port_info->sock_tree, &sock_info->tree_node);
if (tree_del(&port_info->sock_tree, &sock_info->tree_node) < 0)
return_error(-1, ERROR_NOT_FOUND);
return 0;
}
ep_sock_t* ep_port_find_socket(ep_port_t* port_info, SOCKET socket) {
return ep_sock_find_in_tree(&port_info->sock_tree, socket);
ep_sock_t* sock_info = ep_sock_find_in_tree(&port_info->sock_tree, socket);
if (sock_info == NULL)
return_error(NULL, ERROR_NOT_FOUND);
return sock_info;
}
static poll_group_allocator_t* _ep_port_get_poll_group_allocator(

View File

@ -30,7 +30,7 @@ int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key) {
existing_node = RB_INSERT(tree, tree, node);
if (existing_node != NULL)
return_error(-1, ERROR_ALREADY_EXISTS);
return -1;
return 0;
}
@ -41,7 +41,7 @@ int tree_del(tree_t* tree, tree_node_t* node) {
removed_node = RB_REMOVE(tree, tree, node);
if (removed_node == NULL)
return_error(-1, ERROR_NOT_FOUND);
return -1;
else
assert(removed_node == node);
@ -49,17 +49,12 @@ int tree_del(tree_t* tree, tree_node_t* node) {
}
tree_node_t* tree_find(tree_t* tree, uintptr_t key) {
tree_node_t* node;
tree_node_t lookup;
memset(&lookup, 0, sizeof lookup);
lookup.key = key;
node = RB_FIND(tree, tree, &lookup);
if (node == NULL)
return_error(NULL, ERROR_NOT_FOUND);
return node;
return RB_FIND(tree, tree, &lookup);
}
tree_node_t* tree_root(tree_t* tree) {

View File

@ -4,6 +4,11 @@
#include "internal.h"
#include "rb.h"
/* NB: the tree functions do not set errno or LastError when they fail. Each of
* the API functions has at most one failure mode. It is up to the caller to
* set an appropriate error code when necessary.
*/
typedef RB_HEAD(tree, tree_node) tree_t;
typedef struct tree_node {