Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed a problem where we might not have enough room to compress
[rsync/rsync.git]
/
token.c
diff --git
a/token.c
b/token.c
index
2967b44
..
ed30c3f
100644
(file)
--- a/
token.c
+++ b/
token.c
@@
-90,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)
{
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 (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));
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) );
+ }
}
}
}
}
@@
-126,6
+137,7
@@
static z_stream tx_strm;
/* Output buffer */
static char *obuf;
/* Output buffer */
static char *obuf;
+static int obuf_size;
/* Send a deflated token */
static void
/* Send a deflated token */
static void
@@
-134,6
+146,8
@@
send_deflated_token(int f, int token,
{
int n, r;
static int init_done, flush_pending;
{
int n, r;
static int init_done, flush_pending;
+ extern int write_batch; /* dw */
+ char temp_byte; /* dw */
if (last_token == -1) {
/* initialization */
if (last_token == -1) {
/* initialization */
@@
-147,7
+161,12
@@
send_deflated_token(int f, int token,
rprintf(FERROR, "compression init failed\n");
exit_cleanup(RERR_STREAMIO);
}
rprintf(FERROR, "compression init failed\n");
exit_cleanup(RERR_STREAMIO);
}
- if ((obuf = malloc(MAX_DATA_COUNT+2)) == NULL)
+#if MAX_DATA_COUNT+2 > CHUNK_SIZE+128 /* this shouldn't ever happen... */
+ obuf_size = MAX_DATA_COUNT+2;
+#else
+ obuf_size = CHUNK_SIZE+128;
+#endif
+ if ((obuf = malloc(obuf_size)) == NULL)
out_of_memory("send_deflated_token");
init_done = 1;
} else
out_of_memory("send_deflated_token");
init_done = 1;
} else
@@
-166,13
+185,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);
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);
} 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 (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;
}
last_run_end = last_token;
run_start = token;
@@
-231,6
+264,8
@@
send_deflated_token(int f, int token,
obuf[0] = DEFLATED_DATA + (n >> 8);
obuf[1] = n;
write_buf(f, obuf, n+2);
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);
}
}
} while (nb != 0 || tx_strm.avail_out == 0);
@@
-240,6
+275,10
@@
send_deflated_token(int f, int token,
if (token == -1) {
/* end of file - clean up */
write_byte(f, END_FLAG);
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
} else if (token != -2) {
/* add the data in the current block to the compressor's
@@
-247,7
+286,7
@@
send_deflated_token(int f, int token,
tx_strm.next_in = (Bytef *) map_ptr(buf, offset, toklen);
tx_strm.avail_in = toklen;
tx_strm.next_out = (Bytef *) obuf;
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 =
MAX_DATA_COUNT
;
+ tx_strm.avail_out =
obuf_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 = 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",
@@
-441,8
+480,8
@@
static void see_deflate_token(char *buf, int len)
} while (len || rx_strm.avail_out == 0);
}
} while (len || rx_strm.avail_out == 0);
}
-/*
- *
transmit a verbatim buffer of length n followed by a token
+/*
*
+ *
Transmit a verbatim buffer of length @p n followed by a token.
* If token == -1 then we have reached EOF
* If n == 0 then don't send a buffer
*/
* If token == -1 then we have reached EOF
* If n == 0 then don't send a buffer
*/