istream-data.c revision 9e095dd6a77097356aca8216356d4d71ef1bea45
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2002-2003 Timo Sirainen */
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen#include "lib.h"
df8046c9a4f6bc2a478ad1e74504d50f3110c906Timo Sirainen#include "istream-internal.h"
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainenstatic void _close(struct _iostream *stream __attr_unused__)
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen{
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen}
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstatic void _destroy(struct _iostream *stream __attr_unused__)
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen{
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen}
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstatic void _set_max_buffer_size(struct _iostream *stream __attr_unused__,
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen size_t max_size __attr_unused__)
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen{
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen}
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainenstatic ssize_t _read(struct _istream *stream __attr_unused__)
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen{
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen stream->istream.eof = TRUE;
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen return -1;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen}
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstatic void _seek(struct _istream *stream, uoff_t v_offset)
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen{
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen stream->skip = v_offset;
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen stream->istream.v_offset = v_offset;
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen}
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstatic uoff_t _get_size(struct _istream *stream)
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen{
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen return stream->pos;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen}
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstruct istream *i_stream_create_from_data(pool_t pool, const void *data,
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen size_t size)
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen{
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen struct _istream *stream;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream = p_new(pool, struct _istream, 1);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream->buffer = data;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen stream->pos = size;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream->iostream.close = _close;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream->iostream.destroy = _destroy;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen stream->iostream.set_max_buffer_size = _set_max_buffer_size;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream->read = _read;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream->seek = _seek;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen stream->get_size = _get_size;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen return _i_stream_create(stream, pool, -1, 0);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen}
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen