X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=oid-array.c;h=8e1bcedc0cb56a11a4cb6d27d33b33ed39b02bfe;hb=1b5b8cf072491e0a43e668c685b782efce9a6f0f;hp=8657a5cedfa68cbc3711d4b288e514978ff5b6df;hpb=1ea1f93fd9c6d299cbb94f74f0a1d80cb481a449;p=thirdparty%2Fgit.git diff --git a/oid-array.c b/oid-array.c index 8657a5cedf..8e1bcedc0c 100644 --- a/oid-array.c +++ b/oid-array.c @@ -14,8 +14,10 @@ static int void_hashcmp(const void *a, const void *b) return oidcmp(a, b); } -static void oid_array_sort(struct oid_array *array) +void oid_array_sort(struct oid_array *array) { + if (array->sorted) + return; QSORT(array->oid, array->nr, void_hashcmp); array->sorted = 1; } @@ -28,8 +30,7 @@ static const unsigned char *sha1_access(size_t index, void *table) int oid_array_lookup(struct oid_array *array, const struct object_id *oid) { - if (!array->sorted) - oid_array_sort(array); + oid_array_sort(array); return sha1_pos(oid->hash, array->oid, array->nr, sha1_access); } @@ -64,14 +65,10 @@ int oid_array_for_each_unique(struct oid_array *array, { size_t i; - if (!array->sorted) - oid_array_sort(array); + oid_array_sort(array); - for (i = 0; i < array->nr; i++) { - int ret; - if (i > 0 && oideq(array->oid + i, array->oid + i - 1)) - continue; - ret = fn(array->oid + i, data); + for (i = 0; i < array->nr; i = oid_array_next_unique(array, i)) { + int ret = fn(array->oid + i, data); if (ret) return ret; }