- |
-From f1b8edadc3c733990f8a8de4d643f968e571ae85 Mon Sep 17 00:00:00 2001 |
-
- |
-From: Adam Tkac <atkac@redhat.com> |
-
- |
-Date: Fri, 17 Aug 2012 15:13:48 +0200 |
-
- |
-Subject: [PATCH] Rank Z_BLOCK flush below Z_PARTIAL_FLUSH only when last |
-
- |
- flush was Z_BLOCK. |
-
- |
-
-
|
-This fixes regression introduced by f1ebdd6a9c495a5db9a22aa80dd7d54ae7db42e9 |
-
- |
-(Permit stronger flushes after Z_BLOCK flushes.). Now this code is valid |
-
- |
-again: |
-
- |
-
-
|
-deflate(stream, Z_SYNC_FLUSH); |
-
- |
-deflateParams(stream, newLevel, Z_DEFAULT_STRATEGY); |
-
- |
-
-
|
-Signed-off-by: Adam Tkac <atkac@redhat.com> |
-
- |
---- |
-
- |
- deflate.c | 13 ++++++++++--- |
-
- |
- 1 file changed, 10 insertions(+), 3 deletions(-) |
-
- |
-
-
|
-diff --git a/deflate.c b/deflate.c |
-
- |
-index 9e4c2cb..3422f72 100644 |
-
- |
---- a/deflate.c |
-
- |
-+++ b/deflate.c |
-
- |
-@@ -882,9 +882,16 @@ int ZEXPORT deflate (strm, flush) |
-
- |
- * flushes. For repeated and useless calls with Z_FINISH, we keep |
-
- |
- * returning Z_STREAM_END instead of Z_BUF_ERROR. |
-
- |
- */ |
-
- |
-- } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && |
-
- |
-- flush != Z_FINISH) { |
-
- |
-- ERR_RETURN(strm, Z_BUF_ERROR); |
-
- |
-+ } else if (strm->avail_in == 0 && flush != Z_FINISH) { |
-
- |
-+ char err; |
-
- |
-+ |
-
- |
-+ /* Degrade Z_BLOCK only when last flush was Z_BLOCK */ |
-
- |
-+ err = (old_flush == Z_BLOCK) ? |
-
- |
-+ RANK(flush) <= RANK(old_flush) : flush <= old_flush; |
-
- |
-+ |
-
- |
-+ if (err) { |
-
- |
-+ ERR_RETURN(strm, Z_BUF_ERROR); |
-
- |
-+ } |
-
- |
- } |
-
- |
- |
-
- |
- /* User must not provide more input after the first FINISH: */ |
-
- |
--- |
-
- |
-1.7.11.4 |
-
-