istream.c revision 51d379cbc50242a13462d0fded50e013eb00cc07
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2002-2017 Dovecot authors, see the included COPYING file */
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainenstatic bool i_stream_is_buffer_invalid(const struct istream_private *stream);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainenvoid i_stream_set_name(struct istream *stream, const char *name)
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen stream->real_stream->iostream.name = i_strdup(name);
f7539a17ea306191b53b8f5e752e228937df9ec3Timo Sirainenconst char *i_stream_get_name(struct istream *stream)
f7539a17ea306191b53b8f5e752e228937df9ec3Timo Sirainen while (stream->real_stream->iostream.name == NULL) {
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainenstatic void i_stream_close_full(struct istream *stream, bool close_parents)
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen io_stream_close(&stream->real_stream->iostream, close_parents);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen io_stream_ref(&stream->real_stream->iostream);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen i_stream_snapshot_free(&_stream->prev_snapshot);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen if (!io_stream_unref(&(*stream)->real_stream->iostream)) {
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen i_stream_unref(&(*stream)->real_stream->parent);
ca98892a6b8a30ffc1fe26fcf02c7d59e3204e7eTimo Sirainen io_stream_free(&(*stream)->real_stream->iostream);
b42697a5749b85659a24316d97f1c208d469e4e8Timo Sirainenvoid i_stream_add_destroy_callback(struct istream *stream,
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen io_stream_add_destroy_callback(&stream->real_stream->iostream,
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainenvoid i_stream_remove_destroy_callback(struct istream *stream,
df00412606a00714a6e85383fa87fbdc7cc1fb5bTimo Sirainen io_stream_remove_destroy_callback(&stream->real_stream->iostream,
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen struct istream_private *_stream = stream->real_stream;
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainenconst char *i_stream_get_error(struct istream *stream)
3d6fdafca17c073606b63745ca8638e035e871f4Timo Sirainen /* we'll only return errors for streams that have stream_errno set or
17ad2164c747cedbf81dae1893063e71a3df0356Timo Sirainen that have reached EOF. we might be returning unintended error
3c493c276f599d9b9cd10764876d648003046954Timo Sirainen otherwise. */
f81f4bc282cd1944cec187bae89c0701a416ed2aTimo Sirainen for (s = stream; s != NULL; s = s->real_stream->parent) {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainenconst char *i_stream_get_disconnect_reason(struct istream *stream)
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen return io_stream_get_disconnect_reason(stream, NULL);
1108376e39a19912e8394e64e19b1bc6f6691cf6Timo Sirainenvoid i_stream_set_init_buffer_size(struct istream *stream, size_t size)
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainenvoid i_stream_set_max_buffer_size(struct istream *stream, size_t max_size)
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen io_stream_set_max_buffer_size(&stream->real_stream->iostream, max_size);
306cfd77100131c08b243de10f6d40500f4c27c6Timo Sirainensize_t i_stream_get_max_buffer_size(struct istream *stream)
9ffdc9d18870acef2e4dde99715d8528ff4b080dTimo Sirainen if (max_size < stream->real_stream->max_buffer_size)
61b0637759146621cbb7edcbd0b03a71cfd66dfeTimo Sirainen max_size = stream->real_stream->max_buffer_size;
62041dfb7d6ac6e9c633a557075999cdfcff7bd5Timo Sirainenvoid i_stream_set_return_partial_line(struct istream *stream, bool set)
c0d069950af1dbc6a4e5c3de3bf2e437796e3ae0Timo Sirainenvoid i_stream_set_persistent_buffers(struct istream *stream, bool set)
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen stream->real_stream->nonpersistent_buffers = !set;
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainenvoid i_stream_set_blocking(struct istream *stream, bool blocking)
e3aeeb634245e80d4f643f8d2eea11d6b72336d8Timo Sirainen fd_set_nonblock(stream->real_stream->fd, !blocking);
1460ef7a18c53216ddb4a94bb62fba96076aae8eTimo Sirainenstatic void i_stream_update(struct istream_private *stream)
return TRUE;
return FALSE;
struct istream_snapshot *
return prev_snapshot;
return snapshot;
switch (ret) {
return ret;
ret = 0;
return ret;
return TRUE;
return FALSE;
int ret;
return ret;
return abs_offset;
char *ret;
end = i;
return ret;
return NULL;
const unsigned char *pos;
return NULL;
char *line;
return NULL;
return NULL;
return line;
return FALSE;
return FALSE;
return TRUE;
*size_r = 0;
return uchar_empty_ptr;
*size_r = 0;
return uchar_empty_ptr;
return size;
*size_r = 0;
return NULL;
if (ret > 0)
} while (ret > 0);
if (ret == 0) {
if (read_more) {
void *new_buffer;
return *size_r > 0;
return ret;
return FALSE;
return TRUE;
if (!pending)
bool close_parent)
if (available == 0) {
struct istream *
struct istream *
return input;