[U-Boot] [PATCH v2] common: add a grepenv command

Kim Phillips kim.phillips at freescale.com
Sat Apr 2 00:46:58 CEST 2011


u-boot environments, esp. when boards are shared across multiple
users, can get pretty large and time consuming to visually parse.
The grepenv command this patch adds can be used in lieu of printenv
to facilitate searching.  grepenv works like printenv but limits
its output only to environment strings (variable name and value
pairs) that match the user specified substring.

Signed-off-by: Kim Phillips <kim.phillips at freescale.com>
---
v2: rebased

 common/cmd_nvedit.c |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index fb69c24..532167b 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -160,6 +160,49 @@ int do_env_print (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	return rcode;
 }
 
+int do_grepenv (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	char buf[CONFIG_SYS_CBSIZE], *searchstr;
+	int i = 0, j = 0, k = 0;
+	int rcode = 1;
+
+	if (argc != 2) {
+		cmd_usage(cmdtp);
+		return 1;
+	}
+
+	searchstr = argv[1];
+
+	/* find and print matching env vars */
+	do {
+		buf[j] = env_get_char(i);
+		if (buf[j] == searchstr[k]) {
+			k++;
+			if (searchstr[k] == '\0') {
+				/* match complete */
+				rcode = 0;
+				do {
+					i++; j++;
+					buf[j] = env_get_char(i);
+				} while (buf[j] != '\0');
+				puts(buf); puts("\n");
+				j = 0; k = 0;
+			} else
+				j++;
+		} else {
+			k = 0;
+			if (buf[j] == '\0') {
+				j = 0;
+				if (ctrlc())
+					return -1;
+			} else
+				j++;
+		}
+		i++;
+	} while (!(j == 0 && env_get_char(i) == '\0'));
+
+	return rcode;
+}
 /*
  * Set a new environment variable,
  * or replace or delete an existing one.
@@ -904,6 +947,14 @@ U_BOOT_CMD_COMPLETE(
 );
 
 U_BOOT_CMD_COMPLETE(
+	grepenv, 2, 0,  do_grepenv,
+	"search environment",
+	"fixed-string\n"
+	"    - list environment name and value pairs matching 'fixed-string'",
+	var_complete
+);
+
+U_BOOT_CMD_COMPLETE(
 	setenv, CONFIG_SYS_MAXARGS, 0,	do_env_set,
 	"set environment variables",
 	"name value ...\n"
-- 
1.7.4




More information about the U-Boot mailing list