mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
env: Hide '.' variables in env print by default
When printing all variables with env print, don't print variables that begin with '.'. If env print is called with a '-a' switch, then include variables that begin with '.' (just like the ls command). Variables printed explicitly will be printed even without the -a. Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
ec8a252cd4
commit
be11235ab8
13 changed files with 37 additions and 25 deletions
|
@ -391,7 +391,7 @@ int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||
nextbase -= ((CONFIG_ENV_SIZE + 4096 - 1) & ~(4096 - 1));
|
||||
envp = (env_t *)nextbase;
|
||||
res = (char *)envp->data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -106,7 +106,7 @@ int get_env_id(void)
|
|||
*
|
||||
* Returns 0 in case of error, or length of printed string
|
||||
*/
|
||||
static int env_print(char *name)
|
||||
static int env_print(char *name, int flag)
|
||||
{
|
||||
char *res = NULL;
|
||||
size_t len;
|
||||
|
@ -116,7 +116,7 @@ static int env_print(char *name)
|
|||
|
||||
e.key = name;
|
||||
e.data = NULL;
|
||||
hsearch_r(e, FIND, &ep, &env_htab, 0);
|
||||
hsearch_r(e, FIND, &ep, &env_htab, flag);
|
||||
if (ep == NULL)
|
||||
return 0;
|
||||
len = printf("%s=%s\n", ep->key, ep->data);
|
||||
|
@ -124,7 +124,7 @@ static int env_print(char *name)
|
|||
}
|
||||
|
||||
/* print whole list */
|
||||
len = hexport_r(&env_htab, '\n', &res, 0, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\n', flag, &res, 0, 0, NULL);
|
||||
|
||||
if (len > 0) {
|
||||
puts(res);
|
||||
|
@ -141,10 +141,17 @@ static int do_env_print(cmd_tbl_t *cmdtp, int flag, int argc,
|
|||
{
|
||||
int i;
|
||||
int rcode = 0;
|
||||
int env_flag = H_HIDE_DOT;
|
||||
|
||||
if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'a') {
|
||||
argc--;
|
||||
argv++;
|
||||
env_flag &= ~H_HIDE_DOT;
|
||||
}
|
||||
|
||||
if (argc == 1) {
|
||||
/* print all env vars */
|
||||
rcode = env_print(NULL);
|
||||
rcode = env_print(NULL, env_flag);
|
||||
if (!rcode)
|
||||
return 1;
|
||||
printf("\nEnvironment size: %d/%ld bytes\n",
|
||||
|
@ -153,8 +160,9 @@ static int do_env_print(cmd_tbl_t *cmdtp, int flag, int argc,
|
|||
}
|
||||
|
||||
/* print selected env vars */
|
||||
env_flag &= ~H_HIDE_DOT;
|
||||
for (i = 1; i < argc; ++i) {
|
||||
int rc = env_print(argv[i]);
|
||||
int rc = env_print(argv[i], env_flag);
|
||||
if (!rc) {
|
||||
printf("## Error: \"%s\" not defined\n", argv[i]);
|
||||
++rcode;
|
||||
|
@ -807,7 +815,7 @@ NXTARG: ;
|
|||
argv++;
|
||||
|
||||
if (sep) { /* export as text file */
|
||||
len = hexport_r(&env_htab, sep, &addr, size, argc, argv);
|
||||
len = hexport_r(&env_htab, sep, 0, &addr, size, argc, argv);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
@ -825,7 +833,7 @@ NXTARG: ;
|
|||
else /* export as raw binary data */
|
||||
res = addr;
|
||||
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, argc, argv);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, argc, argv);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
@ -1037,7 +1045,7 @@ static char env_help_text[] =
|
|||
#if defined(CONFIG_CMD_IMPORTENV)
|
||||
"env import [-d] [-t | -b | -c] addr [size] - import environment\n"
|
||||
#endif
|
||||
"env print [name ...] - print environment\n"
|
||||
"env print [-a | name ...] - print environment\n"
|
||||
#if defined(CONFIG_CMD_RUN)
|
||||
"env run var [...] - run commands in an environment variable\n"
|
||||
#endif
|
||||
|
@ -1069,7 +1077,7 @@ U_BOOT_CMD_COMPLETE(
|
|||
U_BOOT_CMD_COMPLETE(
|
||||
printenv, CONFIG_SYS_MAXARGS, 1, do_env_print,
|
||||
"print environment variables",
|
||||
"\n - print values of all environment variables\n"
|
||||
"[-a]\n - print [all] values of all environment variables\n"
|
||||
"printenv name ...\n"
|
||||
" - print value of environment variable 'name'",
|
||||
var_complete
|
||||
|
|
|
@ -60,7 +60,7 @@ int saveenv(void)
|
|||
char *res;
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -139,7 +139,7 @@ int saveenv(void)
|
|||
BUG_ON(env_ptr != NULL);
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -61,7 +61,7 @@ int saveenv(void)
|
|||
int err;
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -142,7 +142,7 @@ int saveenv(void)
|
|||
goto done;
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
goto done;
|
||||
|
@ -275,7 +275,7 @@ int saveenv(void)
|
|||
goto done;
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
goto done;
|
||||
|
|
|
@ -130,7 +130,7 @@ int saveenv(void)
|
|||
}
|
||||
|
||||
res = (char *)&env_new->data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
ret = 1;
|
||||
|
|
|
@ -186,7 +186,7 @@ int saveenv(void)
|
|||
return 1;
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
@ -239,7 +239,7 @@ int saveenv(void)
|
|||
return 1;
|
||||
|
||||
res = (char *)&env_new->data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -90,7 +90,7 @@ int saveenv(void)
|
|||
int rcode = 0;
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -95,7 +95,7 @@ int saveenv(void)
|
|||
};
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
|
|
@ -79,7 +79,7 @@ int saveenv(void)
|
|||
}
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
return 1;
|
||||
|
@ -277,7 +277,7 @@ int saveenv(void)
|
|||
}
|
||||
|
||||
res = (char *)&env_new.data;
|
||||
len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
|
||||
len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);
|
||||
if (len < 0) {
|
||||
error("Cannot export environment: errno = %d\n", errno);
|
||||
goto done;
|
||||
|
|
|
@ -107,7 +107,7 @@ extern int hdelete_r(const char *__key, struct hsearch_data *__htab,
|
|||
int __flag);
|
||||
|
||||
extern ssize_t hexport_r(struct hsearch_data *__htab,
|
||||
const char __sep, char **__resp, size_t __size,
|
||||
const char __sep, int __flag, char **__resp, size_t __size,
|
||||
int argc, char * const argv[]);
|
||||
|
||||
/*
|
||||
|
@ -120,9 +120,10 @@ extern int himport_r(struct hsearch_data *__htab,
|
|||
const char *__env, size_t __size, const char __sep,
|
||||
int __flag, int nvars, char * const vars[]);
|
||||
|
||||
/* Flags for himport_r(), hdelete_r(), and hsearch_r() */
|
||||
/* Flags for himport_r(), hexport_r(), hdelete_r(), and hsearch_r() */
|
||||
#define H_NOCLEAR (1 << 0) /* do not clear hash table before importing */
|
||||
#define H_FORCE (1 << 1) /* overwrite read-only/write-once variables */
|
||||
#define H_INTERACTIVE (1 << 2) /* indicate that an import is user directed */
|
||||
#define H_HIDE_DOT (1 << 3) /* don't print env vars that begin with '.' */
|
||||
|
||||
#endif /* search.h */
|
||||
|
|
|
@ -522,7 +522,7 @@ static int cmpkey(const void *p1, const void *p2)
|
|||
return (strcmp(e1->key, e2->key));
|
||||
}
|
||||
|
||||
ssize_t hexport_r(struct hsearch_data *htab, const char sep,
|
||||
ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag,
|
||||
char **resp, size_t size,
|
||||
int argc, char * const argv[])
|
||||
{
|
||||
|
@ -559,6 +559,9 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
|
|||
if ((argc > 0) && (found == 0))
|
||||
continue;
|
||||
|
||||
if ((flag & H_HIDE_DOT) && ep->key[0] == '.')
|
||||
continue;
|
||||
|
||||
list[n++] = ep;
|
||||
|
||||
totlen += strlen(ep->key) + 2;
|
||||
|
|
Loading…
Reference in a new issue