ostream.c revision 5238111c460098d9cc8cc22527026138a278b9a4
76b43e4417bab52e913da39b5f5bc2a130d3f149Timo Sirainen/* Copyright (c) 2002-2003 Timo Sirainen */
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen#include "lib.h"
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen#include "istream.h"
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen#include "ostream-internal.h"
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainenvoid o_stream_ref(struct ostream *stream)
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen{
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen _io_stream_ref(&stream->real_stream->iostream);
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen}
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainenvoid o_stream_unref(struct ostream *stream)
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen{
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen _io_stream_unref(&stream->real_stream->iostream);
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen}
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainenvoid o_stream_close(struct ostream *stream)
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen{
2d340205d897e23fbecb40c8e63a4ca49bd6739bTimo Sirainen _io_stream_close(&stream->real_stream->iostream);
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen stream->closed = TRUE;
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen}
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainenvoid o_stream_set_flush_callback(struct ostream *stream,
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen stream_flush_callback_t *callback,
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen void *context)
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen{
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen struct _ostream *_stream = stream->real_stream;
01e451386c5f25189b13569ef4c9d2a19ee90d49Timo Sirainen
_stream->callback = callback;
_stream->context = context;
}
void o_stream_set_max_buffer_size(struct ostream *stream, size_t max_size)
{
_io_stream_set_max_buffer_size(&stream->real_stream->iostream,
max_size);
}
void o_stream_cork(struct ostream *stream)
{
struct _ostream *_stream = stream->real_stream;
if (stream->closed)
return;
_stream->cork(_stream, TRUE);
}
void o_stream_uncork(struct ostream *stream)
{
struct _ostream *_stream = stream->real_stream;
if (stream->closed)
return;
_stream->cork(_stream, FALSE);
}
int o_stream_flush(struct ostream *stream)
{
struct _ostream *_stream = stream->real_stream;
if (stream->closed)
return -1;
return _stream->flush(_stream);
}
void o_stream_set_flush_pending(struct ostream *stream, int set)
{
struct _ostream *_stream = stream->real_stream;
_stream->flush_pending(_stream, set);
}
size_t o_stream_get_buffer_used_size(struct ostream *stream)
{
struct _ostream *_stream = stream->real_stream;
return _stream->get_used_size(_stream);
}
int o_stream_seek(struct ostream *stream, uoff_t offset)
{
struct _ostream *_stream = stream->real_stream;
if (stream->closed)
return -1;
return _stream->seek(_stream, offset);
}
ssize_t o_stream_send(struct ostream *stream, const void *data, size_t size)
{
struct const_iovec iov;
iov.iov_base = data;
iov.iov_len = size;
return o_stream_sendv(stream, &iov, 1);
}
ssize_t o_stream_sendv(struct ostream *stream, const struct const_iovec *iov,
size_t iov_count)
{
struct _ostream *_stream = stream->real_stream;
if (stream->closed)
return -1;
return _stream->sendv(_stream, iov, iov_count);
}
ssize_t o_stream_send_str(struct ostream *stream, const char *str)
{
return o_stream_send(stream, str, strlen(str));
}
off_t o_stream_send_istream(struct ostream *outstream,
struct istream *instream)
{
struct _ostream *_outstream = outstream->real_stream;
if (outstream->closed || instream->closed)
return -1;
return _outstream->send_istream(_outstream, instream);
}
struct ostream *_o_stream_create(struct _ostream *_stream, pool_t pool)
{
_stream->ostream.real_stream = _stream;
_io_stream_init(pool, &_stream->iostream);
return &_stream->ostream;
}