istream.c revision 6449bd276af37b3e0b81a9c47ecd01f39a2cba53
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* Copyright (c) 2002-2003 Timo Sirainen */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen _io_stream_ref(&stream->real_stream->iostream);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen _io_stream_unref(&stream->real_stream->iostream);
e4b09b008ab544eb8994beecbfffefa21d855e43Timo Sirainen struct _istream *_stream = stream->real_stream;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen _io_stream_close(&stream->real_stream->iostream);
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainenvoid i_stream_set_max_buffer_size(struct istream *stream, size_t max_size)
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen _io_stream_set_max_buffer_size(&stream->real_stream->iostream,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid i_stream_set_blocking(struct istream *stream, int timeout_msecs,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen _io_stream_set_blocking(&stream->real_stream->iostream, timeout_msecs,
ee246b46953e4b94b2f22e093373674fa9155500Timo Sirainenvoid i_stream_set_start_offset(struct istream *stream, uoff_t offset)
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct _istream *_stream = stream->real_stream;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen offset <= stream->start_offset + stream->v_size);
20a802016205bbcafc90f164f769ea801f88d014Timo Sirainen diff = (off_t)stream->start_offset - (off_t)offset;
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen /* reset buffer data */
024815ea2ffdda9ea79919f18e865663977f73eaTimo Sirainen _stream->skip = _stream->pos = _stream->high_pos = 0;
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainenvoid i_stream_set_read_limit(struct istream *stream, uoff_t v_offset)
024815ea2ffdda9ea79919f18e865663977f73eaTimo Sirainen struct _istream *_stream = stream->real_stream;
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen i_assert(stream->v_size == 0 || v_offset <= stream->v_size);
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen max_pos = v_offset - stream->v_offset + _stream->skip;
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen struct _istream *_stream = stream->real_stream;
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainen /* virtual limit reached */
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainenvoid i_stream_skip(struct istream *stream, uoff_t count)
1175f27441385a7011629f295f42708f9a3a4ffcTimo Sirainen struct _istream *_stream = stream->real_stream;
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen /* virtual limit reached */
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainenvoid i_stream_seek(struct istream *stream, uoff_t v_offset)
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen struct _istream *_stream = stream->real_stream;
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainen i_assert(stream->v_size == 0 || v_offset <= stream->v_size);
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainenchar *i_stream_next_line(struct istream *stream)
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainen struct _istream *_stream = stream->real_stream;
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainen i_error("i_stream_next_line() called for unmodifyable stream");
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen /* @UNSAFE */
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainen for (i = _stream->skip; i < _stream->pos; i++) {
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainen ret_buf = (char *) _stream->w_buffer + _stream->skip;
5a07b37a9df398b5189c14872a600384208ab74bTimo Sirainenchar *i_stream_read_next_line(struct istream *stream)
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainenconst unsigned char *i_stream_get_data(struct istream *stream, size_t *size)
7797aa2479e99aeb71057b7a2584b2cb72e4d3f8Timo Sirainen struct _istream *_stream = stream->real_stream;
31ddc75584c5cde53d2e78a737587f2e7fdcb0d2Timo Sirainenunsigned char *i_stream_get_modifyable_data(struct istream *stream,
8e7da21696c9f8a6d5e601243fb6172ec85d47b2Timo Sirainen struct _istream *_stream = stream->real_stream;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if (_stream->skip >= _stream->pos || _stream->w_buffer == NULL) {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenint i_stream_read_data(struct istream *stream, const unsigned char **data,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct _istream *_stream = stream->real_stream;
8830fab191cab8440281eb641dfdd93974b2933bTimo Sirainen while (_stream->pos - _stream->skip <= threshold) {
b2105c78f0fd58281317e6d777ded860f33153a3Timo Sirainen /* we need more data */
8e7da21696c9f8a6d5e601243fb6172ec85d47b2Timo Sirainenstruct istream *_i_stream_create(struct _istream *_stream, pool_t pool, int fd,