#define gzclose BZ2_bzclose
#define gzread BZ2_bzread
#define gzseek BZ2_bzseek
+#define gzerror BZ2_bzerror
+#define Z_ERRNO BZ_IO_ERROR
#define i_stream_create_zlib i_stream_create_bzlib
#include "istream-zlib.c"
{
struct zlib_istream *zstream = (struct zlib_istream *)stream;
size_t size;
- int ret;
+ const char *errstr;
+ int ret, errnum;
if (stream->pos == stream->buffer_size) {
if (!zstream->marked && stream->skip > 0) {
}
if (ret < 0) {
+ errstr = gzerror(zstream->file, &errnum);
+ if (errnum != Z_ERRNO) {
+ i_error("gzread() failed: %s", errstr);
+ stream->istream.stream_errno = EINVAL;
+ return -1;
+ }
if (errno == EAGAIN) {
i_assert(!stream->istream.blocking);
ret = 0;