-diff --git a/deflate.c b/deflate.c
-index 0950391..1b3ac52 100644
---- a/deflate.c
-+++ b/deflate.c
+diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c
+--- gzip-1.5/deflate.c 2012-04-24 10:25:28.000000000 -0600
++++ /home/bdale/debian/gzip/deflate.c 2012-06-19 14:01:41.885498670 -0600
@@ -131,6 +131,14 @@
#endif
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
/* ===========================================================================
* Local data used by the "longest match" routines.
*/
-@@ -212,6 +220,8 @@ local int compr_level;
- unsigned near good_match;
+@@ -212,6 +220,8 @@
+ unsigned good_match;
/* Use a faster search when the previous match is longer than this */
+local ulg rsync_sum; /* rolling sum of rsync window */
/* Values for max_lazy_match, good_match and max_chain_length, depending on
* the desired pack level (0..9). The values given below have been tuned to
-@@ -307,6 +317,10 @@ void lm_init (pack_level, flags)
+@@ -314,6 +324,10 @@
#endif
/* prev will be initialized on the fly */
/* Set the default configuration parameters:
*/
max_lazy_match = configuration_table[pack_level].max_lazy;
-@@ -324,6 +338,7 @@ void lm_init (pack_level, flags)
+@@ -331,6 +345,7 @@
strstart = 0;
block_start = 0L;
#ifdef ASMV
match_init(); /* initialize the asm code */
#endif
-@@ -543,6 +558,8 @@ local void fill_window()
+@@ -550,6 +565,8 @@
memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE);
match_start -= WSIZE;
strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */
block_start -= (long) WSIZE;
-@@ -570,6 +587,39 @@ local void fill_window()
+@@ -579,6 +596,39 @@
}
}
/* ===========================================================================
* Flush the current block, with given end-of-file flag.
* IN assertion: strstart is set to the end of the current match.
-@@ -617,6 +667,7 @@ local off_t deflate_fast()
+@@ -626,7 +676,8 @@
lookahead -= match_length;
+- /* Insert new strings in the hash table only if the match length
+ RSYNC_ROLL(strstart, match_length);
- /* Insert new strings in the hash table only if the match length
++ /* Insert new strings in the hash table only if the match length
* is not too large. This saves time but degrades compression.
*/
-@@ -645,9 +696,18 @@ local off_t deflate_fast()
+ if (match_length <= max_insert_length) {
+@@ -654,9 +705,18 @@
/* No match, output a literal byte */
Tracevv((stderr,"%c",window[strstart]));
flush = ct_tally (0, window[strstart]);
+ RSYNC_ROLL(strstart, 1);
lookahead--;
- strstart++;
+ strstart++;
}
+ if (rsync && strstart > rsync_chunk_end) {
+ ush attr = 0; /* ascii/binary flag */
if (flush) FLUSH_BLOCK(0), block_start = strstart;
/* Make sure that we always have enough lookahead, except
-@@ -721,6 +781,7 @@ off_t deflate()
+@@ -730,6 +790,7 @@
*/
lookahead -= prev_length-1;
prev_length -= 2;
do {
strstart++;
INSERT_STRING(strstart, hash_head);
-@@ -733,24 +794,51 @@ off_t deflate()
+@@ -742,24 +803,51 @@
match_available = 0;
match_length = MIN_MATCH-1;
strstart++;
strstart++;
lookahead--;
}
-diff --git a/doc/gzip.texi b/doc/gzip.texi
-index a6009d2..84887c3 100644
---- a/doc/gzip.texi
-+++ b/doc/gzip.texi
-@@ -353,6 +353,14 @@ specified on the command line are directories, @command{gzip} will descend
+diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi
+--- gzip-1.5/doc/gzip.texi 2012-01-01 01:53:58.000000000 -0700
++++ /home/bdale/debian/gzip/doc/gzip.texi 2012-06-19 14:09:36.041559612 -0600
+@@ -207,6 +207,7 @@
+ -V, --version display version number
+ -1, --fast compress faster
+ -9, --best compress better
++ --rsyncable Make rsync-friendly archive
+
+ With no FILE, or when FILE is -, read standard input.
+
+@@ -353,6 +354,30 @@
into the directory and compress all the files it finds there (or
decompress them in the case of @command{gunzip}).
++@item --rsyncable
++While compressing, synchronize the output occasionally based on the
++input. This can reduce the compression slightly in some cases, but
++means that the @code{rsync} program can take advantage of similarities
++in the uncompressed input when syncronizing two files compressed with
++this flag. @code{gunzip} cannot tell the difference between a
++compressed file created with this option, and one created without it.
++
++@item --rsyncable
++While compressing, synchronize the output occasionally based on
++the input. This increases size by less than 1 percent most
++cases, but means that the @command{rsync} program can much more efficiently
++synchronize files compressed with this flag. @command{gunzip}
++cannot tell the difference between a compressed file created
++with this option, and one created without it.
++
+@item --rsyncable
+While compressing, synchronize the output occasionally based on the
+input. This can reduce the compression slightly in some cases, but
@item --suffix @var{suf}
@itemx -S @var{suf}
Use suffix @var{suf} instead of @samp{.gz}. Any suffix can be
-diff --git a/gzip.c b/gzip.c
-index 9e2a890..b867350 100644
---- a/gzip.c
-+++ b/gzip.c
-@@ -218,6 +218,7 @@ int ofd; /* output file descriptor */
+--- gzip-1.5/gzip.c 2012-04-24 10:25:28.000000000 -0600
++++ /home/bdale/debian/gzip/gzip.c 2012-06-19 14:00:43.283873180 -0600
+@@ -213,6 +213,7 @@
unsigned insize; /* valid bytes in inbuf */
unsigned inptr; /* index of next byte to be processed in inbuf */
unsigned outcnt; /* bytes in output buffer */
static int handled_sig[] =
{
-@@ -271,6 +272,7 @@ struct option longopts[] =
+@@ -270,7 +271,7 @@
{"best", 0, 0, '9'}, /* compress better */
{"lzw", 0, 0, 'Z'}, /* make output compatible with old compress */
{"bits", 1, 0, 'b'}, /* max number of bits per code (implies -Z) */
+-
+ {"rsyncable", 0, 0, 'R'}, /* make rsync-friendly archive */
{ 0, 0, 0, 0 }
};
-@@ -352,6 +354,7 @@ local void help()
+@@ -353,6 +354,7 @@
" -Z, --lzw produce output compatible with old compress",
" -b, --bits=BITS max number of bits per code (implies -Z)",
#endif
"",
"With no FILE, or when FILE is -, read standard input.",
"",
-@@ -479,6 +482,9 @@ int main (int argc, char **argv)
- recursive = 1;
+@@ -481,8 +483,11 @@
+ #else
+ recursive = 1;
#endif
- break;
+- break;
+- case 'S':
++ break;
+ case 'R':
+ rsync = 1; break;
+
- case 'S':
++ case 'S':
#ifdef NO_MULTIPLE_DOTS
if (*optarg == '.') optarg++;
-diff --git a/gzip.h b/gzip.h
-index 0c3dd68..5270c56 100644
---- a/gzip.h
-+++ b/gzip.h
-@@ -146,6 +146,7 @@ EXTERN(uch, window); /* Sliding window and suffix table (unlzw) */
+ #endif
+diff -u -r gzip-1.5/gzip.h /home/bdale/debian/gzip/gzip.h
+--- gzip-1.5/gzip.h 2012-01-01 01:53:58.000000000 -0700
++++ /home/bdale/debian/gzip/gzip.h 2012-06-19 13:57:36.833883093 -0600
+@@ -140,6 +140,7 @@
extern unsigned insize; /* valid bytes in inbuf */
extern unsigned inptr; /* index of next byte to be processed in inbuf */
extern unsigned outcnt; /* bytes in output buffer */
extern off_t bytes_in; /* number of input bytes */
extern off_t bytes_out; /* number of output bytes */
-diff --git a/doc/gzip.texi b/doc/gzip.texi
-index 84887c3..ecd4e00 100644
---- a/doc/gzip.texi
-+++ b/doc/gzip.texi
-@@ -207,6 +207,7 @@ Mandatory arguments to long options are mandatory for short options too.
- -V, --version display version number
- -1, --fast compress faster
- -9, --best compress better
-+ --rsyncable Make rsync-friendly archive
-
- With no FILE, or when FILE is -, read standard input.
-
-@@ -361,6 +362,14 @@ in the uncompressed input when syncronizing two files compressed with
- this flag. @code{gunzip} cannot tell the difference between a
- compressed file created with this option, and one created without it.
-
-+@item --rsyncable
-+While compressing, synchronize the output occasionally based on
-+the input. This increases size by less than 1 percent most
-+cases, but means that the @command{rsync} program can much more efficiently
-+synchronize files compressed with this flag. @command{gunzip}
-+cannot tell the difference between a compressed file created
-+with this option, and one created without it.
-+
- @item --suffix @var{suf}
- @itemx -S @var{suf}
- Use suffix @var{suf} instead of @samp{.gz}. Any suffix can be