]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch by Andrew Kuchling to unflush() (flush() for deflating).
authorGuido van Rossum <guido@python.org>
Wed, 7 Apr 1999 20:23:17 +0000 (20:23 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 7 Apr 1999 20:23:17 +0000 (20:23 +0000)
Without this, if inflate() returned Z_BUF_ERROR asking for more output
space, we would report the error; now, we increase the buffer size and
try again, just as for Z_OK.

Modules/zlibmodule.c

index f664e98caa053e7404b9409801c3579912e0bc17..515b19c107122dcb08428c69bced234fa67cd2b9 100644 (file)
@@ -17,8 +17,8 @@
 #endif
 #define DEF_WBITS MAX_WBITS
 
-/* The output buffer will be increased in chunks of ADDCHUNK bytes. */
-#define DEFAULTALLOC 16*1024
+/* The output buffer will be increased in chunks of DEFAULTALLOC bytes. */
+#define DEFAULTALLOC (16*1024)
 #define PyInit_zlib initzlib
 
 staticforward PyTypeObject Comptype;
@@ -643,11 +643,14 @@ PyZlib_unflush(self, args)
   self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
   length = self->zst.avail_out = DEFAULTALLOC;
 
+  /* I suspect that Z_BUF_ERROR is the only error code we need to check for 
+     in the following loop, but will leave the Z_OK in for now to avoid
+     destabilizing this function. --amk */
   err = Z_OK;
-  while (err == Z_OK)
+  while ( err == Z_OK )
   {
       err = inflate(&(self->zst), Z_FINISH);
-      if (err == Z_OK && self->zst.avail_out == 0) 
+      if ( ( err == Z_OK || err == Z_BUF_ERROR ) && self->zst.avail_out == 0)
       {
          if (_PyString_Resize(&RetVal, length << 1) == -1)
          {
@@ -658,6 +661,7 @@ PyZlib_unflush(self, args)
          self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length;
          self->zst.avail_out = length;
          length = length << 1;
+         err = Z_OK;
       }
   }
   if (err!=Z_STREAM_END)