X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/ebb0a6f61826aeaba0aeb1866df41dee8b7c7269..ce2ac5ac3ff1f4e3a14eb9b316de6804ca747181:/match.c diff --git a/match.c b/match.c index e15f4401..a353c83b 100644 --- a/match.c +++ b/match.c @@ -123,28 +123,6 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf, } -static inline char *window_ptr(struct map_struct *buf,int off,int len) -{ - static char *p=NULL; - static int p_len = 0; - static int p_off = 0; - - if (off == 0) { - p_off = 0; - p_len = CHUNK_SIZE; - p = map_ptr(buf,p_off,p_len); - } - - while (off+len > p_off+p_len) { - p_off += CHUNK_SIZE; - p_len = CHUNK_SIZE; - p = map_ptr(buf,p_off,p_len); - } - - return(p + (off-p_off)); -} - - static void hash_search(int f,struct sum_struct *s, struct map_struct *buf,off_t len) { @@ -152,16 +130,16 @@ static void hash_search(int f,struct sum_struct *s, int end; char sum2[SUM_LENGTH]; uint32 s1, s2, sum; - char *map; + signed char *map; if (verbose > 2) fprintf(FERROR,"hash search b=%d len=%d\n",s->n,(int)len); k = MIN(len, s->n); - map = window_ptr(buf,0,k); + map = (signed char *)map_ptr(buf,0,k); - sum = get_checksum1(map, k); + sum = get_checksum1((char *)map, k); s1 = sum & 0xFFFF; s2 = sum >> 16; if (verbose > 3) @@ -197,16 +175,16 @@ static void hash_search(int f,struct sum_struct *s, if (!done_csum2) { int l = MIN(s->n,len-offset); - map = window_ptr(buf,offset,l); - get_checksum2(map,l,sum2); + map = (signed char *)map_ptr(buf,offset,l); + get_checksum2((char *)map,l,sum2); done_csum2 = 1; } if (memcmp(sum2,s->sums[i].sum2,csum_length) == 0) { matched(f,s,buf,len,offset,i); offset += s->sums[i].len - 1; k = MIN((len-offset), s->n); - map = window_ptr(buf,offset,k); - sum = get_checksum1(map, k); + map = (signed char *)map_ptr(buf,offset,k); + sum = get_checksum1((char *)map, k); s1 = sum & 0xFFFF; s2 = sum >> 16; ++matches; @@ -220,13 +198,13 @@ static void hash_search(int f,struct sum_struct *s, } /* Trim off the first byte from the checksum */ - map = window_ptr(buf,offset,k+1); - s1 -= map[0] + 1; - s2 -= k * (map[0]+1); + map = (signed char *)map_ptr(buf,offset,k+1); + s1 -= map[0] + CHAR_OFFSET; + s2 -= k * (map[0]+CHAR_OFFSET); /* Add on the next byte (if there is one) to the checksum */ if (k < (len-offset)) { - s1 += (map[k]+1); + s1 += (map[k]+CHAR_OFFSET); s2 += s1; } else { --k; @@ -235,7 +213,7 @@ static void hash_search(int f,struct sum_struct *s, } while (++offset < end); matched(f,s,buf,len,len,-1); - window_ptr(buf,len-1,1); + map_ptr(buf,len-1,1); }