diff options
author | Guido van Rossum <guido@python.org> | 1999-04-07 20:23:17 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-04-07 20:23:17 (GMT) |
commit | b729a1d0a8bc7ed3f29cabf08d4b7d6b17bc44e0 (patch) | |
tree | 0772b04435d3de9ca0b196a9acbb62b8abb97a15 /Modules/zlibmodule.c | |
parent | 052364b20b78800a1edec0b61392934abfc4176f (diff) | |
download | cpython-b729a1d0a8bc7ed3f29cabf08d4b7d6b17bc44e0.zip cpython-b729a1d0a8bc7ed3f29cabf08d4b7d6b17bc44e0.tar.gz cpython-b729a1d0a8bc7ed3f29cabf08d4b7d6b17bc44e0.tar.bz2 |
Patch by Andrew Kuchling to unflush() (flush() for deflating).
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.
Diffstat (limited to 'Modules/zlibmodule.c')
-rw-r--r-- | Modules/zlibmodule.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index f664e98..515b19c 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -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) |