Optimized away a loop in hash_search().
[rsync/rsync.git] / match.c
diff --git a/match.c b/match.c
index 7bf2cf4..8470de0 100644 (file)
--- a/match.c
+++ b/match.c
@@ -22,6 +22,7 @@
 extern int verbose;
 extern int am_server;
 extern int do_progress;
+extern int checksum_seed;
 
 typedef unsigned short tag;
 
@@ -216,20 +217,13 @@ static void hash_search(int f,struct sum_struct *s,
 
                        /* we've found a match, but now check to see
                         * if last_i can hint at a better match */
-                       for (j++; j < s->count && targets[j].t == t; j++) {
-                               size_t i2 = targets[j].i;
-                               if (i2 == last_i + 1) {
-                                       if (sum != s->sums[i2].sum1)
-                                               break;
-                                       if (memcmp(sum2,s->sums[i2].sum2,s->s2length) != 0)
-                                               break;
-                                       /* we've found an adjacent match - the RLL coder
-                                        * will be happy */
-                                       i = i2;
-                                       break;
-                               }
+                       if (i != last_i + 1 && last_i + 1 < s->count
+                           && sum == s->sums[last_i+1].sum1
+                           && memcmp(sum2, s->sums[last_i+1].sum2, s->s2length) == 0) {
+                               /* we've found an adjacent match - the RLL coder
+                                * will be happy */
+                               i = last_i + 1;
                        }
-
                        last_i = i;
 
                        matched(f,s,buf,offset,i);
@@ -299,7 +293,7 @@ void match_sums(int f, struct sum_struct *s, struct map_struct *buf, OFF_T len)
        matches = 0;
        data_transfer = 0;
 
-       sum_init();
+       sum_init(checksum_seed);
 
        if (len > 0 && s->count>0) {
                build_hash_table(s);
@@ -322,6 +316,9 @@ void match_sums(int f, struct sum_struct *s, struct map_struct *buf, OFF_T len)
        }
 
        sum_end(file_sum);
+       /* If we had a read error, send a bad checksum. */
+       if (buf && buf->status != 0)
+               file_sum[0]++;
 
        if (verbose > 2)
                rprintf(FINFO,"sending file_sum\n");