From 7b43e9c9f0bcf8fdd6208ad373442c24321f92bf Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Mon, 25 Sep 2017 20:32:27 +0200 Subject: [PATCH] tree: don't set error on failure, this is the caller's responsibility --- src/port.c | 13 ++++++++++--- src/tree.c | 11 +++-------- src/tree.h | 5 +++++ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/port.c b/src/port.c index acbbb2f..f2b9759 100644 --- a/src/port.c +++ b/src/port.c @@ -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( diff --git a/src/tree.c b/src/tree.c index f921a90..743814b 100644 --- a/src/tree.c +++ b/src/tree.c @@ -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) { diff --git a/src/tree.h b/src/tree.h index 35d5800..0e7ad35 100644 --- a/src/tree.h +++ b/src/tree.h @@ -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 {