aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/rbuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/rbuffer.c')
-rw-r--r--src/nvim/rbuffer.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/nvim/rbuffer.c b/src/nvim/rbuffer.c
index 493c079d4c..cf2e10f90d 100644
--- a/src/nvim/rbuffer.c
+++ b/src/nvim/rbuffer.c
@@ -29,6 +29,23 @@ RBuffer *rbuffer_new(size_t capacity)
return rv;
}
+/// Creates a new `RBuffer` instance for reading from a buffer.
+///
+/// Must not be used with any write function like rbuffer_write_ptr or rbuffer_produced!
+RBuffer *rbuffer_new_wrap_buf(char *data, size_t len)
+ FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET
+{
+ RBuffer *rv = xcalloc(1, sizeof(RBuffer));
+ rv->full_cb = rv->nonfull_cb = NULL;
+ rv->data = NULL;
+ rv->size = len;
+ rv->read_ptr = data;
+ rv->write_ptr = data + len;
+ rv->end_ptr = NULL;
+ rv->temp = NULL;
+ return rv;
+}
+
void rbuffer_free(RBuffer *buf) FUNC_ATTR_NONNULL_ALL
{
xfree(buf->temp);
@@ -129,7 +146,7 @@ void rbuffer_consumed(RBuffer *buf, size_t count)
assert(count <= buf->size);
buf->read_ptr += count;
- if (buf->read_ptr >= buf->end_ptr) {
+ if (buf->end_ptr && buf->read_ptr >= buf->end_ptr) {
buf->read_ptr -= rbuffer_capacity(buf);
}