From: Kim Phillips <kim.phillips@freescale.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] common: add a grepenv command
Date: Fri, 1 Apr 2011 17:46:58 -0500 [thread overview]
Message-ID: <20110401174658.eaa8d773.kim.phillips@freescale.com> (raw)
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@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
next reply other threads:[~2011-04-01 22:46 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-01 22:46 Kim Phillips [this message]
2011-04-01 22:59 ` [U-Boot] [PATCH v2] common: add a grepenv command Wolfgang Denk
2011-04-01 23:06 ` Mike Frysinger
2011-04-04 19:45 ` [U-Boot] [PATCH v3] " Kim Phillips
2011-04-04 20:57 ` Wolfgang Denk
2011-04-05 1:18 ` [U-Boot] [PATCH v4] " Kim Phillips
2011-04-05 15:00 ` Peter Tyser
2011-04-05 15:46 ` Mike Frysinger
2011-04-05 17:15 ` [U-Boot] [PATCH v5] " Kim Phillips
2011-04-27 22:57 ` Wolfgang Denk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110401174658.eaa8d773.kim.phillips@freescale.com \
--to=kim.phillips@freescale.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox