rprintf(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);
+ send_token(f,i,buf,last_match,n,i<0?0:s->sums[i].len);
data_transfer += n;
if (n > 0)
char sum2[SUM_LENGTH];
uint32 s1, s2, sum;
schar *map;
+ extern int do_compression;
if (verbose > 2)
rprintf(FINFO,"hash search b=%d len=%d\n",s->n,(int)len);
} else {
--k;
}
-
+
+ if (!do_compression) {
+ /* By matching early we avoid re-reading the
+ data 3 times in the case where a token
+ match comes a long way after last
+ match. The 3 reads are caused by the
+ running match, the checksum update and the
+ literal send.
+
+ we don't enable this for the compressed
+ case yet as the deflated token code can't
+ handle it. Paul is working on it */
+ if (offset-last_match >= CHUNK_SIZE+s->n &&
+ (end-offset > CHUNK_SIZE)) {
+ matched(f,s,buf,offset - s->n, -2);
+ }
+ }
} while (++offset < end);
matched(f,s,buf,len,-1);
/* non-compressing send token */
static void simple_send_token(int f,int token,
- struct map_struct *buf,int offset,int n)
+ struct map_struct *buf,OFF_T offset,int n)
{
if (n > 0) {
int l = 0;
l += n1;
}
}
- write_int(f,-(token+1));
+ /* a -2 token means to send data only and no token */
+ if (token != -2) {
+ write_int(f,-(token+1));
+ }
}
/* Send a deflated token */
static void
send_deflated_token(int f, int token,
- struct map_struct *buf, int offset, int nb, int toklen)
+ struct map_struct *buf, OFF_T offset, int nb, int toklen)
{
int n, r;
static int init_done;
* If token == -1 then we have reached EOF
* If n == 0 then don't send a buffer
*/
-void send_token(int f,int token,struct map_struct *buf,int offset,
+void send_token(int f,int token,struct map_struct *buf,OFF_T offset,
int n,int toklen)
{
if (!do_compression) {