diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-05-26 11:36:18 +0200 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-05-28 13:36:54 +0200 |
commit | b386334cdbbc3e9d79773243fdbd53091488e14d (patch) | |
tree | 83e392c19f1eb5af86027396f3ba6b30e56db8ea /src/nvim/rbuffer.c | |
parent | c272f30b1fdd62ee59fac1004ecde97df4f2bb08 (diff) | |
download | rneovim-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.c | 19 |
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); } |