mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
env: Make return value of env_get_f() behave like sprintf() on success
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>
This commit is contained in:
parent
6b6e3eeba9
commit
3112ce0ce8
2 changed files with 7 additions and 7 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue