aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/rbuffer.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-05-26 11:36:18 +0200
committerbfredl <bjorn.linse@gmail.com>2024-05-28 13:36:54 +0200
commitb386334cdbbc3e9d79773243fdbd53091488e14d (patch)
tree83e392c19f1eb5af86027396f3ba6b30e56db8ea /src/nvim/rbuffer.c
parentc272f30b1fdd62ee59fac1004ecde97df4f2bb08 (diff)
downloadrneovim-b386334cdbbc3e9d79773243fdbd53091488e14d.tar.gz
rneovim-b386334cdbbc3e9d79773243fdbd53091488e14d.tar.bz2
rneovim-b386334cdbbc3e9d79773243fdbd53091488e14d.zip
refactor(shada): remove ShaDaReadDef secondary wrapper
`FileDescriptor` is already a wrapper around an fd and a buffer. By allowing to just use the buffer without an fd, it can already handle in-memory reads.
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);
}