]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: buffer - Add buffer_{write,append,insert}_array() helpers
authoruwezkhan06 <uwezkhan053@gmail.com>
Tue, 21 Apr 2026 20:24:22 +0000 (20:24 +0000)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Sat, 2 May 2026 05:30:11 +0000 (05:30 +0000)
src/lib/buffer.c
src/lib/buffer.h

index 5b38f23368b4ade9af782e95f4ff76350c67dbf4..e25003c7a98be6878ae9fe395e593c346835cafb 100644 (file)
@@ -246,6 +246,12 @@ void buffer_write(buffer_t *_buf, size_t pos,
                memcpy(buf->w_buffer + pos, data, data_size);
 }
 
+void buffer_write_array(buffer_t *buf, size_t pos,
+                       const void *data, size_t count, size_t size)
+{
+       buffer_write(buf, pos, data, MALLOC_MULTIPLY(count, size));
+}
+
 void buffer_append(buffer_t *_buf, const void *data, size_t data_size)
 {
        struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
@@ -257,6 +263,12 @@ void buffer_append(buffer_t *_buf, const void *data, size_t data_size)
        }
 }
 
+void buffer_append_array(buffer_t *buf, const void *data,
+                        size_t count, size_t size)
+{
+       buffer_append(buf, data, MALLOC_MULTIPLY(count, size));
+}
+
 void buffer_append_c(buffer_t *_buf, unsigned char chr)
 {
        struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
@@ -279,6 +291,12 @@ void buffer_insert(buffer_t *_buf, size_t pos,
        }
 }
 
+void buffer_insert_array(buffer_t *buf, size_t pos,
+                        const void *data, size_t count, size_t size)
+{
+       buffer_insert(buf, pos, data, MALLOC_MULTIPLY(count, size));
+}
+
 void buffer_delete(buffer_t *_buf, size_t pos, size_t size)
 {
        struct real_buffer *buf = container_of(_buf, struct real_buffer, buf);
index c2c1ced3cac7d1327976056c794d87f808150cfe..851522ec421b4c1674a2c461ba25a627feb35d9b 100644 (file)
@@ -61,8 +61,12 @@ pool_t buffer_get_pool(const buffer_t *buf) ATTR_PURE;
    current size, it is zero-filled up to that point (even if data_size==0). */
 void buffer_write(buffer_t *buf, size_t pos,
                  const void *data, size_t data_size);
+void buffer_write_array(buffer_t *buf, size_t pos,
+                       const void *data, size_t count, size_t size);
 /* Append data to buffer. */
 void buffer_append(buffer_t *buf, const void *data, size_t data_size);
+void buffer_append_array(buffer_t *buf, const void *data,
+                        size_t count, size_t size);
 /* Append character to buffer. */
 void buffer_append_c(buffer_t *buf, unsigned char chr);
 
@@ -70,6 +74,8 @@ void buffer_append_c(buffer_t *buf, unsigned char chr);
    the current buffer size, the gap is zero-filled. */
 void buffer_insert(buffer_t *buf, size_t pos,
                   const void *data, size_t data_size);
+void buffer_insert_array(buffer_t *buf, size_t pos,
+                        const void *data, size_t count, size_t size);
 /* Delete data with the indicated size from the buffer at position pos. The
    deleted block may cross the current buffer size boundary, which is ignored.
  */