Esempio n. 1
0
static ssize_t i_stream_fs_file_read(struct istream_private *stream)
{
    struct fs_file_istream *fstream = (struct fs_file_istream *)stream;
    struct istream *input;

    if (fstream->istream.parent == NULL) {
        input = fs_read_stream(fstream->file,
                               i_stream_get_max_buffer_size(&stream->istream));
        i_stream_init_parent(stream, input);
        i_stream_unref(&input);
    }

    i_stream_seek(stream->parent, stream->parent_start_offset +
                  stream->istream.v_offset);
    return i_stream_read_copy_from_parent(&stream->istream);
}
Esempio n. 2
0
struct istream *
i_stream_create(struct istream_private *_stream, struct istream *parent, int fd)
{
	_stream->fd = fd;
	if (parent != NULL)
		i_stream_init_parent(_stream, parent);
	_stream->istream.real_stream = _stream;

	if (_stream->iostream.close == NULL)
		_stream->iostream.close = i_stream_default_close;
	if (_stream->iostream.destroy == NULL)
		_stream->iostream.destroy = i_stream_default_destroy;
	if (_stream->seek == NULL) {
		_stream->seek = _stream->istream.seekable ?
			i_stream_default_seek_seekable :
			i_stream_default_seek_nonseekable;
	}
	if (_stream->stat == NULL)
		_stream->stat = i_stream_default_stat;
	if (_stream->get_size == NULL)
		_stream->get_size = i_stream_default_get_size;
	if (_stream->iostream.set_max_buffer_size == NULL) {
		_stream->iostream.set_max_buffer_size =
			i_stream_default_set_max_buffer_size;
	}
	if (_stream->init_buffer_size == 0)
		_stream->init_buffer_size = I_STREAM_MIN_SIZE;

	memset(&_stream->statbuf, 0, sizeof(_stream->statbuf));
	_stream->statbuf.st_size = -1;
	_stream->statbuf.st_atime =
		_stream->statbuf.st_mtime =
		_stream->statbuf.st_ctime = ioloop_time;

	io_stream_init(&_stream->iostream);
	return &_stream->istream;
}