X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diffcore-delta.c;h=7338a40c5964ae6ddfb855465249fc1a2fa5a2a3;hb=7612a1efdb0c0806b43db10ce784707aae874340;hp=ceb35c3276579b22b379f0fe1ccaf2a4a76fc61a;hpb=d09a0a3cb862ead8bb7eec30439cb0eed41e91e3;p=git.git diff --git a/diffcore-delta.c b/diffcore-delta.c index ceb35c32..7338a40c 100644 --- a/diffcore-delta.c +++ b/diffcore-delta.c @@ -40,8 +40,8 @@ #define HASHBASE 107927 struct spanhash { - unsigned long hashval; - unsigned long cnt; + unsigned int hashval; + unsigned int cnt; }; struct spanhash_top { int alloc_log2; @@ -50,7 +50,7 @@ struct spanhash_top { }; static struct spanhash *spanhash_find(struct spanhash_top *top, - unsigned long hashval) + unsigned int hashval) { int sz = 1 << top->alloc_log2; int bucket = hashval & (sz - 1); @@ -99,7 +99,7 @@ static struct spanhash_top *spanhash_rehash(struct spanhash_top *orig) } static struct spanhash_top *add_spanhash(struct spanhash_top *top, - unsigned long hashval, int cnt) + unsigned int hashval, int cnt) { int bucket, lim; struct spanhash *h; @@ -125,10 +125,10 @@ static struct spanhash_top *add_spanhash(struct spanhash_top *top, } } -static struct spanhash_top *hash_chars(unsigned char *buf, unsigned long sz) +static struct spanhash_top *hash_chars(unsigned char *buf, unsigned int sz) { int i, n; - unsigned long accum1, accum2, hashval; + unsigned int accum1, accum2, hashval; struct spanhash_top *hash; i = INITIAL_HASH_SIZE; @@ -140,10 +140,11 @@ static struct spanhash_top *hash_chars(unsigned char *buf, unsigned long sz) n = 0; accum1 = accum2 = 0; while (sz) { - unsigned long c = *buf++; + unsigned int c = *buf++; + unsigned int old_1 = accum1; sz--; - accum1 = (accum1 << 7) | (accum2 >> 25); - accum2 = (accum2 << 7) | (accum1 >> 25); + accum1 = (accum1 << 7) ^ (accum2 >> 25); + accum2 = (accum2 << 7) ^ (old_1 >> 25); accum1 += c; if (++n < 64 && c != '\n') continue;