From patchwork Mon Sep 15 10:46:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 300 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757933246; bh=Uc846H2gbHnzUMGzRafujeWvJc2hA7mJeqvciySc+aA=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=jOYUcuUGSmTnR4sur3CO84OYzSlyiJNCEuzQnpoTkWGKjDiFGnpk9oD1xBODM0shO ixtbBaItrFE/knZ5n8szjKJ5Klh4gOYXXiaFH18/U+yIUxmc+EgMO77a7pwFQ+QA9F /fY1RqmVK3ky5ExtFlIxMzeRQ1PTAncw9Ax2rs6301kilHY+hBG2Xtp6pA/plXMZYw XTr18XgRZ0C/6WVGSsI04ID25CjJSOV1/VwlvErGRGNxjDOqCNsGWlZHyK9rSKxnxm Jv/XvFHSCCoeLpuoQV4rQ32CZj6Enra12F9SNqHHtfq5YLNUBCdFla/Nvivdv2gPtO /yFcCuW0ktzcw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 41CE867B34 for ; Mon, 15 Sep 2025 04:47:26 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id Uem5hcbb5dri for ; Mon, 15 Sep 2025 04:47:26 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757933246; bh=Uc846H2gbHnzUMGzRafujeWvJc2hA7mJeqvciySc+aA=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=jOYUcuUGSmTnR4sur3CO84OYzSlyiJNCEuzQnpoTkWGKjDiFGnpk9oD1xBODM0shO ixtbBaItrFE/knZ5n8szjKJ5Klh4gOYXXiaFH18/U+yIUxmc+EgMO77a7pwFQ+QA9F /fY1RqmVK3ky5ExtFlIxMzeRQ1PTAncw9Ax2rs6301kilHY+hBG2Xtp6pA/plXMZYw XTr18XgRZ0C/6WVGSsI04ID25CjJSOV1/VwlvErGRGNxjDOqCNsGWlZHyK9rSKxnxm Jv/XvFHSCCoeLpuoQV4rQ32CZj6Enra12F9SNqHHtfq5YLNUBCdFla/Nvivdv2gPtO /yFcCuW0ktzcw== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2F9915F92B for ; Mon, 15 Sep 2025 04:47:26 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757933242; bh=OdpyaDYzSuBwSaFO77zweINJ8CA4ShTPzfPsksmq+EI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=djys5jpdf2dtQZaR598guBwwwNHyeqsJr3lFjmJXwHOKpnzXqrTAWlE9wult+dRO6 0vKT8P5aihJuI7WOMeu0zB1jxHbegq4w80v4PjzKiQYQcwqOT3gpHS8CIhK/hQUAcO U+tX5IzHQIYPGxQrX1Yxgr5CY75wn/XC4f8aV2GGrJYGqj3NTxozsdCKz22edSJE6v L8MQXexl1eY3sdMlsxq5RM4T1axSnX8L5z8pXdgokajwbchSQxkfn+uK2yBSCEY5iX XxUZWM0O7GSFeT8A5pxREaykvhYtuDnRFlvd9qsaElYRE9PhQn8+Wf4iwQWwBQ6Tkq Sa6ZFgJ0sZmqw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 3FFFE67B4F; Mon, 15 Sep 2025 04:47:22 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id w3yucbPOAJUj; Mon, 15 Sep 2025 04:47:22 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757933242; bh=JsSHqRxvN9XJSJzIBoScVNZZap/6f75qefEiHd5llNk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qYC41OLbHVZcA0AiIE32fyhlTCn4ezBtQS258SFi7wBYiSzw8IEtrCWFOKFHDxyWj d6xwbqlDvWqUfOmlOMBeepjD6UcGCAN8MurB/u/+a44ZQuYj7eSD4oIjYmsTLqIaYc bbxJVRI/pAg8OSE3/Z79bFpno9y4RQJeOv2LTs/qeC+SIWq6o4XbmwuSVyAiAdi+R5 lDjn0fhHRDxpMygsi8eSDZRxZ9dOx9L8rd9jcFekgYm90Mc3umr2PVzN5AnYjedh6G ZSAPlfg42Z9YozctfSVUc3h1f+Z92FCz4jv3Lrzha5hX9ZJEKihuMDbDA2tGAjIVrf aK/bxu50s9p7A== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id B0D4F67A99; Mon, 15 Sep 2025 04:47:21 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 04:46:42 -0600 Message-ID: <20250915104705.937780-2-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250915104705.937780-1-sjg@u-boot.org> References: <20250915104705.937780-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: MCPZY2S6CUXYHS5ECYXMTFLPCDMISJBZ X-Message-ID-Hash: MCPZY2S6CUXYHS5ECYXMTFLPCDMISJBZ X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 01/17] membuf: Add a function to set up a static membuf List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass Add a way to set up a membuf with some pre-loaded data, so it is possible to read it out using membuf_readline(), etc. Signed-off-by: Simon Glass --- include/membuf.h | 17 ++++++++++++++++- lib/membuf.c | 8 ++++++++ test/lib/membuf.c | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/include/membuf.h b/include/membuf.h index b495a72652b..3352faa0606 100644 --- a/include/membuf.h +++ b/include/membuf.h @@ -222,7 +222,9 @@ int membuf_readline(struct membuf *mb, char *str, int maxlen, int minch, int membuf_extend_by(struct membuf *mb, int by, int max); /** - * membuf_init() - set up a new membuff using an existing membuff + * membuf_init() - set up a new membuff using an existing buffer + * + * The buffer is initially empty * * @mb: membuff to set up * @buff: Address of buffer @@ -230,6 +232,19 @@ int membuf_extend_by(struct membuf *mb, int by, int max); */ void membuf_init(struct membuf *mb, char *buff, int size); +/** + * membuf_init_with_data() - set up a new membuff using existing data + * + * The buffer is set up to contain the provided data. with its size set to + * @size + 1 (less MEMBUF_FULL), so that there is enough space for the head/tail + * differece. + * + * @mb: membuff to set up + * @buff: Address of buffer + * @size: Number of bytes to put into the membuf + */ +void membuf_init_with_data(struct membuf *mb, char *buff, int size); + /** * membuf_uninit() - clear a membuff so it can no longer be used * diff --git a/lib/membuf.c b/lib/membuf.c index 016430ae988..47a1b06664a 100644 --- a/lib/membuf.c +++ b/lib/membuf.c @@ -405,6 +405,14 @@ void membuf_init(struct membuf *mb, char *buff, int size) membuf_purge(mb); } +void membuf_init_with_data(struct membuf *mb, char *buff, int size) +{ + char *data; + + membuf_init(mb, buff, size + !MEMBUF_FULL); + membuf_putraw(mb, size, true, &data); +} + int membuf_new(struct membuf *mb, int size) { mb->start = malloc(size); diff --git a/test/lib/membuf.c b/test/lib/membuf.c index f36332ff7b6..2e7de9cdc57 100644 --- a/test/lib/membuf.c +++ b/test/lib/membuf.c @@ -242,3 +242,22 @@ static int lib_test_membuf_readline(struct unit_test_state *uts) return 0; } LIB_TEST(lib_test_membuf_readline, 0); + +/* test membuf_readline() with generated data */ +static int lib_test_membuf_init(struct unit_test_state *uts) +{ + struct membuf mb; + char buf[10], out[10]; + int len; + + strcpy(buf, "hello"); + len = strlen(buf); + membuf_init_with_data(&mb, buf, len); + ut_asserteq_ptr(buf, mb.start); + ut_asserteq(len, membuf_avail(&mb)); + ut_asserteq(len, membuf_readline(&mb, out, sizeof(out), 0, false)); + ut_asserteq_str("hello", out); + + return 0; +} +LIB_TEST(lib_test_membuf_init, 0);