projects
/
debian
/
gzip
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
prepare to upload
[debian/gzip]
/
deflate.c
diff --git
a/deflate.c
b/deflate.c
index e83b5a383914aeb3a4d2626312aeb653a431e4d4..1b3ac524b59f823ac3897a21e5f16d6d21d246e4 100644
(file)
--- a/
deflate.c
+++ b/
deflate.c
@@
-132,11
+132,11
@@
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
#ifndef RSYNC_WIN
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
#ifndef RSYNC_WIN
-# define RSYNC_WIN
4096
+# define RSYNC_WIN
8192
#endif
/* Size of rsync window, must be < MAX_DIST */
#endif
/* Size of rsync window, must be < MAX_DIST */
-#define RSYNC_SUM_MATCH(sum) ((
sum) % RSYNC_WIN
== 0)
+#define RSYNC_SUM_MATCH(sum) ((
(sum) & (RSYNC_WIN - 1))
== 0)
/* Whether window sum matches magic value */
/* ===========================================================================
/* Whether window sum matches magic value */
/* ===========================================================================
@@
-338,6
+338,7
@@
void lm_init (pack_level, flags)
strstart = 0;
block_start = 0L;
strstart = 0;
block_start = 0L;
+ rsync_chunk_end = 0xFFFFFFFFUL;
#ifdef ASMV
match_init(); /* initialize the asm code */
#endif
#ifdef ASMV
match_init(); /* initialize the asm code */
#endif
@@
-625,7
+626,7
@@
local void rsync_roll(start, num)
*/
#define FLUSH_BLOCK(eof) \
flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \
*/
#define FLUSH_BLOCK(eof) \
flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \
- (char*)NULL, (long)strstart - block_start,
flush-1,
(eof))
+ (char*)NULL, (long)strstart - block_start, (eof))
/* ===========================================================================
* Processes a new input file and return its compressed length. This
/* ===========================================================================
* Processes a new input file and return its compressed length. This
@@
-636,7
+637,7
@@
local void rsync_roll(start, num)
local off_t deflate_fast()
{
IPos hash_head; /* head of the hash chain */
local off_t deflate_fast()
{
IPos hash_head; /* head of the hash chain */
- int flush; /* set if current block must be flushed
, 2=>and padded
*/
+ int flush; /* set if current block must be flushed */
unsigned match_length = 0; /* length of best match */
prev_length = MIN_MATCH-1;
unsigned match_length = 0; /* length of best match */
prev_length = MIN_MATCH-1;
@@
-699,10
+700,14
@@
local off_t deflate_fast()
lookahead--;
strstart++;
}
lookahead--;
strstart++;
}
- if (rsync && strstart > rsync_chunk_end) {
- rsync_chunk_end = 0xFFFFFFFFUL;
- flush = 2;
- }
+ if (rsync && strstart > rsync_chunk_end) {
+ ush attr = 0; /* ascii/binary flag */
+
+ flush = 1;
+ /* Reset huffman tree */
+ ct_init(&attr, &method);
+ rsync_chunk_end = 0xFFFFFFFFUL;
+ }
if (flush) FLUSH_BLOCK(0), block_start = strstart;
/* Make sure that we always have enough lookahead, except
if (flush) FLUSH_BLOCK(0), block_start = strstart;
/* Make sure that we always have enough lookahead, except
@@
-791,8
+796,12
@@
off_t deflate()
strstart++;
if (rsync && strstart > rsync_chunk_end) {
strstart++;
if (rsync && strstart > rsync_chunk_end) {
+ ush attr = 0; /* ascii/binary flag */
+
+ /* Reset huffman tree */
+ ct_init(&attr, &method);
rsync_chunk_end = 0xFFFFFFFFUL;
rsync_chunk_end = 0xFFFFFFFFUL;
- flush =
2
;
+ flush =
1
;
}
if (flush) FLUSH_BLOCK(0), block_start = strstart;
} else if (match_available) {
}
if (flush) FLUSH_BLOCK(0), block_start = strstart;
} else if (match_available) {
@@
-803,8
+812,13
@@
off_t deflate()
Tracevv((stderr,"%c",window[strstart-1]));
flush = ct_tally (0, window[strstart-1]);
if (rsync && strstart > rsync_chunk_end) {
Tracevv((stderr,"%c",window[strstart-1]));
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;
rsync_chunk_end = 0xFFFFFFFFUL;
- flush = 2;
+
+ flush = 1;
}
if (flush) FLUSH_BLOCK(0), block_start = strstart;
RSYNC_ROLL(strstart, 1);
}
if (flush) FLUSH_BLOCK(0), block_start = strstart;
RSYNC_ROLL(strstart, 1);
@@
-815,9
+829,12
@@
off_t deflate()
* the next step to decide.
*/
if (rsync && strstart > rsync_chunk_end) {
* the next step to decide.
*/
if (rsync && strstart > rsync_chunk_end) {
+ ush attr = 0; /* ascii/binary flag */
+
/* Reset huffman tree */
/* Reset huffman tree */
+ ct_init(&attr, &method);
rsync_chunk_end = 0xFFFFFFFFUL;
rsync_chunk_end = 0xFFFFFFFFUL;
- flush = 2;
+
FLUSH_BLOCK(0), block_start = strstart;
}
match_available = 1;
FLUSH_BLOCK(0), block_start = strstart;
}
match_available = 1;