]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
abuf: Allow incrementing the size
authorSimon Glass <sjg@chromium.org>
Mon, 14 Aug 2023 22:40:22 +0000 (16:40 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 25 Aug 2023 17:54:33 +0000 (13:54 -0400)
Provide a convenience function to increment the size of the abuf.

Signed-off-by: Simon Glass <sjg@chromium.org>
include/abuf.h
lib/abuf.c
test/lib/abuf.c

index 9badda64e4faf06da3845cb9eca9b7d3c695f85a..be98ec78c860fb1ff1da43d8969bbce48034e321 100644 (file)
@@ -90,6 +90,15 @@ void abuf_map_sysmem(struct abuf *abuf, ulong addr, size_t size);
  */
 bool abuf_realloc(struct abuf *abuf, size_t new_size);
 
+/**
+ * abuf_realloc_inc() - Increment abuf size by a given amount
+ *
+ * @abuf: abuf to adjust
+ * @inc: Size incrmement to use (the buffer size will be increased by this much)
+ * Return: true if OK, false if out of memory
+ */
+bool abuf_realloc_inc(struct abuf *abuf, size_t inc);
+
 /**
  * abuf_uninit_move() - Return the allocated contents and uninit the abuf
  *
index bd270467dd452e52d7aee120195fa39902353262..ce2cff53dc933bf18e4c87daf8abfeca441abc15 100644 (file)
@@ -82,6 +82,11 @@ bool abuf_realloc(struct abuf *abuf, size_t new_size)
        }
 }
 
+bool abuf_realloc_inc(struct abuf *abuf, size_t inc)
+{
+       return abuf_realloc(abuf, abuf->size + inc);
+}
+
 void *abuf_uninit_move(struct abuf *abuf, size_t *sizep)
 {
        void *ptr;
index 42ee4c1755268a7179b8e7e832a55807ee7c17da..42803b20e2a1e4c5293588afd12ec441ce61e72e 100644 (file)
@@ -155,6 +155,31 @@ static int lib_test_abuf_realloc_size(struct unit_test_state *uts)
 }
 LIB_TEST(lib_test_abuf_realloc_size, 0);
 
+/* Test abuf_realloc_inc() */
+static int lib_test_abuf_realloc_inc(struct unit_test_state *uts)
+{
+       struct abuf buf;
+       ulong start;
+
+       start = ut_check_free();
+
+       abuf_init(&buf);
+       ut_asserteq(0, buf.size);
+       ut_asserteq(false, buf.alloced);
+
+       abuf_realloc_inc(&buf, 20);
+       ut_asserteq(20, buf.size);
+       ut_asserteq(true, buf.alloced);
+
+       abuf_uninit(&buf);
+
+       /* Check for memory leaks */
+       ut_assertok(ut_check_delta(start));
+
+       return 0;
+}
+LIB_TEST(lib_test_abuf_realloc_inc, 0);
+
 /* Test handling of buffers that are too large */
 static int lib_test_abuf_large(struct unit_test_state *uts)
 {