diff options
author | Vicent Marti <tanoku@gmail.com> | 2011-02-28 16:51:17 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-03-03 20:23:52 +0200 |
commit | 48c27f86bbe9678c7e01a90a2cec7a30327b0e90 (patch) | |
tree | 0156ea823de82477792ad4778378200eee28aee3 /src/vector.c | |
parent | 86d7e1ca6f54161a9e4d1ebe7a2f8e4802dc9639 (diff) | |
download | libgit2-48c27f86bbe9678c7e01a90a2cec7a30327b0e90.tar.gz |
Implement reference counting for git_objects
All `git_object` instances looked up from the repository are reference
counted. User is expected to use the new `git_object_close` when an
object is no longer needed to force freeing it.
Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'src/vector.c')
-rw-r--r-- | src/vector.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/vector.c b/src/vector.c index 126aec1bb..631364031 100644 --- a/src/vector.c +++ b/src/vector.c @@ -104,6 +104,10 @@ int git_vector_bsearch2(git_vector *v, git_vector_cmp key_lookup, const void *ke assert(v && key && key_lookup); + /* need comparison function to sort the vector */ + if (v->_cmp == NULL) + return GIT_ENOTFOUND; + git_vector_sort(v); find = bsearch(key, v->contents, v->length, sizeof(void *), key_lookup); @@ -127,12 +131,14 @@ int git_vector_search2(git_vector *v, git_vector_cmp key_lookup, const void *key return GIT_ENOTFOUND; } -int git_vector_search(git_vector *v, const void *key) +static int strict_comparison(const void *a, const void *b) { - if (v->_cmp == NULL) - return GIT_ENOTFOUND; + return a - b; +} - return git_vector_search2(v, v->_cmp, key); +int git_vector_search(git_vector *v, const void *entry) +{ + return git_vector_search2(v, v->_cmp ? v->_cmp : strict_comparison, entry); } int git_vector_bsearch(git_vector *v, const void *key) |