aboutsummaryrefslogtreecommitdiffstats
path: root/match.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2011-01-14 10:29:54 -0800
committerWayne Davison <wayned@samba.org>2011-01-14 15:37:48 -0800
commit58a1c1a218575ce80f8cd7f59526fa9047d7d0e6 (patch)
treeb69e3c1b7acfc3744c29531b85e7ab5acd418a39 /match.c
parent53e6507e1411f678ea19cde8133c22c331e396fb (diff)
downloadandroid_external_rsync-58a1c1a218575ce80f8cd7f59526fa9047d7d0e6.tar.gz
android_external_rsync-58a1c1a218575ce80f8cd7f59526fa9047d7d0e6.tar.bz2
android_external_rsync-58a1c1a218575ce80f8cd7f59526fa9047d7d0e6.zip
Make sure an alternate --inplace sum has the right length
and add missing break in --inplace same-offset loop.
Diffstat (limited to 'match.c')
-rw-r--r--match.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/match.c b/match.c
index 2c7b6164..407387fc 100644
--- a/match.c
+++ b/match.c
@@ -91,8 +91,7 @@ static void build_hash_table(struct sum_struct *s)
static OFF_T last_match;
-/**
- * Transmit a literal and/or match token.
+/* Transmit a literal and/or match token.
*
* This delightfully-named function is called either when we find a
* match and need to transmit all the unmatched data leading up to it,
@@ -100,9 +99,9 @@ static OFF_T last_match;
* transmit it. As a result of this second case, it is called even if
* we have not matched at all!
*
- * @param i If >0, the number of a matched token. If 0, indicates we
- * have only literal data.
- **/
+ * If i >= 0, the number of a matched token. If < 0, indicates we have
+ * only literal data. A -1 will send a 0-token-int too, and a -2 sends
+ * only literal data, w/o any token-int. */
static void matched(int f, struct sum_struct *s, struct map_struct *buf,
OFF_T offset, int32 i)
{
@@ -245,6 +244,7 @@ static void hash_search(int f,struct sum_struct *s,
continue;
if (i2 != i) {
if (sum != s->sums[i2].sum1
+ || l != s->sums[i2].len
|| memcmp(sum2, s->sums[i2].sum2, s->s2length) != 0)
break;
i = i2;
@@ -252,6 +252,7 @@ static void hash_search(int f,struct sum_struct *s,
/* This chunk remained in the same spot in the old and new file. */
s->sums[i].flags |= SUMFLG_SAME_OFFSET;
want_i = i;
+ break;
}
}
}