git: 48c0fc0171a1 - main - hastd: Clean up the ebuf code

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Thu, 03 Sep 2026 07:59:16 UTC
The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=48c0fc0171a166c161a47602da94ef98021c3161

commit 48c0fc0171a166c161a47602da94ef98021c3161
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-09-03 07:51:32 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-09-03 07:58:54 +0000

    hastd: Clean up the ebuf code
    
    Rename the members of struct ebuf to match their function, replace
    bcopy() with memcpy(), add comments explaining what each function does.
    
    Reviewed by:    kevans, emaste
    Differential Revision:  https://reviews.freebsd.org/D59310
---
 sbin/hastd/ebuf.c | 92 ++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 57 insertions(+), 35 deletions(-)

diff --git a/sbin/hastd/ebuf.c b/sbin/hastd/ebuf.c
index 1ec8dd672c35..8a1de8a180c6 100644
--- a/sbin/hastd/ebuf.c
+++ b/sbin/hastd/ebuf.c
@@ -33,7 +33,7 @@
 #include <errno.h>
 #include <stdbool.h>
 #include <stdint.h>
-#include <strings.h>
+#include <string.h>
 #include <unistd.h>
 
 #include <pjdlog.h>
@@ -50,11 +50,11 @@ struct ebuf {
 	/* Magic to assert the caller uses valid structure. */
 	int		 eb_magic;
 	/* Address where we did the allocation. */
-	unsigned char	*eb_start;
+	unsigned char	*eb_buf;
 	/* Allocation end address. */
 	unsigned char	*eb_end;
 	/* Start of real data. */
-	unsigned char	*eb_used;
+	unsigned char	*eb_start;
 	/* Size of real data. */
 	size_t		 eb_size;
 };
