[U-Boot] [PATCH RFC 4/4] env: implement "env import -n var[, var...]"

Gerlando Falauto gerlando.falauto at keymile.com
Fri Sep 30 14:04:58 CEST 2011


Implemented selective importing of variables in
env import

Signed-off-by: Gerlando Falauto <gerlando.falauto at keymile.com>
---
 common/cmd_nvedit.c |   31 ++++++++++++++++++++++++++-----
 1 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 8636004..757a088 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -804,15 +804,18 @@ sep_err:
  *	size:	length of input data; if missing, proper '\0'
  *		termination is mandatory
  */
-static int do_env_import(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+#define MAX_NVARS 16
+static int do_env_import(cmd_tbl_t *cmdtp, int __flag, int argc, char * const argv[])
 {
 	char	*cmd, *addr;
 	char	sep = '\n';
 	int	chk = 0;
 	int	fmt = 0;
-	int	del = 0;
+	int	flag = H_NOCLEAR;
 	size_t	size;
-
+	char	*vars[MAX_NVARS];
+	int	nvars = 0;
+	char 	*s;
 	cmd = *argv;
 
 	while (--argc > 0 && **++argv == '-') {
@@ -836,7 +839,24 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 				sep = '\n';
 				break;
 			case 'd':
-				del = 1;
+				flag &= ~H_NOCLEAR;
+				break;
+			case 'f':
+				flag |= H_FORCE;
+				break;
+			case 'n':
+				s = *++argv;
+				argc--;
+				do {
+					if (nvars >= MAX_NVARS)
+					{
+						printf("No more than %d variables can be imported at a single time\n", MAX_NVARS);
+						return 1;
+					}
+					vars[nvars++] = strsep(&s, ",");
+					debug("Considering variable %s\n", vars[nvars-1]);
+				} while (s);
+				debug("Importing a total of %d variables\n", nvars);
 				break;
 			default:
 				return cmd_usage(cmdtp);
@@ -887,7 +907,8 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 		addr = (char *)ep->data;
 	}
 
-	if (himport_r(&env_htab, addr, size, sep, del ? 0 : H_NOCLEAR) == 0) {
+	if (himport_ex(&env_htab, addr, size, sep, flag, 
+		       nvars, vars, NULL) == 0) {
 		error("Environment import failed: errno = %d\n", errno);
 		return 1;
 	}
-- 
1.7.1



More information about the U-Boot mailing list