changeset 986:4e86cf312d6c

buffer: add function to get a mutable pointer to the buffer data Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Fri, 04 Sep 2020 07:34:28 -0400
parents 013adc5c54dd
children 616a36d39703
files include/jeffpc/buffer.h tests/test_buffer.c
diffstat 2 files changed, 40 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/include/jeffpc/buffer.h	Wed Sep 02 21:21:18 2020 -0400
+++ b/include/jeffpc/buffer.h	Fri Sep 04 07:34:28 2020 -0400
@@ -105,12 +105,17 @@
 	return buffer->off;
 }
 
-static inline const void *buffer_data(struct buffer *buffer)
+static inline void *buffer_data_mutable(struct buffer *buffer)
 {
 	return buffer->data;
 }
 
-static inline const void *buffer_data_current(struct buffer *buffer)
+static inline const void *buffer_data(struct buffer *buffer)
+{
+	return buffer_data_mutable(buffer);
+}
+
+static inline void *buffer_data_current_mutable(struct buffer *buffer)
 {
 	if (!buffer->data)
 		return NULL;
@@ -119,6 +124,11 @@
 	return buffer->data + buffer->off;
 }
 
+static inline const void *buffer_data_current(struct buffer *buffer)
+{
+	return buffer_data_current_mutable(buffer);
+}
+
 static inline int buffer_append_c(struct buffer *buffer, char c)
 {
 	return buffer_append(buffer, &c, 1);
--- a/tests/test_buffer.c	Wed Sep 02 21:21:18 2020 -0400
+++ b/tests/test_buffer.c	Fri Sep 04 07:34:28 2020 -0400
@@ -31,6 +31,25 @@
 	"60e9149e-d039-e32b-b25d-c995b28bf890" \
 	"40f0fddc-ddca-4ff5-cd81-b0ae4c7d6123"
 
+/*
+ * Get the buffer data, but make sure that both const and mutable versions
+ * return the same pointer.
+ */
+static inline const void *get_buffer_data(struct buffer *buf)
+{
+	const void *data;
+	void *mdata;
+
+	data = buffer_data(buf);
+	mdata = buffer_data_mutable(buf);
+
+	if (data != mdata)
+		fail("buffer_data() != buffer_data_mutable(): %p != %p",
+		     data, mdata);
+
+	return data;
+}
+
 /* allocate a heap buffer - either on the heap or on the stack */
 static inline struct buffer *alloc_heap_buffer(struct buffer *buf, size_t size)
 {
@@ -58,7 +77,7 @@
 	size_t len;
 	size_t i;
 
-	data = buffer_data(buffer);
+	data = get_buffer_data(buffer);
 	len = buffer_size(buffer);
 
 	if (startoff > len)
@@ -77,11 +96,11 @@
 {
 	const void *ptr;
 
-	ptr = buffer_data(buffer);
+	ptr = get_buffer_data(buffer);
 	if (ptr == NULL)
-		fail("buffer_data() returned NULL");
+		fail("get_buffer_data() returned NULL");
 	if (IS_ERR(ptr))
-		fail("buffer_data() returned error: %s",
+		fail("get_buffer_data() returned error: %s",
 		     xstrerror(PTR_ERR(ptr)));
 }
 
@@ -89,14 +108,15 @@
 {
 	const void *ptr;
 
-	ptr = buffer_data(buffer);
+	ptr = get_buffer_data(buffer);
 	if (ptr == expected)
 		return;
 
 	if (IS_ERR(ptr))
-		fail("buffer_data() returned error: %s (%p expected)",
+		fail("get_buffer_data() returned error: %s (%p expected)",
 		     xstrerror(PTR_ERR(ptr)), expected);
-	fail("buffer_data() returned %p, but %p was expected", ptr, expected);
+	fail("get_buffer_data() returned %p, but %p was expected", ptr,
+	     expected);
 }
 
 static inline void check_data_null(struct buffer *buffer)
@@ -231,7 +251,7 @@
 
 		inner_loop(256, buffer, data, check_data);
 
-		if (memcmp(data, buffer_data(buffer), sizeof(data)))
+		if (memcmp(data, get_buffer_data(buffer), sizeof(data)))
 			fail("buffered data mismatches expectations");
 
 		buffer_free(buffer);