src/buffer.c

changeset 1515
f024313c08f1
parent 1514
ee5d668a71e4
child 1516
95b094472e9a
--- a/src/buffer.c	Wed Nov 26 23:06:12 2025 +0100
+++ b/src/buffer.c	Wed Nov 26 23:22:03 2025 +0100
@@ -238,10 +238,30 @@
     return buffer->pos >= buffer->size;
 }
 
-int cxBufferMinimumCapacity(
-        CxBuffer *buffer,
-        size_t newcap
-) {
+int cxBufferReserve(CxBuffer *buffer, size_t newcap) {
+    if (newcap <= buffer->capacity) {
+        return 0;
+    }
+    const int force_copy_flags = CX_BUFFER_COPY_ON_WRITE | CX_BUFFER_COPY_ON_EXTEND;
+    if (buffer->flags & force_copy_flags) {
+        void *newspace = cxMalloc(buffer->allocator, newcap);
+        if (NULL == newspace) return -1;
+        memcpy(newspace, buffer->space, buffer->size);
+        buffer->space = newspace;
+        buffer->capacity = newcap;
+        buffer->flags &= ~force_copy_flags;
+        buffer->flags |= CX_BUFFER_FREE_CONTENTS;
+        return 0;
+    } else if (cxReallocate(buffer->allocator,
+                     (void **) &buffer->bytes, newcap) == 0) {
+        buffer->capacity = newcap;
+        return 0;
+    } else {
+        return -1; // LCOV_EXCL_LINE
+    }
+}
+
+int cxBufferMinimumCapacity(CxBuffer *buffer, size_t newcap) {
     if (newcap <= buffer->capacity) {
         return 0;
     }
@@ -267,24 +287,7 @@
         // this gives a full additional page (which is good)
     }
 
-
-    const int force_copy_flags = CX_BUFFER_COPY_ON_WRITE | CX_BUFFER_COPY_ON_EXTEND;
-    if (buffer->flags & force_copy_flags) {
-        void *newspace = cxMalloc(buffer->allocator, newcap);
-        if (NULL == newspace) return -1;
-        memcpy(newspace, buffer->space, buffer->size);
-        buffer->space = newspace;
-        buffer->capacity = newcap;
-        buffer->flags &= ~force_copy_flags;
-        buffer->flags |= CX_BUFFER_FREE_CONTENTS;
-        return 0;
-    } else if (cxReallocate(buffer->allocator,
-                     (void **) &buffer->bytes, newcap) == 0) {
-        buffer->capacity = newcap;
-        return 0;
-    } else {
-        return -1; // LCOV_EXCL_LINE
-    }
+    return cxBufferReserve(buffer, newcap);
 }
 
 void cxBufferShrink(

mercurial