dovecot-2.2: istream-callback: Added i_stream_callback_get_buffe...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Aug 11 16:21:47 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/4cca68644428
changeset: 17702:4cca68644428
user: Timo Sirainen <tss at iki.fi>
date: Mon Aug 11 19:19:45 2014 +0300
description:
istream-callback: Added i_stream_callback_get_buffer().
diffstat:
src/lib/istream-callback.c | 23 +++++++++++++++--------
src/lib/istream-callback.h | 4 ++++
2 files changed, 19 insertions(+), 8 deletions(-)
diffs (77 lines):
diff -r 1b76af8a8ded -r 4cca68644428 src/lib/istream-callback.c
--- a/src/lib/istream-callback.c Mon Aug 11 17:43:25 2014 +0300
+++ b/src/lib/istream-callback.c Mon Aug 11 19:19:45 2014 +0300
@@ -11,7 +11,7 @@
void *context;
buffer_t *buf;
- size_t pending_size;
+ size_t prev_pos;
};
static void i_stream_callback_destroy(struct iostream_private *stream)
@@ -35,13 +35,13 @@
if (stream->skip > 0) {
buffer_delete(cstream->buf, 0, stream->skip);
stream->pos -= stream->skip;
+ cstream->prev_pos -= stream->skip;
stream->skip = 0;
}
- pos = cstream->buf->used;
- if (cstream->pending_size > 0) {
- i_assert(pos >= cstream->pending_size);
- pos -= cstream->pending_size;
- cstream->pending_size = 0;
+ i_assert(cstream->buf->used >= cstream->prev_pos);
+ pos = cstream->prev_pos;
+ if (cstream->buf->used > pos) {
+ /* data was added outside the callback */
} else if (!cstream->callback(cstream->buf, cstream->context)) {
/* EOF / error */
stream->istream.eof = TRUE;
@@ -58,7 +58,7 @@
}
i_assert(cstream->buf->used > pos);
stream->buffer = cstream->buf->data;
- stream->pos = cstream->buf->used;
+ cstream->prev_pos = stream->pos = cstream->buf->used;
return cstream->buf->used - pos;
}
@@ -91,7 +91,6 @@
(struct callback_istream *)input->real_stream;
buffer_append(cstream->buf, data, size);
- cstream->pending_size += size;
}
void i_stream_callback_append_str(struct istream *input, const char *str)
@@ -99,6 +98,14 @@
i_stream_callback_append(input, str, strlen(str));
}
+buffer_t *i_stream_callback_get_buffer(struct istream *input)
+{
+ struct callback_istream *cstream =
+ (struct callback_istream *)input->real_stream;
+
+ return cstream->buf;
+}
+
void i_stream_callback_set_error(struct istream *input, int stream_errno,
const char *error)
{
diff -r 1b76af8a8ded -r 4cca68644428 src/lib/istream-callback.h
--- a/src/lib/istream-callback.h Mon Aug 11 17:43:25 2014 +0300
+++ b/src/lib/istream-callback.h Mon Aug 11 19:19:45 2014 +0300
@@ -29,6 +29,10 @@
const void *data, size_t size);
void i_stream_callback_append_str(struct istream *input, const char *str);
+/* Returns the istream-callback's internal buffer. This buffer can be used to
+ append data to the stream. */
+buffer_t *i_stream_callback_get_buffer(struct istream *input);
+
void i_stream_callback_set_error(struct istream *input, int stream_errno,
const char *error);
More information about the dovecot-cvs
mailing list