Lines Matching refs:tee
5 #include "istream-tee.h"
17 struct tee_istream *tee;
23 static void tee_streams_update_buffer(struct tee_istream *tee)
25 struct tee_child_istream *tstream = tee->children;
29 data = i_stream_get_data(tee->input, &size);
38 i_assert(tstream->istream.istream.v_offset >= tee->input->v_offset);
40 tee->input->v_offset;
45 tee->input->v_offset;
47 tee->input->real_stream->access_counter;
51 static void tee_streams_skip(struct tee_istream *tee)
53 struct tee_child_istream *tstream = tee->children;
64 i_stream_skip(tee->input, min_skip);
65 tee_streams_update_buffer(tee);
74 tee_streams_skip(tstream->tee);
80 struct tee_istream *tee = tstream->tee;
83 if (tstream->istream.istream.v_offset > tee->max_read_offset)
84 tee->max_read_offset = tstream->istream.istream.v_offset;
86 for (p = &tee->children; *p != NULL; p = &(*p)->next) {
93 if (tee->children == NULL) {
94 /* last child. the tee is now destroyed */
95 i_assert(tee->input->v_offset <= tee->max_read_offset);
96 i_stream_skip(tee->input,
97 tee->max_read_offset - tee->input->v_offset);
99 i_stream_unref(&tee->input);
100 i_free(tee);
102 tee_streams_skip(tstream->tee);
115 i_stream_set_max_buffer_size(tstream->tee->input, max_size);
121 struct istream *input = tstream->tee->input;
130 tee_streams_update_buffer(tstream->tee);
134 /* last_high_offset contains how far we have read this child tee stream
142 tee_streams_skip(tstream->tee);
156 tee_streams_update_buffer(tstream->tee);
161 tee_streams_update_buffer(tstream->tee);
181 if (i_stream_stat(tstream->tee->input, exact, &st) < 0)
191 tee_streams_skip(tstream->tee);
192 if (i_stream_get_data_size(tstream->tee->input) != 0) {
193 i_panic("tee-istream: i_stream_sync() called "
196 i_stream_sync(tstream->tee->input);
201 struct tee_istream *tee;
203 tee = i_new(struct tee_istream, 1);
206 tee->input = input;
208 tee->input = i_stream_create_limit(input, (uoff_t)-1);
210 return tee;
213 struct istream *tee_i_stream_create_child(struct tee_istream *tee)
216 struct istream *ret, *input = tee->input;
219 tstream->tee = tee;
231 tstream->next = tee->children;
232 tee->children = tstream;
237 /* we keep the reference in tee stream, no need for extra references */