summaryrefslogtreecommitdiff
path: root/src/hashtable.c
diff options
context:
space:
mode:
authorRussell Belfer <arrbee@arrbee.com>2012-03-14 11:07:14 -0700
committerRussell Belfer <arrbee@arrbee.com>2012-03-14 11:07:14 -0700
commitab43ad2fd822504446e7876d6352c968a74beb53 (patch)
treef18b845bcfa83c72f4b4b3e1cedd0efb79f56691 /src/hashtable.c
parente3c475107045cb89c53c114716bafebc7538433f (diff)
downloadlibgit2-ab43ad2fd822504446e7876d6352c968a74beb53.tar.gz
Convert attr and other files to new errors
This continues to add other files to the new error handling style. I think the only real concerns here are that there are a couple of error return cases that I have converted to asserts, but I think that it was the correct thing to do given the new error style.
Diffstat (limited to 'src/hashtable.c')
-rw-r--r--src/hashtable.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/src/hashtable.c b/src/hashtable.c
index c081fc9a7..0364bb52b 100644
--- a/src/hashtable.c
+++ b/src/hashtable.c
@@ -31,9 +31,7 @@ static int resize_to(git_hashtable *self, size_t new_size)
self->size_mask = new_size - 1;
self->key_count = 0;
self->nodes = git__calloc(1, sizeof(git_hashtable_node) * self->size);
-
- if (self->nodes == NULL)
- return GIT_ENOMEM;
+ GITERR_CHECK_ALLOC(self->nodes);
if (insert_nodes(self, old_nodes, old_size) == 0)
self->is_resizing = 0;
@@ -44,22 +42,22 @@ static int resize_to(git_hashtable *self, size_t new_size)
} while(self->is_resizing);
git__free(old_nodes);
- return GIT_SUCCESS;
+ return 0;
}
static int set_size(git_hashtable *self, size_t new_size)
{
self->nodes = git__realloc(self->nodes, new_size * sizeof(git_hashtable_node));
- if (self->nodes == NULL)
- return GIT_ENOMEM;
+ GITERR_CHECK_ALLOC(self->nodes);
if (new_size > self->size) {
- memset(&self->nodes[self->size], 0x0, (new_size - self->size) * sizeof(git_hashtable_node));
+ memset(&self->nodes[self->size], 0x0,
+ (new_size - self->size) * sizeof(git_hashtable_node));
}
self->size = new_size;
self->size_mask = new_size - 1;
- return GIT_SUCCESS;
+ return 0;
}
static git_hashtable_node *node_with_hash(git_hashtable *self, const void *key, int hash_id)
@@ -84,43 +82,47 @@ static int node_insert(git_hashtable *self, git_hashtable_node *new_node)
git_hashtable_node *node;
node = node_with_hash(self, new_node->key, hash_id);
node_swap_with(new_node, node);
- if(new_node->key == 0x0){
+ if (new_node->key == 0x0){
self->key_count++;
- return GIT_SUCCESS;
+ return 0;
}
}
}
- if (self->is_resizing)
- return git__throw(GIT_EBUSY, "Failed to insert node. Hashtable is currently resizing");
+ /* Failed to insert node. Hashtable is currently resizing */
+ assert(!self->is_resizing);
+
+ if (resize_to(self, self->size * 2) < 0)
+ return -1;
- resize_to(self, self->size * 2);
- git_hashtable_insert(self, new_node->key, new_node->value);
- return GIT_SUCCESS;
+ return git_hashtable_insert(self, new_node->key, new_node->value);
}
-static int insert_nodes(git_hashtable *self, git_hashtable_node *old_nodes, size_t old_size)
+static int insert_nodes(
+ git_hashtable *self, git_hashtable_node *old_nodes, size_t old_size)
{
size_t i;
for (i = 0; i < old_size; ++i) {
git_hashtable_node *node = git_hashtable_node_at(old_nodes, i);
- if (node->key && git_hashtable_insert(self, node->key, node->value) < GIT_SUCCESS)
- return GIT_ENOMEM;
+ if (node->key &&
+ git_hashtable_insert(self, node->key, node->value) < 0)
+ return -1;
}
- return GIT_SUCCESS;
+ return 0;
}
-git_hashtable *git_hashtable_alloc(size_t min_size,
- git_hash_ptr hash,
- git_hash_keyeq_ptr key_eq)
+git_hashtable *git_hashtable_alloc(
+ size_t min_size,
+ git_hash_ptr hash,
+ git_hash_keyeq_ptr key_eq)
{
git_hashtable *table;
assert(hash && key_eq);
- if ((table = git__malloc(sizeof(git_hashtable))) == NULL)
+ if ((table = git__malloc(sizeof(*table))) == NULL)
return NULL;
memset(table, 0x0, sizeof(git_hashtable));
@@ -161,7 +163,8 @@ void git_hashtable_free(git_hashtable *self)
}
-int git_hashtable_insert2(git_hashtable *self, const void *key, void *value, void **old_value)
+int git_hashtable_insert2(
+ git_hashtable *self, const void *key, void *value, void **old_value)
{
int hash_id;
git_hashtable_node *node;
@@ -177,14 +180,14 @@ int git_hashtable_insert2(git_hashtable *self, const void *key, void *value, voi
node->key = key;
node->value = value;
self->key_count++;
- return GIT_SUCCESS;
+ return 0;
}
if (key == node->key || self->key_equal(key, node->key) == 0) {
*old_value = node->value;
node->key = key;
node->value = value;
- return GIT_SUCCESS;
+ return 0;
}
}
@@ -213,7 +216,8 @@ void *git_hashtable_lookup(git_hashtable *self, const void *key)
return NULL;
}
-int git_hashtable_remove2(git_hashtable *self, const void *key, void **old_value)
+int git_hashtable_remove2(
+ git_hashtable *self, const void *key, void **old_value)
{
int hash_id;
git_hashtable_node *node;
@@ -236,8 +240,8 @@ int git_hashtable_remove2(git_hashtable *self, const void *key, void **old_value
int git_hashtable_merge(git_hashtable *self, git_hashtable *other)
{
- if (resize_to(self, (self->size + other->size) * 2) < GIT_SUCCESS)
- return GIT_ENOMEM;
+ if (resize_to(self, (self->size + other->size) * 2) < 0)
+ return -1;
return insert_nodes(self, other->nodes, other->key_count);
}