Commit 24ab5a1914283b891fa50bc285128bc5fd4ac50a

Authored by Joe Hershberger
Committed by Tom Rini
1 parent 267541f776

env: Add setenv force support

Now that we have support for permissions, add a way to override them.

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>

Showing 1 changed file with 23 additions and 6 deletions Side-by-side Diff

... ... @@ -200,7 +200,24 @@
200 200 int i, len;
201 201 char *name, *value, *s;
202 202 ENTRY e, *ep;
  203 + int env_flag = H_INTERACTIVE;
203 204  
  205 + debug("Initial value for argc=%d\n", argc);
  206 + while (argc > 1 && **(argv + 1) == '-') {
  207 + char *arg = *++argv;
  208 +
  209 + --argc;
  210 + while (*++arg) {
  211 + switch (*arg) {
  212 + case 'f': /* force */
  213 + env_flag |= H_FORCE;
  214 + break;
  215 + default:
  216 + return CMD_RET_USAGE;
  217 + }
  218 + }
  219 + }
  220 + debug("Final value for argc=%d\n", argc);
204 221 name = argv[1];
205 222 value = argv[2];
206 223  
... ... @@ -214,7 +231,7 @@
214 231  
215 232 /* Delete only ? */
216 233 if (argc < 3 || argv[2] == NULL) {
217   - int rc = hdelete_r(name, &env_htab, H_INTERACTIVE);
  234 + int rc = hdelete_r(name, &env_htab, env_flag);
218 235 return !rc;
219 236 }
220 237  
... ... @@ -241,7 +258,7 @@
241 258  
242 259 e.key = name;
243 260 e.data = value;
244   - hsearch_r(e, ENTER, &ep, &env_htab, H_INTERACTIVE);
  261 + hsearch_r(e, ENTER, &ep, &env_htab, env_flag);
245 262 free(value);
246 263 if (!ep) {
247 264 printf("## Error inserting \"%s\" variable, errno=%d\n",
... ... @@ -1109,10 +1126,10 @@
1109 1126 U_BOOT_CMD_COMPLETE(
1110 1127 setenv, CONFIG_SYS_MAXARGS, 0, do_env_set,
1111 1128 "set environment variables",
1112   - "name value ...\n"
1113   - " - set environment variable 'name' to 'value ...'\n"
1114   - "setenv name\n"
1115   - " - delete environment variable 'name'",
  1129 + "[-f] name value ...\n"
  1130 + " - [forcibly] set environment variable 'name' to 'value ...'\n"
  1131 + "setenv [-f] name\n"
  1132 + " - [forcibly] delete environment variable 'name'",
1116 1133 var_complete
1117 1134 );
1118 1135