--- src/zlib.c.orig 2005-06-03 11:26:09.000000000 -0700 +++ src/zlib.c 2006-08-18 17:08:36.000000000 -0700 @@ -221,15 +221,14 @@ point. */ assert (bd->size == 0); - /* This will work well in the server, because this call will - do an unblocked read and fetch all the available data. In - the client, this will read a single byte from the stdio - stream, which will cause us to call inflate once per byte. - It would be more efficient if we could make a call which - would fetch all the available bytes, and at least one byte. */ - + /* On the server, this will do an unblocking read of as much data as is + * available. On the client, with a blocking input descriptor and the + * current fd_buffer implementation, this should read as much data as + * is currently available, and at least 1 byte (or EOF), from the + * underlying buffer. + */ status = (*cb->buf->input) (cb->buf->closure, bd->text, - need, BUFFER_DATA_SIZE, &nread); + need ? 1 : 0, BUFFER_DATA_SIZE, &nread); if (status == -2) /* Don't try to recover from memory allcoation errors. */