Implemented selective importing of variables in
env import

Signed-off-by: Gerlando Falauto <gerlando.fala...@keymile.com>
---
 common/cmd_nvedit.c |   35 ++++++++++++++++++++++++++++++-----
 1 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 07cd062..0984a53 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -831,15 +831,19 @@ 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 == '-') {
@@ -863,7 +867,27 @@ 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("Cannot import more "
+                                                      "than %d variables at a"
+                                                      " time!", 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);
@@ -914,7 +938,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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to