/* non-compressing recv token */
static int32 simple_recv_token(int f, char **data)
{
- static int residue;
+ static int32 residue;
static char *buf;
int32 n;
/* non-compressing send token */
-static void simple_send_token(int f, int token, struct map_struct *buf,
+static void simple_send_token(int f, int32 token, struct map_struct *buf,
OFF_T offset, int32 n)
{
if (n > 0) {
#define AVAIL_OUT_SIZE(avail_in_size) ((avail_in_size)*1001/1000+16)
/* For coding runs of tokens */
-static int last_token = -1;
-static int run_start;
-static int last_run_end;
+static int32 last_token = -1;
+static int32 run_start;
+static int32 last_run_end;
/* Deflation state */
static z_stream tx_strm;
/* Send a deflated token */
static void
-send_deflated_token(int f, int token, struct map_struct *buf, OFF_T offset,
+send_deflated_token(int f, int32 token, struct map_struct *buf, OFF_T offset,
int32 nb, int32 toklen)
{
int32 n, r;
/* end of file - clean up */
write_byte(f, END_FLAG);
} 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;
- 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 || 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);
- }
+ /* Add the data in the current block to the compressor's
+ * history and hash table. */
+ do {
+ /* Break up long sections in the same way that
+ * see_deflate_token() does. */
+ int32 n1 = toklen > 0xffff ? 0xffff : toklen;
+ toklen -= n1;
+ tx_strm.next_in = (Bytef *)map_ptr(buf, offset, n1);
+ tx_strm.avail_in = n1;
+ 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 || 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 (toklen > 0);
}
}
static int32 recv_deflated_token(int f, char **data)
{
static int init_done;
- static int saved_flag;
- int r, flag;
- int32 n;
+ static int32 saved_flag;
+ int32 n, flag;
+ int r;
for (;;) {
switch (recv_state) {
*/
static void see_deflate_token(char *buf, int32 len)
{
- int r, blklen;
+ int r;
+ int32 blklen;
unsigned char hdr[5];
rx_strm.avail_in = 0;
* 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, OFF_T offset,
+void send_token(int f, int32 token, struct map_struct *buf, OFF_T offset,
int32 n, int32 toklen)
{
if (!do_compression)