You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.4 KiB
46 lines
1.4 KiB
7 years ago
|
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
|
||
|
|