public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: "Marek Behún" <kabel@kernel.org>
To: Simon Glass <sjg@chromium.org>, Tom Rini <trini@konsulko.com>
Cc: "U-Boot Mailing List" <u-boot@lists.denx.de>,
	"Marek Behún" <marek.behun@nic.cz>
Subject: [PATCH v3 10/13] env: Make return value of env_get_f() behave like sprintf() on success
Date: Sun, 17 Oct 2021 17:36:35 +0200	[thread overview]
Message-ID: <20211017153638.29870-11-kabel@kernel.org> (raw)
In-Reply-To: <20211017153638.29870-1-kabel@kernel.org>

From: Marek Behún <marek.behun@nic.cz>

Currently the env_get_f() function's return value behaves weirdly: it
returns the number of bytes written into `buf`, but whether this is
excluding the terminating NULL-byte or including it depends on whether
there was enough space in `buf`.

Change the function to always return the actual length of the value of
the environment variable (excluding the terminating NULL-byte) on
success. This makes it behave like sprintf().

All users of this function in U-Boot are compatible with this change.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 cmd/nvedit.c  | 8 +++++---
 include/env.h | 6 ++----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index 063cc76282..527b522e9e 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -735,7 +735,7 @@ int env_get_f(const char *name, char *buf, unsigned len)
 
 	for (p = env; *p != '\0'; p = end + 1) {
 		const char *value;
-		int n;
+		int n, res;
 
 		for (end = p; *end != '\0'; ++end)
 			if (end - env >= CONFIG_ENV_SIZE)
@@ -745,11 +745,13 @@ int env_get_f(const char *name, char *buf, unsigned len)
 		if (value == NULL)
 			continue;
 
+		res = end - value;
+
 		/* found; copy out */
 		for (n = 0; n < len; ++n, ++buf) {
 			*buf = *value++;
 			if (*buf == '\0')
-				return n;
+				return res;
 		}
 
 		if (n)
@@ -758,7 +760,7 @@ int env_get_f(const char *name, char *buf, unsigned len)
 		printf("env_buf [%u bytes] too small for value of \"%s\"\n",
 		       len, name);
 
-		return n;
+		return res;
 	}
 
 	return -1;
diff --git a/include/env.h b/include/env.h
index 220ab979d9..ee5e30d036 100644
--- a/include/env.h
+++ b/include/env.h
@@ -120,10 +120,8 @@ char *from_env(const char *envvar);
  * support reading the value (slowly) and some will not.
  *
  * @varname:	Variable to look up
- * @return number of bytes written into @buf, excluding the terminating
- *	NULL-byte if there was enough space in @buf, and including the
- *	terminating NULL-byte if there wasn't enough space, or -1 if the
- *	variable is not found
+ * @return actual length of the variable value excluding the terminating
+ *	NULL-byte, or -1 if the variable is not found
  */
 int env_get_f(const char *name, char *buf, unsigned int len);
 
-- 
2.32.0


  parent reply	other threads:[~2021-10-17 15:39 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-17 15:36 [PATCH v3 00/13] env_get_char() removal and env_get_f() refactor Marek Behún
2021-10-17 15:36 ` [PATCH v3 01/13] env: Fix documentation for env_get_f() Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 02/13] env: Drop env_get_char_spec() and old, unused .get_char() implementations Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 03/13] examples: api: glue: Remove comment that does not apply anymore Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 04/13] env: Change env_match() to static and remove from header Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 05/13] env: Inline env_get_char() into its only user Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 06/13] env: Use string pointer instead of indexes in env_get_f() Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 07/13] env: Use better name for variable " Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 08/13] env: Don't match empty variable name in env_match() Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 09/13] env: Early return from env_get_f() on NULL name Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` Marek Behún [this message]
2021-10-21 18:49   ` [PATCH v3 10/13] env: Make return value of env_get_f() behave like sprintf() on success Simon Glass
2021-10-17 15:36 ` [PATCH v3 11/13] env: Use memcpy() instead of ad-hoc code to copy variable value Marek Behún
2021-10-21 18:49   ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 12/13] env: Simplify env_match() and inline into env_get_f() Marek Behún
2021-10-18 18:12   ` Simon Glass
2021-10-19  0:49     ` Marek Behún
2021-10-19 14:11       ` Simon Glass
2021-10-21 18:49         ` Simon Glass
2021-10-17 15:36 ` [PATCH v3 13/13] env: Move non-cli env functions to env/common.c Marek Behún
2021-10-21 18:49   ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211017153638.29870-11-kabel@kernel.org \
    --to=kabel@kernel.org \
    --cc=marek.behun@nic.cz \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox