From 492f5741c40bd573c4c672ca353bbd636d47d8ae Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 22 Mar 2025 18:21:02 +0000 Subject: [PATCH] buffer: Automatically shrink the buffer Signed-off-by: Michael Tremer --- src/pakfire/buffer.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pakfire/buffer.c b/src/pakfire/buffer.c index de99b0ea..55db5e88 100644 --- a/src/pakfire/buffer.c +++ b/src/pakfire/buffer.c @@ -27,6 +27,9 @@ // Use chunks of 4k size #define CHUNK_SIZE 4096 +// Shrink the buffer once we are wasting more than this +#define MAX_WASTAGE (CHUNK_SIZE * 8) + void pakfire_buffer_set_max_length(struct pakfire_buffer* self, size_t max_length) { self->max_length = max_length; } @@ -71,7 +74,11 @@ static int pakfire_buffer_grow(struct pakfire_buffer* self, size_t length) { // Shrinks the buffer to its minimum size static int pakfire_buffer_shrink(struct pakfire_buffer* self) { - return pakfire_buffer_resize(self, self->length); + // Shrink whenever we hit the wastage level + if (self->length - self->used < MAX_WASTAGE) + return 0; + + return pakfire_buffer_resize(self, self->used); } int pakfire_buffer_push(struct pakfire_buffer* self, const char* data, size_t length) { @@ -132,7 +139,8 @@ int pakfire_buffer_pop(struct pakfire_buffer* self, size_t length) { memmove(self->data, self->data + length, self->used - length); self->used -= length; - return 0; + // Shrink the buffer if we need to + return pakfire_buffer_shrink(self); } size_t pakfire_buffer_find_line(struct pakfire_buffer* self) { -- 2.39.5