mirror of
https://github.com/git/git.git
synced 2025-03-15 15:11:04 +00:00
sort_ref_dir(): simplify logic
Use the more usual indexing idiom for clarity. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d3177275ed
commit
81a79d8e27
21
refs.c
21
refs.c
@ -227,11 +227,13 @@ static int is_dup_ref(const struct ref_entry *ref1, const struct ref_entry *ref2
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sort the entries in dir (if they are not already sorted).
|
* Sort the entries in dir (if they are not already sorted)
|
||||||
|
* and remove any duplicate entries.
|
||||||
*/
|
*/
|
||||||
static void sort_ref_dir(struct ref_dir *dir)
|
static void sort_ref_dir(struct ref_dir *dir)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
struct ref_entry *last = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This check also prevents passing a zero-length array to qsort(),
|
* This check also prevents passing a zero-length array to qsort(),
|
||||||
@ -242,16 +244,15 @@ static void sort_ref_dir(struct ref_dir *dir)
|
|||||||
|
|
||||||
qsort(dir->entries, dir->nr, sizeof(*dir->entries), ref_entry_cmp);
|
qsort(dir->entries, dir->nr, sizeof(*dir->entries), ref_entry_cmp);
|
||||||
|
|
||||||
/* Remove any duplicates from the ref_dir */
|
/* Remove any duplicates: */
|
||||||
i = 0;
|
for (i = 0, j = 0; j < dir->nr; j++) {
|
||||||
for (j = 1; j < dir->nr; j++) {
|
struct ref_entry *entry = dir->entries[j];
|
||||||
if (is_dup_ref(dir->entries[i], dir->entries[j])) {
|
if (last && is_dup_ref(last, entry))
|
||||||
free_ref_entry(dir->entries[j]);
|
free_ref_entry(entry);
|
||||||
continue;
|
else
|
||||||
|
last = dir->entries[i++] = entry;
|
||||||
}
|
}
|
||||||
dir->entries[++i] = dir->entries[j];
|
dir->sorted = dir->nr = i;
|
||||||
}
|
|
||||||
dir->sorted = dir->nr = i + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DO_FOR_EACH_INCLUDE_BROKEN 01
|
#define DO_FOR_EACH_INCLUDE_BROKEN 01
|
||||||
|
Loading…
x
Reference in New Issue
Block a user