This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] alloc_buffer: Return unqualified pointer type in alloc_buffer_next
- From: Florian Weimer <fweimer at redhat dot com>
- To: libc-alpha at sourceware dot org
- Date: Fri, 08 Mar 2019 21:46:33 +0100
- Subject: [PATCH] alloc_buffer: Return unqualified pointer type in alloc_buffer_next
alloc_buffer_next is useful for peeking to the remaining part of the
buffer and update it, with subsequent allocation (once the length
is known) using alloc_buffer_alloc_bytes. This is not as robust
as the other interfaces, but it allows using alloc_buffer with
string-writing interfaces such as snprintf and ns_name_ntop.
2019-03-08 Florian Weimer <fweimer@redhat.com>
* include/alloc_buffer.h (alloc_buffer_alloc_bytes): Update
comment.
(alloc_buffer_next): Change return type to non-const.
diff --git a/include/alloc_buffer.h b/include/alloc_buffer.h
index f27cbb65ca..7f68f46eac 100644
--- a/include/alloc_buffer.h
+++ b/include/alloc_buffer.h
@@ -183,7 +183,7 @@ alloc_buffer_add_byte (struct alloc_buffer *buf, unsigned char b)
NULL is returned if there is not enough room, and the buffer is
marked as failed, or if the buffer has already failed.
(Zero-length allocations from an empty buffer which has not yet
- failed succeed.) */
+ failed succeed.) The buffer contents is not modified. */
static inline __attribute__ ((nonnull (1))) void *
alloc_buffer_alloc_bytes (struct alloc_buffer *buf, size_t length)
{
@@ -302,9 +302,13 @@ __alloc_buffer_next (struct alloc_buffer *buf, size_t align)
alloc_buffer_alloc returns the same pointer). Note that the buffer
is still aligned according to the requirements of TYPE. The effect
of this function is similar to allocating a zero-length array from
- the buffer. */
+ the buffer. It is possible to use the return pointer to write to
+ the buffer and consume the written bytes using
+ alloc_buffer_alloc_bytes (which does not change the buffer
+ contents), but the calling code needs to perform manual length
+ checks using alloc_buffer_size. */
#define alloc_buffer_next(buf, type) \
- ((const type *) __alloc_buffer_next \
+ ((type *) __alloc_buffer_next \
(buf, __alloc_buffer_assert_align (__alignof__ (type))))
/* Internal function. Allocate an array. */