X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/d47741cac62e80d5ffd6f01274e3b7b48b2849e1..fcb69e5cdcfdfd0bdcea2127e5f4c9133a2282b9:/token.c diff --git a/token.c b/token.c index 3bd8d34c..174f121a 100644 --- a/token.c +++ b/token.c @@ -21,7 +21,6 @@ #include "zlib/zlib.h" extern int do_compression; -int default_compression_level = Z_DEFAULT_COMPRESSION; static int compression_level = Z_DEFAULT_COMPRESSION; /* determine the compression level based on a wildcard filename list */ @@ -33,11 +32,17 @@ void set_compression(char *fname) if (!do_compression) return; - compression_level = default_compression_level; + compression_level = Z_DEFAULT_COMPRESSION; dont = lp_dont_compress(module_id); if (!dont || !*dont) return; + if ((dont[0] == '*') && (!dont[1])) { + /* an optimization to skip the rest of this routine */ + compression_level = 0; + return; + } + dont = strdup(dont); fname = strdup(fname); if (!dont || !fname) return; @@ -85,18 +90,29 @@ static int simple_recv_token(int f,char **data) static void simple_send_token(int f,int token, struct map_struct *buf,OFF_T offset,int n) { + extern int write_batch; /* dw */ + int hold_int; /* dw */ + if (n > 0) { int l = 0; while (l < n) { int n1 = MIN(CHUNK_SIZE,n-l); write_int(f,n1); write_buf(f,map_ptr(buf,offset+l,n1),n1); + if (write_batch) { + write_batch_delta_file( (char *) &n1, sizeof(int) ); + write_batch_delta_file(map_ptr(buf,offset+l,n1),n1); + } l += n1; } } /* a -2 token means to send data only and no token */ if (token != -2) { write_int(f,-(token+1)); + if (write_batch) { + hold_int = -(token+1); + write_batch_delta_file( (char *) &hold_int, sizeof(int) ); + } } } @@ -129,6 +145,8 @@ send_deflated_token(int f, int token, { int n, r; static int init_done, flush_pending; + extern int write_batch; /* dw */ + char temp_byte; /* dw */ if (last_token == -1) { /* initialization */ @@ -161,13 +179,27 @@ send_deflated_token(int f, int token, n = last_token - run_start; if (r >= 0 && r <= 63) { write_byte(f, (n==0? TOKEN_REL: TOKENRUN_REL) + r); + if (write_batch) { /* dw */ + temp_byte = (char)( (n==0? TOKEN_REL: TOKENRUN_REL) + r); + write_batch_delta_file(&temp_byte,sizeof(char)); + } } else { write_byte(f, (n==0? TOKEN_LONG: TOKENRUN_LONG)); write_int(f, run_start); + if (write_batch) { /* dw */ + temp_byte = (char)(n==0? TOKEN_LONG: TOKENRUN_LONG); + write_batch_delta_file(&temp_byte,sizeof(temp_byte)); + write_batch_delta_file((char *)&run_start,sizeof(run_start)); + } } if (n != 0) { write_byte(f, n); write_byte(f, n >> 8); + if (write_batch) { /* dw */ + write_batch_delta_file((char *)&n,sizeof(char)); + temp_byte = (char) n >> 8; + write_batch_delta_file(&temp_byte,sizeof(temp_byte)); + } } last_run_end = last_token; run_start = token; @@ -226,6 +258,8 @@ send_deflated_token(int f, int token, obuf[0] = DEFLATED_DATA + (n >> 8); obuf[1] = n; write_buf(f, obuf, n+2); + if (write_batch) /* dw */ + write_batch_delta_file(obuf,n+2); } } } while (nb != 0 || tx_strm.avail_out == 0); @@ -235,6 +269,10 @@ send_deflated_token(int f, int token, if (token == -1) { /* end of file - clean up */ write_byte(f, END_FLAG); + if (write_batch) { /* dw */ + temp_byte = END_FLAG; + write_batch_delta_file((char *)&temp_byte,sizeof(temp_byte)); + } } else if (token != -2) { /* add the data in the current block to the compressor's