Skip to content
Snippets Groups Projects
Commit c5c41c45 authored by Andreas Fenkart's avatar Andreas Fenkart Committed by Tom Rini
Browse files

tools/env: reuse fw_getenv in fw_printenv function


Try to avoid adhoc iteration of the environment. Reuse fw_getenv
to find the variables that should be printed. Only use open-coded
iteration when printing all variables.
For backwards compatibility, keep emitting a newline when
printing with value_only.

Signed-off-by: default avatarAndreas Fenkart <andreas.fenkart@digitalstrom.com>
parent 1b7427cd
No related branches found
No related tags found
No related merge requests found
...@@ -250,9 +250,14 @@ int parse_aes_key(char *key, uint8_t *bin_key) ...@@ -250,9 +250,14 @@ int parse_aes_key(char *key, uint8_t *bin_key)
*/ */
int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts) int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts)
{ {
char *env, *nxt;
int i, rc = 0; int i, rc = 0;
if (value_only && argc != 1) {
fprintf(stderr,
"## Error: `-n' option requires exactly one argument\n");
return -1;
}
if (!opts) if (!opts)
opts = &default_opts; opts = &default_opts;
...@@ -260,6 +265,7 @@ int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts) ...@@ -260,6 +265,7 @@ int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts)
return -1; return -1;
if (argc == 0) { /* Print all env variables */ if (argc == 0) { /* Print all env variables */
char *env, *nxt;
for (env = environment.data; *env; env = nxt + 1) { for (env = environment.data; *env; env = nxt + 1) {
for (nxt = env; *nxt; ++nxt) { for (nxt = env; *nxt; ++nxt) {
if (nxt >= &environment.data[ENV_SIZE]) { if (nxt >= &environment.data[ENV_SIZE]) {
...@@ -274,39 +280,23 @@ int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts) ...@@ -274,39 +280,23 @@ int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts)
return 0; return 0;
} }
if (value_only && argc != 1) { for (i = 0; i < argc; ++i) { /* print a subset of env variables */
fprintf(stderr,
"## Error: `-n' option requires exactly one argument\n");
return -1;
}
for (i = 0; i < argc; ++i) { /* print single env variables */
char *name = argv[i]; char *name = argv[i];
char *val = NULL; char *val = NULL;
for (env = environment.data; *env; env = nxt + 1) { val = fw_getenv(name);
for (nxt = env; *nxt; ++nxt) {
if (nxt >= &environment.data[ENV_SIZE]) {
fprintf (stderr, "## Error: "
"environment not terminated\n");
return -1;
}
}
val = envmatch (name, env);
if (val) {
if (!value_only) {
fputs (name, stdout);
putc ('=', stdout);
}
puts (val);
break;
}
}
if (!val) { if (!val) {
fprintf (stderr, "## Error: \"%s\" not defined\n", name); fprintf (stderr, "## Error: \"%s\" not defined\n", name);
rc = -1; rc = -1;
continue;
} }
if (value_only) {
puts(val);
break;
}
printf("%s=%s\n", name, val);
} }
return rc; return rc;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment