added support for 64 bit file offsets under Solaris 2.6. Not tested
[rsync/rsync.git] / match.c
diff --git a/match.c b/match.c
index 86f4b3e..dda156f 100644 (file)
--- a/match.c
+++ b/match.c
@@ -36,10 +36,10 @@ static int tag_hits;
 static int matches;
 static int data_transfer;
 
-static int total_false_alarms=0;
-static int total_tag_hits=0;
-static int total_matches=0;
-static int total_data_transfer=0;
+static int total_false_alarms;
+static int total_tag_hits;
+static int total_matches;
+static int64 total_data_transfer;
 
 
 struct target {
@@ -47,16 +47,16 @@ struct target {
   int i;
 };
 
-static struct target *targets=NULL;
+static struct target *targets;
 
-static tag *tag_table = NULL;
+static tag *tag_table;
 
 #define gettag2(s1,s2) (((s1) + (s2)) & 0xFFFF)
 #define gettag(sum) gettag2((sum)&0xFFFF,(sum)>>16)
 
 static int compare_targets(struct target *t1,struct target *t2)
 {
-  return(t1->t - t2->t);
+  return((int)t1->t - (int)t2->t);
 }
 
 
@@ -87,17 +87,17 @@ static void build_hash_table(struct sum_struct *s)
 }
 
 
-static off_t last_match;
+static OFF_T last_match;
 
 
 static void matched(int f,struct sum_struct *s,struct map_struct *buf,
-                   off_t offset,int i)
+                   OFF_T offset,int i)
 {
-       off_t n = offset - last_match;
+       OFF_T n = offset - last_match;
        int j;
 
-       if (verbose > 2 && i != -1)
-               fprintf(FERROR,"match at %d last_match=%d j=%d len=%d n=%d\n",
+       if (verbose > 2 && i >= 0)
+               fprintf(FINFO,"match at %d last_match=%d j=%d len=%d n=%d\n",
                        (int)offset,(int)last_match,i,(int)s->sums[i].len,(int)n);
 
        send_token(f,i,buf,last_match,n,i==-1?0:s->sums[i].len);
@@ -106,7 +106,7 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf,
        if (n > 0)
                write_flush(f);
 
-       if (i != -1)
+       if (i >= 0)
                n += s->sums[i].len;
   
        for (j=0;j<n;j+=CHUNK_SIZE) {
@@ -115,15 +115,17 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf,
        }
 
 
-       if (i != -1)
+       if (i >= 0)
                last_match = offset + s->sums[i].len;
+       else
+               last_match = offset;
 }
 
 
 static void hash_search(int f,struct sum_struct *s,
-                       struct map_struct *buf,off_t len)
+                       struct map_struct *buf,OFF_T len)
 {
-       off_t offset;
+       OFF_T offset;
        int j,k;
        int end;
        char sum2[SUM_LENGTH];
@@ -131,7 +133,7 @@ static void hash_search(int f,struct sum_struct *s,
        signed char *map;
 
        if (verbose > 2)
-               fprintf(FERROR,"hash search b=%d len=%d\n",s->n,(int)len);
+               fprintf(FINFO,"hash search b=%d len=%d\n",s->n,(int)len);
 
        k = MIN(len, s->n);
        
@@ -141,14 +143,14 @@ static void hash_search(int f,struct sum_struct *s,
        s1 = sum & 0xFFFF;
        s2 = sum >> 16;
        if (verbose > 3)
-               fprintf(FERROR, "sum=%.8x k=%d\n", sum, k);
+               fprintf(FINFO, "sum=%.8x k=%d\n", sum, k);
        
        offset = 0;
        
        end = len + 1 - s->sums[s->count-1].len;
        
        if (verbose > 3)
-               fprintf(FERROR,"hash search s->n=%d len=%d count=%d\n",
+               fprintf(FINFO,"hash search s->n=%d len=%d count=%d\n",
                        s->n,(int)len,s->count);
        
        do {
@@ -157,7 +159,7 @@ static void hash_search(int f,struct sum_struct *s,
                        
                j = tag_table[t];
                if (verbose > 4)
-                       fprintf(FERROR,"offset=%d sum=%08x\n",(int)offset,sum);
+                       fprintf(FINFO,"offset=%d sum=%08x\n",(int)offset,sum);
                
                if (j == NULL_TAG) {
                        goto null_tag;
@@ -171,7 +173,7 @@ static void hash_search(int f,struct sum_struct *s,
                        if (sum != s->sums[i].sum1) continue;
                        
                        if (verbose > 3)
-                               fprintf(FERROR,"potential match at %d target=%d %d sum=%08x\n",
+                               fprintf(FINFO,"potential match at %d target=%d %d sum=%08x\n",
                                        (int)offset,j,i,sum);
                        
                        if (!done_csum2) {
@@ -218,7 +220,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)
+void match_sums(int f,struct sum_struct *s,struct map_struct *buf,OFF_T len)
 {
        char file_sum[MD4_SUM_LENGTH];
 
@@ -234,12 +236,12 @@ void match_sums(int f,struct sum_struct *s,struct map_struct *buf,off_t len)
                build_hash_table(s);
                
                if (verbose > 2) 
-                       fprintf(FERROR,"built hash table\n");
+                       fprintf(FINFO,"built hash table\n");
                
                hash_search(f,s,buf,len);
                
                if (verbose > 2) 
-                       fprintf(FERROR,"done hash search\n");
+                       fprintf(FINFO,"done hash search\n");
        } else {
                matched(f,s,buf,len,-1);
        }
@@ -248,7 +250,7 @@ void match_sums(int f,struct sum_struct *s,struct map_struct *buf,off_t len)
 
        if (remote_version >= 14) {
                if (verbose > 2)
-                       fprintf(FERROR,"sending file_sum\n");
+                       fprintf(FINFO,"sending file_sum\n");
                write_buf(f,file_sum,MD4_SUM_LENGTH);
        }
 
@@ -258,7 +260,7 @@ void match_sums(int f,struct sum_struct *s,struct map_struct *buf,off_t len)
        }
        
        if (verbose > 2)
-               fprintf(FERROR, "false_alarms=%d tag_hits=%d matches=%d\n",
+               fprintf(FINFO, "false_alarms=%d tag_hits=%d matches=%d\n",
                        false_alarms, tag_hits, matches);
        
        total_tag_hits += tag_hits;
@@ -273,7 +275,7 @@ void match_report(void)
                return;
 
        fprintf(FINFO,
-               "total: matches=%d  tag_hits=%d  false_alarms=%d  data=%d\n",
+               "total: matches=%d  tag_hits=%d  false_alarms=%d  data=%ld\n",
                total_matches,total_tag_hits,
-               total_false_alarms,total_data_transfer);
+               total_false_alarms,(long)total_data_transfer);
 }