istream-data.c revision a0eb3ee018793937018672a75afe320375abe3b4
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2002-2003 Timo Sirainen */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include "lib.h"
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include "istream-internal.h"
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstatic ssize_t _read(struct istream_private *stream ATTR_UNUSED)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen{
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen stream->istream.eof = TRUE;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return -1;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen}
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
7a7d2aa11e46195e2d92d6c337d7e78052a5ce67Timo Sirainenstatic void _seek(struct istream_private *stream, uoff_t v_offset,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen bool mark ATTR_UNUSED)
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen{
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen stream->skip = v_offset;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen stream->istream.v_offset = v_offset;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen}
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct istream *i_stream_create_from_data(const void *data, size_t size)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen{
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct istream_private *stream;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen stream = i_new(struct istream_private, 1);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen stream->buffer = data;
499fec3443374cc89fb8c83b8027c1614097d7a3Timo Sirainen stream->pos = size;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
f5a7396b31762a1f876517e13ce9065820139f7cTimo Sirainen stream->read = _read;
f5a7396b31762a1f876517e13ce9065820139f7cTimo Sirainen stream->seek = _seek;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen stream->istream.blocking = TRUE;
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen stream->istream.seekable = TRUE;
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen (void)i_stream_create(stream, -1, 0);
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen stream->statbuf.st_size = size;
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen return &stream->istream;
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen}
132487b9a47c2eb6fc80cfa2b0aaf82c6dc3af56Timo Sirainen