version 1.1, 2012/02/17 15:09:30
|
version 1.1.1.3, 2016/11/01 09:54:32
|
Line 3
|
Line 3
|
* |
* |
* Copyright (C) 1996 Andrew Tridgell |
* Copyright (C) 1996 Andrew Tridgell |
* Copyright (C) 1996 Paul Mackerras |
* Copyright (C) 1996 Paul Mackerras |
* Copyright (C) 2003-2009 Wayne Davison | * Copyright (C) 2003-2015 Wayne Davison |
* |
* |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
Line 20
|
Line 20
|
*/ |
*/ |
|
|
#include "rsync.h" |
#include "rsync.h" |
#include "ifuncs.h" | #include "itypes.h" |
#include "zlib/zlib.h" | #include <zlib.h> |
|
|
extern int do_compression; |
extern int do_compression; |
|
extern int protocol_version; |
extern int module_id; |
extern int module_id; |
extern int def_compress_level; |
extern int def_compress_level; |
extern char *skip_compress; |
extern char *skip_compress; |
Line 308 send_deflated_token(int f, int32 token, struct map_str
|
Line 309 send_deflated_token(int f, int32 token, struct map_str
|
Z_DEFLATED, -15, 8, |
Z_DEFLATED, -15, 8, |
Z_DEFAULT_STRATEGY) != Z_OK) { |
Z_DEFAULT_STRATEGY) != Z_OK) { |
rprintf(FERROR, "compression init failed\n"); |
rprintf(FERROR, "compression init failed\n"); |
exit_cleanup(RERR_STREAMIO); | exit_cleanup(RERR_PROTOCOL); |
} |
} |
if ((obuf = new_array(char, OBUF_SIZE)) == NULL) |
if ((obuf = new_array(char, OBUF_SIZE)) == NULL) |
out_of_memory("send_deflated_token"); |
out_of_memory("send_deflated_token"); |
Line 401 send_deflated_token(int f, int32 token, struct map_str
|
Line 402 send_deflated_token(int f, int32 token, struct map_str
|
if (token == -1) { |
if (token == -1) { |
/* end of file - clean up */ |
/* end of file - clean up */ |
write_byte(f, END_FLAG); |
write_byte(f, END_FLAG); |
} else if (token != -2) { | } else if (token != -2 && do_compression == 1) { |
/* Add the data in the current block to the compressor's |
/* Add the data in the current block to the compressor's |
* history and hash table. */ |
* history and hash table. */ |
|
#ifndef EXTERNAL_ZLIB |
do { |
do { |
/* Break up long sections in the same way that |
/* Break up long sections in the same way that |
* see_deflate_token() does. */ |
* see_deflate_token() does. */ |
Line 411 send_deflated_token(int f, int32 token, struct map_str
|
Line 413 send_deflated_token(int f, int32 token, struct map_str
|
toklen -= n1; |
toklen -= n1; |
tx_strm.next_in = (Bytef *)map_ptr(buf, offset, n1); |
tx_strm.next_in = (Bytef *)map_ptr(buf, offset, n1); |
tx_strm.avail_in = n1; |
tx_strm.avail_in = n1; |
|
if (protocol_version >= 31) /* Newer protocols avoid a data-duplicating bug */ |
|
offset += n1; |
tx_strm.next_out = (Bytef *) obuf; |
tx_strm.next_out = (Bytef *) obuf; |
tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE); |
tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE); |
r = deflate(&tx_strm, Z_INSERT_ONLY); |
r = deflate(&tx_strm, Z_INSERT_ONLY); |
Line 420 send_deflated_token(int f, int32 token, struct map_str
|
Line 424 send_deflated_token(int f, int32 token, struct map_str
|
exit_cleanup(RERR_STREAMIO); |
exit_cleanup(RERR_STREAMIO); |
} |
} |
} while (toklen > 0); |
} while (toklen > 0); |
|
#else |
|
toklen++; |
|
rprintf(FERROR, "Impossible error in external-zlib code (1).\n"); |
|
exit_cleanup(RERR_STREAMIO); |
|
#endif |
} |
} |
} |
} |
|
|
Line 452 static int32 recv_deflated_token(int f, char **data)
|
Line 461 static int32 recv_deflated_token(int f, char **data)
|
rx_strm.zfree = NULL; |
rx_strm.zfree = NULL; |
if (inflateInit2(&rx_strm, -15) != Z_OK) { |
if (inflateInit2(&rx_strm, -15) != Z_OK) { |
rprintf(FERROR, "inflate init failed\n"); |
rprintf(FERROR, "inflate init failed\n"); |
exit_cleanup(RERR_STREAMIO); | exit_cleanup(RERR_PROTOCOL); |
} |
} |
if (!(cbuf = new_array(char, MAX_DATA_COUNT)) |
if (!(cbuf = new_array(char, MAX_DATA_COUNT)) |
|| !(dbuf = new_array(char, AVAIL_OUT_SIZE(CHUNK_SIZE)))) |
|| !(dbuf = new_array(char, AVAIL_OUT_SIZE(CHUNK_SIZE)))) |
Line 570 static int32 recv_deflated_token(int f, char **data)
|
Line 579 static int32 recv_deflated_token(int f, char **data)
|
*/ |
*/ |
static void see_deflate_token(char *buf, int32 len) |
static void see_deflate_token(char *buf, int32 len) |
{ |
{ |
|
#ifndef EXTERNAL_ZLIB |
int r; |
int r; |
int32 blklen; |
int32 blklen; |
unsigned char hdr[5]; |
unsigned char hdr[5]; |
Line 593 static void see_deflate_token(char *buf, int32 len)
|
Line 603 static void see_deflate_token(char *buf, int32 len)
|
} else { |
} else { |
rx_strm.next_in = (Bytef *)buf; |
rx_strm.next_in = (Bytef *)buf; |
rx_strm.avail_in = blklen; |
rx_strm.avail_in = blklen; |
|
if (protocol_version >= 31) /* Newer protocols avoid a data-duplicating bug */ |
|
buf += blklen; |
len -= blklen; |
len -= blklen; |
blklen = 0; |
blklen = 0; |
} |
} |
Line 605 static void see_deflate_token(char *buf, int32 len)
|
Line 617 static void see_deflate_token(char *buf, int32 len)
|
exit_cleanup(RERR_STREAMIO); |
exit_cleanup(RERR_STREAMIO); |
} |
} |
} while (len || rx_strm.avail_out == 0); |
} while (len || rx_strm.avail_out == 0); |
|
#else |
|
buf++; len++; |
|
rprintf(FERROR, "Impossible error in external-zlib code (2).\n"); |
|
exit_cleanup(RERR_STREAMIO); |
|
#endif |
} |
} |
|
|
/** |
/** |
Line 644 int32 recv_token(int f, char **data)
|
Line 661 int32 recv_token(int f, char **data)
|
*/ |
*/ |
void see_token(char *data, int32 toklen) |
void see_token(char *data, int32 toklen) |
{ |
{ |
if (do_compression) | if (do_compression == 1) |
see_deflate_token(data, toklen); |
see_deflate_token(data, toklen); |
} |
} |