mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 14:41:31 +00:00
tools/env: Remove unneeded complexity
The length included the name length, and then it was subtracted back out on each use. Now we don't include it in the first place. Also realloc as we process arguments and eliminate memset. Use memcpy instead of manually copying each byte. Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
497f2053f8
commit
62a34a04e7
1 changed files with 13 additions and 20 deletions
33
tools/env/fw_env.c
vendored
33
tools/env/fw_env.c
vendored
|
@ -478,7 +478,6 @@ int fw_setenv(int argc, char *argv[])
|
|||
int i, len;
|
||||
char *name;
|
||||
char *value = NULL;
|
||||
char *tmpval = NULL;
|
||||
|
||||
if (argc < 2) {
|
||||
errno = EINVAL;
|
||||
|
@ -492,34 +491,28 @@ int fw_setenv(int argc, char *argv[])
|
|||
|
||||
name = argv[1];
|
||||
|
||||
len = strlen(name) + 2;
|
||||
for (i = 2; i < argc; ++i)
|
||||
len += strlen(argv[i]) + 1;
|
||||
|
||||
/* Allocate enough place to the data string */
|
||||
len = 0;
|
||||
for (i = 2; i < argc; ++i) {
|
||||
char *val = argv[i];
|
||||
size_t val_len = strlen(val);
|
||||
|
||||
value = realloc(value, len + val_len + 1);
|
||||
if (!value) {
|
||||
value = (char *)malloc(len - strlen(name));
|
||||
if (!value) {
|
||||
fprintf(stderr,
|
||||
fprintf(stderr,
|
||||
"Cannot malloc %zu bytes: %s\n",
|
||||
len - strlen(name), strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
memset(value, 0, len - strlen(name));
|
||||
tmpval = value;
|
||||
len, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
if (i != 2)
|
||||
*tmpval++ = ' ';
|
||||
while (*val != '\0')
|
||||
*tmpval++ = *val++;
|
||||
|
||||
memcpy(value + len, val, val_len);
|
||||
len += val_len;
|
||||
value[len++] = ' ';
|
||||
}
|
||||
value[len - 1] = '\0';
|
||||
|
||||
fw_env_write(name, value);
|
||||
|
||||
if (value)
|
||||
free(value);
|
||||
free(value);
|
||||
|
||||
return fw_env_close();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue