Lines Matching refs:zstream

42 static void i_stream_zlib_init(struct zlib_istream *zstream);
47 struct zlib_istream *zstream = (struct zlib_istream *)stream;
49 if (!zstream->zs_closed) {
50 (void)inflateEnd(&zstream->zs);
51 zstream->zs_closed = TRUE;
54 i_stream_close(zstream->istream.parent);
57 static void zlib_read_error(struct zlib_istream *zstream, const char *error)
59 io_stream_set_error(&zstream->istream.iostream,
61 i_stream_get_name(&zstream->istream.istream), error,
62 i_stream_get_absolute_offset(&zstream->istream.istream));
63 if (zstream->log_errors)
64 i_error("%s", zstream->istream.iostream.error);
69 struct zlib_istream *zstream = (struct zlib_istream *)stream;
76 zstream->prev_size + 1);
77 if (size == zstream->prev_size) {
80 zlib_read_error(zstream, "missing gz header");
84 zlib_read_error(zstream, "gz header is too large");
90 zstream->prev_size = size;
98 zlib_read_error(zstream, "wrong magic in header (not gz file?)");
130 zstream->prev_size = 0;
134 static int i_stream_zlib_read_trailer(struct zlib_istream *zstream)
136 struct istream_private *stream = &zstream->istream;
143 if (size == zstream->prev_size) {
146 zlib_read_error(zstream, "missing gz trailer");
151 zstream->prev_size = size;
156 if (le32_to_cpu_unaligned(data) != zstream->crc32) {
157 zlib_read_error(zstream, "gz trailer has wrong CRC value");
162 zstream->prev_size = 0;
163 zstream->trailer_read = TRUE;
169 struct zlib_istream *zstream = (struct zlib_istream *)stream;
176 if (zstream->eof_offset == high_offset) {
177 i_assert(zstream->high_pos == 0 ||
178 zstream->high_pos == stream->pos);
179 if (!zstream->trailer_read) {
181 ret = i_stream_zlib_read_trailer(zstream);
186 if (!zstream->gz || i_stream_read_eof(stream->parent)) {
190 zstream->starting_concated_output = TRUE;
192 if (zstream->starting_concated_output) {
209 zstream->eof_offset = (uoff_t)-1;
210 zstream->stream_size = (uoff_t)-1;
211 zstream->header_read = FALSE;
212 zstream->trailer_read = FALSE;
213 zstream->crc32 = 0;
214 zstream->starting_concated_output = FALSE;
216 (void)inflateEnd(&zstream->zs);
217 i_stream_zlib_init(zstream);
220 if (!zstream->header_read) {
226 zstream->header_read = TRUE;
229 if (stream->pos < zstream->high_pos) {
231 ret = zstream->high_pos - stream->pos;
232 stream->pos = zstream->high_pos;
233 zstream->high_pos = 0;
234 if (zstream->trailer_read) {
237 i_assert(zstream->eof_offset == high_offset);
242 zstream->high_pos = 0;
244 if (!zstream->marked) {
259 zlib_read_error(zstream, "unexpected EOF");
270 zstream->zs.next_in = (void *)data;
271 zstream->zs.avail_in = size;
273 zstream->zs.next_out = stream->w_buffer + stream->pos;
274 zstream->zs.avail_out = out_size;
275 ret = inflate(&zstream->zs, Z_SYNC_FLUSH);
277 out_size -= zstream->zs.avail_out;
278 zstream->crc32 = crc32_data_more(zstream->crc32,
283 i_stream_skip(stream->parent, size - zstream->zs.avail_in);
289 zlib_read_error(zstream, "can't read file without dict");
293 zlib_read_error(zstream, "corrupted data");
300 zstream->eof_offset = stream->istream.v_offset +
302 zstream->stream_size = zstream->eof_offset;
303 zstream->zs.avail_in = 0;
305 if (!zstream->trailer_read) {
308 if (i_stream_zlib_read_trailer(zstream) < 0)
322 static void i_stream_zlib_init(struct zlib_istream *zstream)
326 ret = inflateInit2(&zstream->zs, -15);
339 zstream->header_read = !zstream->gz;
340 zstream->trailer_read = !zstream->gz;
343 static void i_stream_zlib_reset(struct zlib_istream *zstream)
345 struct istream_private *stream = &zstream->istream;
348 zstream->eof_offset = (uoff_t)-1;
349 zstream->crc32 = 0;
351 zstream->zs.next_in = NULL;
352 zstream->zs.avail_in = 0;
357 zstream->high_pos = 0;
358 zstream->prev_size = 0;
360 (void)inflateEnd(&zstream->zs);
361 i_stream_zlib_init(zstream);
367 struct zlib_istream *zstream = (struct zlib_istream *) stream;
372 i_stream_zlib_reset(zstream);
374 } else if (zstream->high_pos != 0) {
375 stream->pos = zstream->high_pos;
376 zstream->high_pos = 0;
383 zstream->high_pos = stream->pos;
420 zstream->marked = TRUE;
426 struct zlib_istream *zstream = (struct zlib_istream *) stream;
443 if (zstream->stream_size == (uoff_t)-1) {
454 if (zstream->stream_size == (uoff_t)-1)
457 stream->statbuf.st_size = zstream->stream_size;
463 struct zlib_istream *zstream = (struct zlib_istream *) stream;
467 if (memcmp(&zstream->last_parent_statbuf,
473 zstream->last_parent_statbuf = *st;
475 i_stream_zlib_reset(zstream);
481 struct zlib_istream *zstream;
483 zstream = i_new(struct zlib_istream, 1);
484 zstream->eof_offset = (uoff_t)-1;
485 zstream->stream_size = (uoff_t)-1;
486 zstream->gz = gz;
487 zstream->log_errors = log_errors;
489 i_stream_zlib_init(zstream);
491 zstream->istream.iostream.close = i_stream_zlib_close;
492 zstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
493 zstream->istream.read = i_stream_zlib_read;
494 zstream->istream.seek = i_stream_zlib_seek;
495 zstream->istream.stat = i_stream_zlib_stat;
496 zstream->istream.sync = i_stream_zlib_sync;
498 zstream->istream.istream.readable_fd = FALSE;
499 zstream->istream.istream.blocking = input->blocking;
500 zstream->istream.istream.seekable = input->seekable;
502 return i_stream_create(&zstream->istream, input,