vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 9a730c22995147e460ee7ef063251541922718a9
parent 9995abd1c4e3531610380b34b40e28331cc5a664
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sat, 20 Aug 2016 16:01:22 +0200

buffer: add buffer_remove implementation

Diffstat:
Mbuffer.c | 10++++++++++
Mbuffer.h | 2++
2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/buffer.c b/buffer.c @@ -59,6 +59,16 @@ bool buffer_put0(Buffer *buf, const char *data) { return buffer_put(buf, data, strlen(data)+1); } +bool buffer_remove(Buffer *buf, size_t pos, size_t len) { + if (len == 0) + return true; + if (pos + len > buf->len) + return false; + memmove(buf->data + pos, buf->data + pos + len, buf->len - pos - len); + buf->len -= len; + return true; +} + bool buffer_insert(Buffer *buf, size_t pos, const void *data, size_t len) { if (pos > buf->len) return false; diff --git a/buffer.h b/buffer.h @@ -28,6 +28,8 @@ bool buffer_terminate(Buffer*); bool buffer_put(Buffer*, const void *data, size_t len); /* same but with NUL-terminated data */ bool buffer_put0(Buffer*, const char *data); +/* remove len bytes from the buffer starting at pos */ +bool buffer_remove(Buffer*, size_t pos, size_t len); /* insert arbitrary data of length len at pos (in [0, buf->len]) */ bool buffer_insert(Buffer*, size_t pos, const void *data, size_t len); /* insert NUL-terminate data at pos (in [0, buf->len]) */