Lines Matching refs:zstream
29 struct lz4_ostream *zstream = (struct lz4_ostream *)stream;
32 o_stream_close(zstream->ostream.parent);
35 static int o_stream_lz4_send_outbuf(struct lz4_ostream *zstream)
40 if (zstream->outbuf_used == 0)
43 size = zstream->outbuf_used - zstream->outbuf_offset;
45 ret = o_stream_send(zstream->ostream.parent,
46 zstream->outbuf + zstream->outbuf_offset, size);
48 o_stream_copy_error_from_parent(&zstream->ostream);
52 zstream->outbuf_offset += ret;
55 zstream->outbuf_offset = 0;
56 zstream->outbuf_used = 0;
60 static int o_stream_lz4_compress(struct lz4_ostream *zstream)
65 if (zstream->compressbuf_offset == 0)
67 if ((ret = o_stream_lz4_send_outbuf(zstream)) <= 0)
70 i_assert(zstream->outbuf_offset == 0);
71 i_assert(zstream->outbuf_used == 0);
74 int max_dest_size = LZ4_compressBound(zstream->compressbuf_offset);
77 io_stream_set_error(&zstream->ostream.iostream,
79 zstream->compressbuf_offset, LZ4_MAX_INPUT_SIZE);
80 zstream->ostream.ostream.stream_errno = EINVAL;
83 ret = LZ4_compress_default((void *)zstream->compressbuf,
84 (void *)(zstream->outbuf +
86 zstream->compressbuf_offset,
89 ret = LZ4_compress((void *)zstream->compressbuf,
90 (void *)(zstream->outbuf +
92 zstream->compressbuf_offset);
94 i_assert(ret > 0 && (unsigned int)ret <= sizeof(zstream->outbuf) -
96 zstream->outbuf_used = IOSTREAM_LZ4_CHUNK_PREFIX_LEN + ret;
97 chunk_size = zstream->outbuf_used - IOSTREAM_LZ4_CHUNK_PREFIX_LEN;
98 zstream->outbuf[0] = (chunk_size & 0xff000000) >> 24;
99 zstream->outbuf[1] = (chunk_size & 0x00ff0000) >> 16;
100 zstream->outbuf[2] = (chunk_size & 0x0000ff00) >> 8;
101 zstream->outbuf[3] = (chunk_size & 0x000000ff);
102 zstream->compressbuf_offset = 0;
107 o_stream_lz4_send_chunk(struct lz4_ostream *zstream,
114 i_assert(zstream->outbuf_used == 0);
117 max_size = I_MIN(size, sizeof(zstream->compressbuf) -
118 zstream->compressbuf_offset);
119 memcpy(zstream->compressbuf + zstream->compressbuf_offset,
121 zstream->compressbuf_offset += max_size;
127 if (zstream->compressbuf_offset == sizeof(zstream->compressbuf)) {
128 ret = o_stream_lz4_compress(zstream);
139 struct lz4_ostream *zstream = (struct lz4_ostream *)stream;
141 if (o_stream_lz4_compress(zstream) < 0)
143 if (o_stream_lz4_send_outbuf(zstream) < 0)
153 struct lz4_ostream *zstream = (struct lz4_ostream *)stream;
157 if ((ret = o_stream_lz4_send_outbuf(zstream)) <= 0) {
164 ret = o_stream_lz4_send_chunk(zstream, iov[i].iov_base,
179 struct lz4_ostream *zstream;
183 zstream = i_new(struct lz4_ostream, 1);
184 zstream->ostream.sendv = o_stream_lz4_sendv;
185 zstream->ostream.flush = o_stream_lz4_flush;
186 zstream->ostream.iostream.close = o_stream_lz4_close;
188 i_assert(sizeof(zstream->outbuf) >= sizeof(*hdr));
189 hdr = (void *)zstream->outbuf;
199 zstream->outbuf_used = sizeof(*hdr);
200 return o_stream_create(&zstream->ostream, output,