diff options
author | Vicent Marti <tanoku@gmail.com> | 2010-05-23 17:12:28 +0200 |
---|---|---|
committer | Andreas Ericsson <ae@op5.se> | 2010-06-02 10:32:07 +0200 |
commit | 9bdb75947178f72df30314d66bc9bcc90df643d7 (patch) | |
tree | 0c51be2c8e9c40f947c9527b1c633c78c3d56e0b /src/revobject.c | |
parent | 655d381a1948783d7d26ff9ec5ef54ed6bbefb29 (diff) | |
download | libgit2-9bdb75947178f72df30314d66bc9bcc90df643d7.tar.gz |
Properly reset all commit properties when doing a gitrp_reset().
Add git_revpool_table_free() method.
Signed-off-by: Vicent Marti <tanoku@gmail.com>
Signed-off-by: Andreas Ericsson <ae@op5.se>
Diffstat (limited to 'src/revobject.c')
-rw-r--r-- | src/revobject.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/revobject.c b/src/revobject.c index c6736542f..45fb97389 100644 --- a/src/revobject.c +++ b/src/revobject.c @@ -177,5 +177,48 @@ void git_revpool_table_resize(git_revpool_table *table) void git_revpool_table_free(git_revpool_table *table) { + int index; + for (index = 0; index <= table->size_mask; ++index) + { + git_revpool_node *node, *next_node; + + node = table->nodes[index]; + while (node != NULL) + { + next_node = node->next; + free(node); + node = next_node; + } + } + + free(table); +} + +void git_revpool_tableit_init(git_revpool_table *table, git_revpool_tableit *it) +{ + memset(it, 0x0, sizeof(git_revpool_tableit)); + + it->nodes = table->nodes; + it->current_node = NULL; + it->current_pos = 0; + it->size = table->size_mask + 1; +} + +git_revpool_object *git_revpool_tableit_next(git_revpool_tableit *it) +{ + git_revpool_node *next = NULL; + + while (it->current_node == NULL) + { + if (it->current_pos >= it->size) + return NULL; + + it->current_node = it->nodes[it->current_pos++]; + } + + next = it->current_node; + it->current_node = it->current_node->next; + + return next->object; } |