Commit 01c64945 by Edward Thomson

hashsig: use GIT_ASSERT

parent 253a873b
...@@ -133,13 +133,13 @@ typedef struct { ...@@ -133,13 +133,13 @@ typedef struct {
uint8_t ignore_ch[256]; uint8_t ignore_ch[256];
} hashsig_in_progress; } hashsig_in_progress;
static void hashsig_in_progress_init( static int hashsig_in_progress_init(
hashsig_in_progress *prog, git_hashsig *sig) hashsig_in_progress *prog, git_hashsig *sig)
{ {
int i; int i;
/* no more than one can be set */ /* no more than one can be set */
assert(!(sig->opt & GIT_HASHSIG_IGNORE_WHITESPACE) || GIT_ASSERT(!(sig->opt & GIT_HASHSIG_IGNORE_WHITESPACE) ||
!(sig->opt & GIT_HASHSIG_SMART_WHITESPACE)); !(sig->opt & GIT_HASHSIG_SMART_WHITESPACE));
if (sig->opt & GIT_HASHSIG_IGNORE_WHITESPACE) { if (sig->opt & GIT_HASHSIG_IGNORE_WHITESPACE) {
...@@ -153,6 +153,8 @@ static void hashsig_in_progress_init( ...@@ -153,6 +153,8 @@ static void hashsig_in_progress_init(
} else { } else {
memset(prog, 0, sizeof(*prog)); memset(prog, 0, sizeof(*prog));
} }
return 0;
} }
static int hashsig_add_hashes( static int hashsig_add_hashes(
...@@ -251,7 +253,8 @@ int git_hashsig_create( ...@@ -251,7 +253,8 @@ int git_hashsig_create(
git_hashsig *sig = hashsig_alloc(opts); git_hashsig *sig = hashsig_alloc(opts);
GIT_ERROR_CHECK_ALLOC(sig); GIT_ERROR_CHECK_ALLOC(sig);
hashsig_in_progress_init(&prog, sig); if ((error = hashsig_in_progress_init(&prog, sig)) < 0)
return error;
error = hashsig_add_hashes(sig, (const uint8_t *)buf, buflen, &prog); error = hashsig_add_hashes(sig, (const uint8_t *)buf, buflen, &prog);
...@@ -283,7 +286,8 @@ int git_hashsig_create_fromfile( ...@@ -283,7 +286,8 @@ int git_hashsig_create_fromfile(
return fd; return fd;
} }
hashsig_in_progress_init(&prog, sig); if ((error = hashsig_in_progress_init(&prog, sig)) < 0)
return error;
while (!error) { while (!error) {
if ((buflen = p_read(fd, buf, sizeof(buf))) <= 0) { if ((buflen = p_read(fd, buf, sizeof(buf))) <= 0) {
...@@ -318,7 +322,7 @@ static int hashsig_heap_compare(const hashsig_heap *a, const hashsig_heap *b) ...@@ -318,7 +322,7 @@ static int hashsig_heap_compare(const hashsig_heap *a, const hashsig_heap *b)
{ {
int matches = 0, i, j, cmp; int matches = 0, i, j, cmp;
assert(a->cmp == b->cmp); GIT_ASSERT_WITH_RETVAL(a->cmp == b->cmp, 0);
/* hash heaps are sorted - just look for overlap vs total */ /* hash heaps are sorted - just look for overlap vs total */
...@@ -354,9 +358,16 @@ int git_hashsig_compare(const git_hashsig *a, const git_hashsig *b) ...@@ -354,9 +358,16 @@ int git_hashsig_compare(const git_hashsig *a, const git_hashsig *b)
/* if we have fewer than the maximum number of elements, then just use /* if we have fewer than the maximum number of elements, then just use
* one array since the two arrays will be the same * one array since the two arrays will be the same
*/ */
if (a->mins.size < HASHSIG_HEAP_SIZE) if (a->mins.size < HASHSIG_HEAP_SIZE) {
return hashsig_heap_compare(&a->mins, &b->mins); return hashsig_heap_compare(&a->mins, &b->mins);
else } else {
return (hashsig_heap_compare(&a->mins, &b->mins) + int mins, maxs;
hashsig_heap_compare(&a->maxs, &b->maxs)) / 2;
if ((mins = hashsig_heap_compare(&a->mins, &b->mins)) < 0)
return mins;
if ((maxs = hashsig_heap_compare(&a->maxs, &b->maxs)) < 0)
return maxs;
return (mins + maxs) / 2;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment