Alas, this time we could not keep the same prototype :) Signed-off-by: Yann Dirson <ydirson@xxxxxxxxxx> --- diffcore-rename.c | 53 ++++++++++++++++------------------------------------- 1 files changed, 16 insertions(+), 37 deletions(-) diff --git a/diffcore-rename.c b/diffcore-rename.c index 72a9b94..ec40cf7 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -30,46 +30,25 @@ declare_sorted_array(static, struct diff_rename_dst, rename_dst, rename_dst_cmp, rename_dst_init) /* Table of rename/copy src files */ -static struct diff_rename_src { + +struct diff_rename_src { struct diff_filespec *one; unsigned short score; /* to remember the break score */ -} *rename_src; -static int rename_src_nr, rename_src_alloc; +}; -static struct diff_rename_src *register_rename_src(struct diff_filespec *one, - unsigned short score) +static int rename_src_cmp(void* data, struct diff_rename_src *elem) { - int first, last; - - first = 0; - last = rename_src_nr; - while (last > first) { - int next = (last + first) >> 1; - struct diff_rename_src *src = &(rename_src[next]); - int cmp = strcmp(one->path, src->one->path); - if (!cmp) - return src; - if (cmp < 0) { - last = next; - continue; - } - first = next+1; - } - - /* insert to make it at "first" */ - if (rename_src_alloc <= rename_src_nr) { - rename_src_alloc = alloc_nr(rename_src_alloc); - rename_src = xrealloc(rename_src, - rename_src_alloc * sizeof(*rename_src)); - } - rename_src_nr++; - if (first < rename_src_nr) - memmove(rename_src + first + 1, rename_src + first, - (rename_src_nr - first - 1) * sizeof(*rename_src)); - rename_src[first].one = one; - rename_src[first].score = score; - return &(rename_src[first]); + struct diff_filepair *p = data; + return strcmp(p->one->path, elem->one->path); +} +static void rename_src_init(struct diff_rename_src *elem, void* data) +{ + struct diff_filepair *p = data; + elem->one = p->one; + elem->score = p->score; } +declare_sorted_array(static, struct diff_rename_src, rename_src, + rename_src_cmp, rename_src_init) static int basename_same(struct diff_filespec *src, struct diff_filespec *dst) { @@ -426,7 +405,7 @@ void diffcore_rename(struct diff_options *options) */ if (p->broken_pair && !p->score) p->one->rename_used++; - register_rename_src(p->one, p->score); + locate_rename_src(p, 1); } else if (detect_rename == DIFF_DETECT_COPY) { /* @@ -434,7 +413,7 @@ void diffcore_rename(struct diff_options *options) * one, to indicate ourselves as a user. */ p->one->rename_used++; - register_rename_src(p->one, p->score); + locate_rename_src(p, 1); } } if (rename_dst_nr == 0 || rename_src_nr == 0) -- 1.7.2.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html