Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2013-08-27 22:00:28 +0400
committernulltoken <emeric.fermas@gmail.com>2013-08-27 22:14:07 +0400
commit191adce8751e728111a3b1c3e9b2c02fe9f5d775 (patch)
tree0d93d9df9aaca365ad0a9e20f27ab4f13a76143f /src/vector.c
parentc9ffa84bde45021c40623553822916fb3d13b20a (diff)
vector: Teach git_vector_uniq() to free while deduplicating
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/vector.c b/src/vector.c
index 5ba2fab18..362e7b0c0 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -220,7 +220,7 @@ void git_vector_pop(git_vector *v)
v->length--;
}
-void git_vector_uniq(git_vector *v)
+void git_vector_uniq(git_vector *v, void (*git_free_cb)(void *))
{
git_vector_cmp cmp;
size_t i, j;
@@ -232,9 +232,12 @@ void git_vector_uniq(git_vector *v)
cmp = v->_cmp ? v->_cmp : strict_comparison;
for (i = 0, j = 1 ; j < v->length; ++j)
- if (!cmp(v->contents[i], v->contents[j]))
+ if (!cmp(v->contents[i], v->contents[j])) {
+ if (git_free_cb)
+ git_free_cb(v->contents[i]);
+
v->contents[i] = v->contents[j];
- else
+ } else
v->contents[++i] = v->contents[j];
v->length -= j - i - 1;