aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/rbuffer.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-05-29 13:23:14 +0200
committerGitHub <noreply@github.com>2024-05-29 13:23:14 +0200
commitf55767afe28a7d90421b97af88e18e2828ed9c01 (patch)
treed8d3c57a763d24154b3b564f167c22d32d585742 /src/nvim/rbuffer.c
parentefa45832ea02e777ce3f5556ef3cd959c164ec24 (diff)
parentb386334cdbbc3e9d79773243fdbd53091488e14d (diff)
downloadrneovim-f55767afe28a7d90421b97af88e18e2828ed9c01.tar.gz
rneovim-f55767afe28a7d90421b97af88e18e2828ed9c01.tar.bz2
rneovim-f55767afe28a7d90421b97af88e18e2828ed9c01.zip
Merge pull request #29016 from bfredl/shadareader
refactor(shada): remove ShaDaReadDef secondary wrapper
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);
}