summaryrefslogtreecommitdiff
path: root/match.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1999-01-05 06:43:59 +0000
committerAndrew Tridgell <tridge@samba.org>1999-01-05 06:43:59 +0000
commit536541d52b695ef9c949cc9a39ce2064cf9aa9e3 (patch)
tree3315c81f68d2d2e5e117846210df841e9d3a7043 /match.c
parent496d9272c1b3094e4a1c31273af5401bac1720c0 (diff)
downloadrsync-536541d52b695ef9c949cc9a39ce2064cf9aa9e3.tar.gz
moved the block length mismatch code to another part of the loop.
Diffstat (limited to 'match.c')
-rw-r--r--match.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/match.c b/match.c
index 613eaec8..7f3212c8 100644
--- a/match.c
+++ b/match.c
@@ -176,16 +176,19 @@ static void hash_search(int f,struct sum_struct *s,
sum = (s1 & 0xffff) | (s2 << 16);
tag_hits++;
for (; j<s->count && targets[j].t == t; j++) {
- int i = targets[j].i;
+ int l, i = targets[j].i;
- if (sum != s->sums[i].sum1 || s->sums[i].len > (len-offset)) continue;
+ if (sum != s->sums[i].sum1) continue;
+ /* also make sure the two blocks are the same length */
+ l = MIN(s->n,len-offset);
+ if (l != s->sums[i].len) continue;
+
if (verbose > 3)
rprintf(FINFO,"potential match at %d target=%d %d sum=%08x\n",
(int)offset,j,i,sum);
if (!done_csum2) {
- int l = MIN(s->n,len-offset);
map = (schar *)map_ptr(buf,offset,l);
get_checksum2((char *)map,l,sum2);
done_csum2 = 1;