X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=debian%2Fpatches%2Frsyncable.diff;h=bf7bde07bc5e58d42841c1f3833531a556ac1d70;hb=1bbb35416d8da71e8146a4cb4f2dbab7b24cff39;hp=1bb7d4a745fa5b4abbb5796a6f9b48a88239f011;hpb=adb5f95d365c76272bf8fff05912746ad8858ba0;p=debian%2Fgzip diff --git a/debian/patches/rsyncable.diff b/debian/patches/rsyncable.diff index 1bb7d4a..bf7bde0 100644 --- a/debian/patches/rsyncable.diff +++ b/debian/patches/rsyncable.diff @@ -1,6 +1,5 @@ -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 +--- a/deflate.c ++++ b/deflate.c @@ -131,6 +131,14 @@ #endif /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ @@ -36,15 +35,7 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c /* Set the default configuration parameters: */ max_lazy_match = configuration_table[pack_level].max_lazy; -@@ -331,6 +345,7 @@ - - strstart = 0; - block_start = 0L; -+ rsync_chunk_end = 0xFFFFFFFFUL; - #ifdef ASMV - match_init(); /* initialize the asm code */ - #endif -@@ -550,6 +565,8 @@ +@@ -550,6 +564,8 @@ memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE); match_start -= WSIZE; strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */ @@ -53,13 +44,11 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c block_start -= (long) WSIZE; -@@ -579,6 +596,39 @@ +@@ -579,13 +595,44 @@ } } -+local void rsync_roll(start, num) -+ unsigned start; -+ unsigned num; ++local void rsync_roll(unsigned start, unsigned num) +{ + unsigned i; + @@ -93,7 +82,24 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. -@@ -626,7 +676,8 @@ + */ + #define FLUSH_BLOCK(eof) \ + flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \ +- (char*)NULL, (long)strstart - block_start, (eof)) ++ (char*)NULL, (long)strstart - block_start, flush-1, (eof)) + + /* =========================================================================== + * Processes a new input file and return its compressed length. This +@@ -596,7 +643,7 @@ + local off_t deflate_fast() + { + IPos hash_head; /* head of the hash chain */ +- int flush; /* set if current block must be flushed */ ++ int flush = 0; /* set if current block must be flushed, 2=>and padded */ + unsigned match_length = 0; /* length of best match */ + + prev_length = MIN_MATCH-1; +@@ -626,7 +673,8 @@ lookahead -= match_length; @@ -103,7 +109,7 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c * is not too large. This saves time but degrades compression. */ if (match_length <= max_insert_length) { -@@ -654,9 +705,18 @@ +@@ -654,9 +702,14 @@ /* No match, output a literal byte */ Tracevv((stderr,"%c",window[strstart])); flush = ct_tally (0, window[strstart]); @@ -112,17 +118,22 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c strstart++; } + if (rsync && strstart > rsync_chunk_end) { -+ ush attr = 0; /* ascii/binary flag */ -+ -+ flush = 1; -+ /* Reset huffman tree */ -+ ct_init(&attr, &method); ++ flush = 2; + rsync_chunk_end = 0xFFFFFFFFUL; + } if (flush) FLUSH_BLOCK(0), block_start = strstart; /* Make sure that we always have enough lookahead, except -@@ -730,6 +790,7 @@ +@@ -679,7 +732,7 @@ + { + IPos hash_head; /* head of hash chain */ + IPos prev_match; /* previous match */ +- int flush; /* set if current block must be flushed */ ++ int flush = 0; /* set if current block must be flushed */ + int match_available = 0; /* set if previous match exists */ + register unsigned match_length = MIN_MATCH-1; /* length of best match */ + +@@ -730,6 +783,7 @@ */ lookahead -= prev_length-1; prev_length -= 2; @@ -130,19 +141,15 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c do { strstart++; INSERT_STRING(strstart, hash_head); -@@ -742,24 +803,51 @@ +@@ -742,24 +796,38 @@ match_available = 0; match_length = MIN_MATCH-1; strstart++; - if (flush) FLUSH_BLOCK(0), block_start = strstart; + if (rsync && strstart > rsync_chunk_end) { -+ ush attr = 0; /* ascii/binary flag */ -+ -+ /* Reset huffman tree */ -+ ct_init(&attr, &method); + rsync_chunk_end = 0xFFFFFFFFUL; -+ flush = 1; ++ flush = 2; + } + if (flush) FLUSH_BLOCK(0), block_start = strstart; } else if (match_available) { @@ -156,13 +163,8 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c - } + flush = ct_tally (0, window[strstart-1]); + if (rsync && strstart > rsync_chunk_end) { -+ ush attr = 0; /* ascii/binary flag */ -+ -+ /* Reset huffman tree */ -+ ct_init(&attr, &method); + rsync_chunk_end = 0xFFFFFFFFUL; -+ -+ flush = 1; ++ flush = 2; + } + if (flush) FLUSH_BLOCK(0), block_start = strstart; + RSYNC_ROLL(strstart, 1); @@ -173,12 +175,8 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c * the next step to decide. */ + if (rsync && strstart > rsync_chunk_end) { -+ ush attr = 0; /* ascii/binary flag */ -+ -+ /* Reset huffman tree */ -+ ct_init(&attr, &method); + rsync_chunk_end = 0xFFFFFFFFUL; -+ ++ flush = 2; + FLUSH_BLOCK(0), block_start = strstart; + } match_available = 1; @@ -186,10 +184,9 @@ diff -u -r gzip-1.5/deflate.c /home/bdale/debian/gzip/deflate.c strstart++; lookahead--; } -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 @@ +--- a/doc/gzip.texi ++++ b/doc/gzip.texi +@@ -208,6 +208,7 @@ -V, --version display version number -1, --fast compress faster -9, --best compress better @@ -197,18 +194,10 @@ diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi With no FILE, or when FILE is -, read standard input. -@@ -353,6 +354,30 @@ +@@ -358,6 +359,14 @@ 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 @@ -216,21 +205,13 @@ diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi +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 -+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 --suffix @var{suf} @itemx -S @var{suf} Use suffix @var{suf} instead of @samp{.gz}. Any suffix can be ---- 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 @@ +--- a/gzip.c ++++ b/gzip.c +@@ -215,6 +215,7 @@ unsigned insize; /* valid bytes in inbuf */ unsigned inptr; /* index of next byte to be processed in inbuf */ unsigned outcnt; /* bytes in output buffer */ @@ -238,7 +219,7 @@ diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi static int handled_sig[] = { -@@ -270,7 +271,7 @@ +@@ -275,7 +276,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) */ @@ -247,7 +228,7 @@ diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi { 0, 0, 0, 0 } }; -@@ -353,6 +354,7 @@ +@@ -359,6 +360,7 @@ " -Z, --lzw produce output compatible with old compress", " -b, --bits=BITS max number of bits per code (implies -Z)", #endif @@ -255,7 +236,7 @@ diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi "", "With no FILE, or when FILE is -, read standard input.", "", -@@ -481,8 +483,11 @@ +@@ -489,8 +491,11 @@ #else recursive = 1; #endif @@ -269,9 +250,8 @@ diff -u -r gzip-1.5/doc/gzip.texi /home/bdale/debian/gzip/doc/gzip.texi #ifdef NO_MULTIPLE_DOTS if (*optarg == '.') optarg++; #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 +--- a/gzip.h ++++ b/gzip.h @@ -140,6 +140,7 @@ extern unsigned insize; /* valid bytes in inbuf */ extern unsigned inptr; /* index of next byte to be processed in inbuf */ @@ -280,3 +260,64 @@ diff -u -r gzip-1.5/gzip.h /home/bdale/debian/gzip/gzip.h extern off_t bytes_in; /* number of input bytes */ extern off_t bytes_out; /* number of output bytes */ +@@ -287,7 +288,7 @@ + /* in trees.c */ + extern void ct_init (ush *attr, int *method); + extern int ct_tally (int dist, int lc); +-extern off_t flush_block (char *buf, ulg stored_len, int eof); ++extern off_t flush_block (char *buf, ulg stored_len, int pad, int eof); + + /* in bits.c */ + extern void bi_init (file_t zipfile); +--- a/gzip.1 ++++ b/gzip.1 +@@ -5,6 +5,7 @@ + .ll +8 + .B gzip + .RB [ " \-acdfhklLnNrtvV19 " ] ++.RB [ --rsyncable ] + .RB [ \-S\ suffix ] + [ + .I "name \&..." +@@ -287,6 +288,16 @@ + .I gunzip + ). + .TP ++.B --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 ++.BR rsync (1) ++program can take advantage of similarities in the uncompressed input ++when syncronizing two files compressed with this flag. ++.I gunzip ++cannot tell the difference between a compressed file created with this option, ++and one created without it. ++.TP + .B \-S .suf --suffix .suf + When compressing, use suffix .suf instead of .gz. + Any non-empty suffix can be given, but suffixes +--- a/trees.c ++++ b/trees.c +@@ -856,9 +856,10 @@ + * trees or store, and output the encoded block to the zip file. This function + * returns the total compressed length for the file so far. + */ +-off_t flush_block(buf, stored_len, eof) ++off_t flush_block(buf, stored_len, pad, eof) + char *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ ++ int pad; /* pad output to byte boundary */ + int eof; /* true if this is the last block for a file */ + { + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ +@@ -951,6 +952,10 @@ + Assert (input_len == bytes_in, "bad input size"); + bi_windup(); + compressed_len += 7; /* align on byte boundary */ ++ } else if (pad && (compressed_len % 8) != 0) { ++ send_bits((STORED_BLOCK<<1)+eof, 3); /* send block type */ ++ compressed_len = (compressed_len + 3 + 7) & ~7L; ++ copy_block(buf, 0, 1); /* with header */ + } + + return compressed_len >> 3;