updated rsyncable patch
[debian/gzip] / deflate.c
index 8e539d2623a6eac5d6bc9d471a3ef6088b7bea65..bb8a749ac5a08dabd589cbd999f9b2a3f6dddfba 100644 (file)
--- a/deflate.c
+++ b/deflate.c
@@ -345,7 +345,6 @@ void lm_init (pack_level, flags)
 
     strstart = 0;
     block_start = 0L;
-    rsync_chunk_end = 0xFFFFFFFFUL;
 #ifdef ASMV
     match_init(); /* initialize the asm code */
 #endif
@@ -596,9 +595,7 @@ local void fill_window()
     }
 }
 
-local void rsync_roll(start, num)
-    unsigned start;
-    unsigned num;
+local void rsync_roll(unsigned start, unsigned num)
 {
     unsigned i;
 
@@ -635,7 +632,7 @@ local void rsync_roll(start, num)
  */
 #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
@@ -646,7 +643,7 @@ local void rsync_roll(start, num)
 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;
@@ -710,11 +707,7 @@ local off_t deflate_fast()
             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;
@@ -739,7 +732,7 @@ off_t deflate()
 {
     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 */
 
@@ -805,12 +798,8 @@ off_t deflate()
             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) {
@@ -821,13 +810,8 @@ off_t deflate()
             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;
-
-               flush = 1;
+               flush = 2;
            }
             if (flush) FLUSH_BLOCK(0), block_start = strstart;
            RSYNC_ROLL(strstart, 1);
@@ -838,12 +822,8 @@ off_t deflate()
              * 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;