istream-seekable.c revision 7efee0bb408b0d5253e41997857bdda57855cdc7
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (C) 2005 Timo Sirainen */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen unsigned int cur_idx;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstatic void _close(struct _iostream *stream __attr_unused__)
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen struct seekable_istream *sstream = (struct seekable_istream *)stream;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen unsigned int i;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct seekable_istream *sstream = (struct seekable_istream *)stream;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen unsigned int i;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstatic void _set_max_buffer_size(struct _iostream *stream, size_t max_size)
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen struct seekable_istream *sstream = (struct seekable_istream *)stream;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen unsigned int i;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen i_stream_set_max_buffer_size(sstream->fd_input, max_size);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen i_stream_set_max_buffer_size(sstream->input[i], max_size);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstatic int copy_to_temp_file(struct seekable_istream *sstream)
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen /* create a temporary file */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen fd = open(path, O_RDWR | O_EXCL | O_CREAT, 0600);
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen /* we just want the fd, unlink it */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen /* shouldn't happen.. */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen /* copy our currently read buffer to it */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen if (write_full(fd, sstream->buffer->data, sstream->buffer->used) < 0) {
if (size != 0)
return size;
return ret;
const unsigned char *data;
return FALSE;
if (*ret <= 0)
return TRUE;
return TRUE;
const unsigned char *data;
return ret;
if (ret <= 0)
return ret;
if (ret <= 0) {
return ret;
if (ret == 0) {
struct istream *
const unsigned char *data;
unsigned int count;