]> git.proxmox.com Git - libgit2.git/blobdiff - src/tsort.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / src / tsort.c
index 97473be91cdb26deca90ba3541a0d954d6efd14a..045efad23f6d09b65988192c8ae677fa9812b1b5 100644 (file)
 #endif
 
 static int binsearch(
-       void **dst, const void *x, size_t size, git__tsort_r_cmp cmp, void *payload)
+       void **dst, const void *x, size_t size, git__sort_r_cmp cmp, void *payload)
 {
        int l, c, r;
        void *lx, *cx;
 
-       assert(size > 0);
-
        l = 0;
        r = (int)size - 1;
        c = r >> 1;
@@ -71,7 +69,7 @@ static int binsearch(
 
 /* Binary insertion sort, but knowing that the first "start" entries are sorted. Used in timsort. */
 static void bisort(
-       void **dst, size_t start, size_t size, git__tsort_r_cmp cmp, void *payload)
+       void **dst, size_t start, size_t size, git__sort_r_cmp cmp, void *payload)
 {
        size_t i;
        void *x;
@@ -102,7 +100,7 @@ struct tsort_run {
 
 struct tsort_store {
        size_t alloc;
-       git__tsort_r_cmp cmp;
+       git__sort_r_cmp cmp;
        void *payload;
        void **storage;
 };
@@ -184,7 +182,9 @@ static int check_invariant(struct tsort_run *stack, ssize_t stack_curr)
 static int resize(struct tsort_store *store, size_t new_size)
 {
        if (store->alloc < new_size) {
-               void **tempstore = git__realloc(store->storage, new_size * sizeof(void *));
+               void **tempstore;
+
+               tempstore = git__reallocarray(store->storage, new_size, sizeof(void *));
 
                /**
                 * Do not propagate on OOM; this will abort the sort and
@@ -308,7 +308,6 @@ static ssize_t collapse(void **dst, struct tsort_run *stack, ssize_t stack_curr,
 #define PUSH_NEXT() do {\
        len = count_run(dst, curr, size, store);\
        run = minrun;\
-       if (run < minrun) run = minrun;\
        if (run > (ssize_t)size - curr) run = size - curr;\
        if (run > len) {\
                bisort(&dst[curr], len, run, cmp, payload);\
@@ -334,7 +333,7 @@ static ssize_t collapse(void **dst, struct tsort_run *stack, ssize_t stack_curr,
 while (0)
 
 void git__tsort_r(
-       void **dst, size_t size, git__tsort_r_cmp cmp, void *payload)
+       void **dst, size_t size, git__sort_r_cmp cmp, void *payload)
 {
        struct tsort_store _store, *store = &_store;
        struct tsort_run run_stack[128];