summaryrefslogtreecommitdiff
path: root/token.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2005-01-02 00:55:55 +0000
committerWayne Davison <wayned@samba.org>2005-01-02 00:55:55 +0000
commit5b7bcac26081ae72da6c5d2e6d8247de17f36b93 (patch)
tree6e3301b984029bbd1ec15a1ce3569a17a1002c97 /token.c
parent7fcbf9e43e05c7c8fad4771b7cf8ac9c6ddc655a (diff)
downloadrsync-5b7bcac26081ae72da6c5d2e6d8247de17f36b93.tar.gz
rsync-5b7bcac26081ae72da6c5d2e6d8247de17f36b93.tar.bz2
rsync-5b7bcac26081ae72da6c5d2e6d8247de17f36b93.zip
In send_deflated_token(), the section that handles "token != -2"
now breaks up the calls to deflate() into CHUNK_SIZE chunks, just like the other sections of the code.
Diffstat (limited to 'token.c')
-rw-r--r--token.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/token.c b/token.c
index 862af0f0..201862e4 100644
--- a/token.c
+++ b/token.c
@@ -262,19 +262,22 @@ send_deflated_token(int f, int token, struct map_struct *buf, OFF_T offset,
} else if (token != -2) {
/* add the data in the current block to the compressor's
history and hash table */
- tx_strm.next_in = (Bytef *) map_ptr(buf, offset, toklen);
- tx_strm.avail_in = toklen;
do {
+ n = MIN(toklen, CHUNK_SIZE);
+ tx_strm.next_in = (Bytef *) map_ptr(buf, offset, n);
+ tx_strm.avail_in = n;
tx_strm.next_out = (Bytef *)obuf;
tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE);
r = deflate(&tx_strm, Z_INSERT_ONLY);
- if (r != Z_OK) {
+ if (r != Z_OK || tx_strm.avail_in != 0) {
rprintf(FERROR,
"deflate on token returned %d (%d bytes left)\n",
r, tx_strm.avail_in);
exit_cleanup(RERR_STREAMIO);
}
- } while (tx_strm.avail_in != 0);
+ toklen -= n;
+ offset += n;
+ } while (toklen);
}
}