X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/41ba6938a478beadb9f1baf4f330d15e07132f68..c6e7fcb42bc87660ece8d4dc9a1b10bd1fb7b0c5:/match.c diff --git a/match.c b/match.c index f8a3607a..d7af159b 100644 --- a/match.c +++ b/match.c @@ -85,44 +85,27 @@ static void build_hash_table(struct sum_struct *s) } -static void send_match(int f,int i) -{ - static int matches[32]; - static int match_count=0; - - matches[match_count++] = i; - if (match_count == 32 || i==0) { - int i; - for (i=0;i 2) if (i != -1) - fprintf(stderr,"match at %d last_match=%d j=%d len=%d n=%d\n", + fprintf(FERROR,"match at %d last_match=%d j=%d len=%d n=%d\n", (int)offset,(int)last_match,i,(int)s->sums[i].len,n); - if (n > 0) { - int l = 0; - write_int(f,n); - while (l < n) { - int n1 = MIN(CHUNK_SIZE,n-l); - write_buf(f,map_ptr(buf,last_match+l,n1),n1); - l += n1; - } - data_transfer += n; - } - send_match(f,-(i+1)); + send_token(f,i,buf,last_match,n); + + data_transfer += n; + + if (i != -1) + last_match = offset + s->sums[i].len; + if (i != -1) last_match = offset + s->sums[i].len; if (n > 0) @@ -130,7 +113,8 @@ static void matched(int f,struct sum_struct *s,char *buf,off_t len, } -static void hash_search(int f,struct sum_struct *s,char *buf,off_t len) +static void hash_search(int f,struct sum_struct *s, + struct map_struct *buf,off_t len) { int offset,j,k; int end; @@ -139,7 +123,7 @@ static void hash_search(int f,struct sum_struct *s,char *buf,off_t len) char *map; if (verbose > 2) - fprintf(stderr,"hash search b=%d len=%d\n",s->n,(int)len); + fprintf(FERROR,"hash search b=%d len=%d\n",s->n,(int)len); k = MIN(len, s->n); @@ -149,21 +133,21 @@ static void hash_search(int f,struct sum_struct *s,char *buf,off_t len) s1 = sum & 0xFFFF; s2 = sum >> 16; if (verbose > 3) - fprintf(stderr, "sum=%.8x k=%d\n", sum, k); + fprintf(FERROR, "sum=%.8x k=%d\n", sum, k); offset = 0; end = len + 1 - s->sums[s->count-1].len; if (verbose > 3) - fprintf(stderr,"hash search s->n=%d len=%d count=%d\n", + fprintf(FERROR,"hash search s->n=%d len=%d count=%d\n", s->n,(int)len,s->count); do { tag t = gettag2(s1,s2); j = tag_table[t]; if (verbose > 4) - fprintf(stderr,"offset=%d sum=%08x\n", + fprintf(FERROR,"offset=%d sum=%08x\n", offset,sum); if (j != NULL_TAG) { @@ -176,7 +160,7 @@ static void hash_search(int f,struct sum_struct *s,char *buf,off_t len) if (sum == s->sums[i].sum1) { if (verbose > 3) - fprintf(stderr,"potential match at %d target=%d %d sum=%08x\n", + fprintf(FERROR,"potential match at %d target=%d %d sum=%08x\n", offset,j,i,sum); if (!done_csum2) { @@ -222,7 +206,7 @@ static void hash_search(int f,struct sum_struct *s,char *buf,off_t len) } -void match_sums(int f,struct sum_struct *s,char *buf,off_t len) +void match_sums(int f,struct sum_struct *s,struct map_struct *buf,off_t len) { last_match = 0; false_alarms = 0; @@ -234,12 +218,12 @@ void match_sums(int f,struct sum_struct *s,char *buf,off_t len) build_hash_table(s); if (verbose > 2) - fprintf(stderr,"built hash table\n"); + fprintf(FERROR,"built hash table\n"); hash_search(f,s,buf,len); if (verbose > 2) - fprintf(stderr,"done hash search\n"); + fprintf(FERROR,"done hash search\n"); } else { matched(f,s,buf,len,len,-1); } @@ -250,7 +234,7 @@ void match_sums(int f,struct sum_struct *s,char *buf,off_t len) } if (verbose > 2) - fprintf(stderr, "false_alarms=%d tag_hits=%d matches=%d\n", + fprintf(FERROR, "false_alarms=%d tag_hits=%d matches=%d\n", false_alarms, tag_hits, matches); total_tag_hits += tag_hits; @@ -264,7 +248,7 @@ void match_report(void) if (verbose <= 1) return; - fprintf(am_server?stderr:stdout, + fprintf(FINFO, "total: matches=%d tag_hits=%d false_alarms=%d data=%d\n", total_matches,total_tag_hits, total_false_alarms,total_data_transfer);