@@ -62,6 +62,10 @@ struct ebuf {
 static int ebuf_head_extend(struct ebuf *eb, size_t size);
 static int ebuf_tail_extend(struct ebuf *eb, size_t size);
 
+/*
+ * Allocate an empty ebuf with the expectation that it will later need to
+ * hold at least `size` bytes.
+ */
 struct ebuf *
 ebuf_alloc(size_t size)
 {
@@ -74,25 +78,28 @@ ebuf_alloc(size_t size)
 		return (NULL);
 	page_size = getpagesize();
 	size += page_size;
-	eb->eb_start = malloc(size);
-	if (eb->eb_start == NULL) {
+	eb->eb_buf = malloc(size);
+	if (eb->eb_buf == NULL) {
 		rerrno = errno;
 		free(eb);
 		errno = rerrno;
 		return (NULL);
 	}
-	eb->eb_end = eb->eb_start + size;
+	eb->eb_end = eb->eb_buf + size;
 	/*
 	 * We set start address for real data not at the first entry, because
 	 * we want to be able to add data at the front.
 	 */
-	eb->eb_used = eb->eb_start + page_size / 4;
+	eb->eb_start = eb->eb_buf + page_size / 4;
 	eb->eb_size = 0;
 	eb->eb_magic = EBUF_MAGIC;
 
 	return (eb);
 }
 
+/*
+ * Free `eb`.
+ */
 void
 ebuf_free(struct ebuf *eb)
 {
@@ -101,17 +108,21 @@ ebuf_free(struct ebuf *eb)
 
 	eb->eb_magic = 0;
 
-	free(eb->eb_start);
+	free(eb->eb_buf);
 	free(eb);
 }
 
+/*
+ * Add `size` bytes to the front of `eb`, copied from `data` if not null
+ * and otherwise left uninitialized.
+ */
 int
 ebuf_add_head(struct ebuf *eb, const void *data, size_t size)
 {
 
 	PJDLOG_ASSERT(eb != NULL && eb->eb_magic == EBUF_MAGIC);
 
-	if (size > (size_t)(eb->eb_used - eb->eb_start)) {
+	if (size > (size_t)(eb->eb_start - eb->eb_buf)) {
 		/*
 		 * We can't add more entries at the front, so we have to extend
 		 * our buffer.
@@ -119,26 +130,30 @@ ebuf_add_head(struct ebuf *eb, const void *data, size_t size)
 		if (ebuf_head_extend(eb, size) == -1)
 			return (-1);
 	}
-	PJDLOG_ASSERT(size <= (size_t)(eb->eb_used - eb->eb_start));
+	PJDLOG_ASSERT(size <= (size_t)(eb->eb_start - eb->eb_buf));
 
 	eb->eb_size += size;
-	eb->eb_used -= size;
+	eb->eb_start -= size;
 	/*
 	 * If data is NULL the caller just wants to reserve place.
 	 */
 	if (data != NULL)
-		bcopy(data, eb->eb_used, size);
+		memcpy(eb->eb_start, data, size);
 
 	return (0);
 }
 
+/*
+ * Add `size` bytes to the back of `eb`, copied from `data` if not null
+ * and otherwise left uninitialized.
+ */
 int
 ebuf_add_tail(struct ebuf *eb, const void *data, size_t size)
 {
 
 	PJDLOG_ASSERT(eb != NULL && eb->eb_magic == EBUF_MAGIC);
 
-	if (size > (size_t)(eb->eb_end - (eb->eb_used + eb->eb_size))) {
+	if (size > (size_t)(eb->eb_end - (eb->eb_start + eb->eb_size))) {
 		/*
 		 * We can't add more entries at the back, so we have to extend
 		 * our buffer.
@@ -147,18 +162,21 @@ ebuf_add_tail(struct ebuf *eb, const void *data, size_t size)
 			return (-1);
 	}
 	PJDLOG_ASSERT(size <=
-	    (size_t)(eb->eb_end - (eb->eb_used + eb->eb_size)));
+	    (size_t)(eb->eb_end - (eb->eb_start + eb->eb_size)));
 
 	/*
 	 * If data is NULL the caller just wants to reserve space.
 	 */
 	if (data != NULL)
-		bcopy(data, eb->eb_used + eb->eb_size, size);
+		memcpy(eb->eb_start + eb->eb_size, data, size);
 	eb->eb_size += size;
 
 	return (0);
 }
 
+/*
+ * Trim `size` bytes from the front of `eb`.
+ */
 void
 ebuf_del_head(struct ebuf *eb, size_t size)
 {
@@ -166,10 +184,13 @@ ebuf_del_head(struct ebuf *eb, size_t size)
 	PJDLOG_ASSERT(eb != NULL && eb->eb_magic == EBUF_MAGIC);
 	PJDLOG_ASSERT(size <= eb->eb_size);
 
-	eb->eb_used += size;
+	eb->eb_start += size;
 	eb->eb_size -= size;
 }
 
+/*
+ * Trim size bytes from the back of `eb`.
+ */
 void
 ebuf_del_tail(struct ebuf *eb, size_t size)
 {
@@ -181,7 +202,8 @@ ebuf_del_tail(struct ebuf *eb, size_t size)
 }
 
 /*
- * Return pointer to the data and data size.
+ * Return a pointer to the data contained by `eb`.  The size of the data
+ * is returned in `sizep` if not null.
  */
 void *
 ebuf_data(struct ebuf *eb, size_t *sizep)
@@ -191,11 +213,11 @@ ebuf_data(struct ebuf *eb, size_t *sizep)
 
 	if (sizep != NULL)
 		*sizep = eb->eb_size;
-	return (eb->eb_size > 0 ? eb->eb_used : NULL);
+	return (eb->eb_size > 0 ? eb->eb_start : NULL);
 }
 
 /*
- * Return data size.
+ * Return the size of the data contained in `eb`.
  */
 size_t
 ebuf_size(struct ebuf *eb)
@@ -212,25 +234,25 @@ ebuf_size(struct ebuf *eb)
 static int
 ebuf_head_extend(struct ebuf *eb, size_t size)
 {
-	unsigned char *newstart, *newused;
+	unsigned char *newbuf, *newstart;
 	size_t newsize, page_size;
 
 	PJDLOG_ASSERT(eb != NULL && eb->eb_magic == EBUF_MAGIC);
 
 	page_size = getpagesize();
-	newsize = eb->eb_end - eb->eb_start + (page_size / 4) + size;
+	newsize = eb->eb_end - eb->eb_buf + (page_size / 4) + size;
 
-	newstart = malloc(newsize);
-	if (newstart == NULL)
+	newbuf = malloc(newsize);
+	if (newbuf == NULL)
 		return (-1);
-	newused =
-	    newstart + (page_size / 4) + size + (eb->eb_used - eb->eb_start);
+	newstart =
+	    newbuf + (page_size / 4) + size + (eb->eb_start - eb->eb_buf);
 
-	bcopy(eb->eb_used, newused, eb->eb_size);
+	bcopy(eb->eb_start, newstart, eb->eb_size);
 
+	eb->eb_buf = newbuf;
 	eb->eb_start = newstart;
-	eb->eb_used = newused;
-	eb->eb_end = newstart + newsize;
+	eb->eb_end = newbuf + newsize;
 
 	return (0);
 }
@@ -241,21 +263,21 @@ ebuf_head_extend(struct ebuf *eb, size_t size)
 static int
 ebuf_tail_extend(struct ebuf *eb, size_t size)
 {
-	unsigned char *newstart;
+	unsigned char *newbuf;
 	size_t newsize, page_size;
 
 	PJDLOG_ASSERT(eb != NULL && eb->eb_magic == EBUF_MAGIC);
 
 	page_size = getpagesize();
-	newsize = eb->eb_end - eb->eb_start + size + ((3 * page_size) / 4);
+	newsize = eb->eb_end - eb->eb_buf + size + ((3 * page_size) / 4);
 
-	newstart = realloc(eb->eb_start, newsize);
-	if (newstart == NULL)
+	newbuf = realloc(eb->eb_buf, newsize);
+	if (newbuf == NULL)
 		return (-1);
 
-	eb->eb_used = newstart + (eb->eb_used - eb->eb_start);
-	eb->eb_start = newstart;
-	eb->eb_end = newstart + newsize;
+	eb->eb_start = newbuf + (eb->eb_start - eb->eb_buf);
+	eb->eb_buf = newbuf;
+	eb->eb_end = newbuf + newsize;
 
 	return (0);
 }