view src/lib/istream-data.c @ 6419:3a960ffa5de8 HEAD

If iostream.close/destroy isn't set by the stream implementation, use a default no-op function.
author Timo Sirainen <tss@iki.fi>
date Sun, 16 Sep 2007 12:51:41 +0300
parents b0096861c390
children a8b515e1a26f
line wrap: on
line source

/* Copyright (c) 2002-2003 Timo Sirainen */

#include "lib.h"
#include "istream-internal.h"

static ssize_t _read(struct istream_private *stream ATTR_UNUSED)
{
	stream->istream.eof = TRUE;
	return -1;
}

static void _seek(struct istream_private *stream, uoff_t v_offset,
		  bool mark ATTR_UNUSED)
{
	stream->skip = v_offset;
	stream->istream.v_offset = v_offset;
}

struct istream *i_stream_create_from_data(const void *data, size_t size)
{
	struct istream_private *stream;

	stream = i_new(struct istream_private, 1);
	stream->buffer = data;
	stream->pos = size;

	stream->read = _read;
	stream->seek = _seek;

	stream->istream.blocking = TRUE;
	stream->istream.seekable = TRUE;
	(void)i_stream_create(stream, -1, 0);
	stream->statbuf.st_size = size;
	return &stream->istream;
}