summaryrefslogtreecommitdiff
path: root/src/vector.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c14
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)