}
}
-static int i_stream_decompress_detect(struct decompress_istream *zstream)
+static int i_stream_decompress_detect_more(struct decompress_istream *zstream)
{
const struct compression_handler *handler;
ssize_t ret;
case 0:
return 0;
default:
- if (!zstream->istream.istream.blocking)
- return 0;
- return i_stream_decompress_detect(zstream);
+ break;
}
+ return 1;
}
if (handler->create_istream == NULL) {
zstream->istream.istream.stream_errno = EINVAL;
return 1;
}
+static int i_stream_decompress_detect(struct decompress_istream *zstream)
+{
+ int ret;
+
+ do {
+ ret = i_stream_decompress_detect_more(zstream);
+ if (ret <= 0)
+ return ret;
+ } while (zstream->decompressed_input == NULL);
+
+ return 1;
+}
+
static ssize_t i_stream_decompress_read(struct istream_private *stream)
{
struct decompress_istream *zstream =