# HG changeset patch # User Josef 'Jeff' Sipek # Date 1599219268 14400 # Node ID 4e86cf312d6c04c2a33e17e1a85ab5866566ebc2 # Parent 013adc5c54ddfdcf0502dc80bdacbe64ef6708f0 buffer: add function to get a mutable pointer to the buffer data Signed-off-by: Josef 'Jeff' Sipek diff -r 013adc5c54dd -r 4e86cf312d6c include/jeffpc/buffer.h --- 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); diff -r 013adc5c54dd -r 4e86cf312d6c tests/test_buffer.c --- 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);