From 100e5241b067bdc54457f5b6b28d8a1bcdedcf05 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 3 Jun 1998 02:47:52 +0000 Subject: [PATCH] the tag table should be of type int* not tag*. This bug resulted in rsync being much less efficient that it could be for files with more than 64k blocks. With the adaptive block size code giving a maximum block size of 16k this means that files larger than 1GB were handled very inefficiently. The transfer was still accurate, just slow. --- match.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/match.c b/match.c index 719961da..272025aa 100644 --- a/match.c +++ b/match.c @@ -29,7 +29,7 @@ extern int remote_version; typedef unsigned short tag; #define TABLESIZE (1<<16) -#define NULL_TAG ((tag)-1) +#define NULL_TAG (-1) static int false_alarms; static int tag_hits; @@ -49,7 +49,7 @@ struct target { static struct target *targets; -static tag *tag_table; +static int *tag_table; #define gettag2(s1,s2) (((s1) + (s2)) & 0xFFFF) #define gettag(sum) gettag2((sum)&0xFFFF,(sum)>>16) @@ -65,7 +65,7 @@ static void build_hash_table(struct sum_struct *s) int i; if (!tag_table) - tag_table = (tag *)malloc(sizeof(tag)*TABLESIZE); + tag_table = (int *)malloc(sizeof(tag_table[0])*TABLESIZE); targets = (struct target *)malloc(sizeof(targets[0])*s->count); if (!tag_table || !targets) -- 2.34.1