Fix copyright.
[rsync/rsync.git] / match.c
diff --git a/match.c b/match.c
index 86a04be..ee8e565 100644 (file)
--- a/match.c
+++ b/match.c
@@ -71,7 +71,7 @@ static void build_hash_table(struct sum_struct *s)
   if (!tag_table || !targets) 
     out_of_memory("build_hash_table");
 
-  for (i=0;i<s->count;i++) {
+  for (i=0;i<(int) s->count;i++) {
     targets[i].i = i;
     targets[i].t = gettag(s->sums[i].sum1);
   }
@@ -119,10 +119,11 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf,
        else
                last_match = offset;
 
-       if (buf)
+       if (buf) {
                show_progress(last_match, buf->file_size);
 
-       if (i == -1) end_progress();
+               if (i == -1) end_progress(buf->file_size);
+       }
 }
 
 
@@ -174,7 +175,7 @@ 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++) {
+               for (; j < (int) s->count && targets[j].t == t; j++) {
                        int l, i = targets[j].i;
                        
                        if (sum != s->sums[i].sum1) continue;
@@ -200,7 +201,7 @@ 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++) {
+                       for (j++; j < (int) s->count && targets[j].t == t; j++) {
                                int i2 = targets[j].i;
                                if (i2 == last_i + 1) {
                                        if (sum != s->sums[i2].sum1) break;
@@ -245,7 +246,8 @@ static void hash_search(int f,struct sum_struct *s,
                   match. The 3 reads are caused by the
                   running match, the checksum update and the
                   literal send. */
-               if (offset-last_match >= CHUNK_SIZE+s->n && 
+               if (offset > last_match &&
+                   offset-last_match >= CHUNK_SIZE+s->n && 
                    (end-offset > CHUNK_SIZE)) {
                        matched(f,s,buf,offset - s->n, -2);
                }
@@ -259,6 +261,7 @@ static void hash_search(int f,struct sum_struct *s,
 void match_sums(int f,struct sum_struct *s,struct map_struct *buf,OFF_T len)
 {
        char file_sum[MD4_SUM_LENGTH];
+       extern int write_batch;  /*  dw */
 
        last_match = 0;
        false_alarms = 0;
@@ -294,6 +297,8 @@ void match_sums(int f,struct sum_struct *s,struct map_struct *buf,OFF_T len)
                if (verbose > 2)
                        rprintf(FINFO,"sending file_sum\n");
                write_buf(f,file_sum,MD4_SUM_LENGTH);
+               if (write_batch) /* dw */
+                   write_batch_delta_file(file_sum, MD4_SUM_LENGTH);
        }
 
        if (targets) {