summaryrefslogtreecommitdiff
path: root/common/cmd_nvedit.c
diff options
context:
space:
mode:
authorMichael Brandt <Michael.Brandt@stericsson.com>2009-11-09 11:28:12 +0100
committerMichael Brandt <Michael.Brandt@stericsson.com>2009-11-09 11:28:12 +0100
commitc5fd9311b6c59a5fb4c6e7188c8bef96e3e2d86d (patch)
tree9a088934787ff75338f1e400587f7aa63d8edf66 /common/cmd_nvedit.c
parentebabdb43046d5ac115b6b53c8e606e3035c32371 (diff)
parentb91b8f74fe9ded18344c3d03080a4abc07254502 (diff)
Merge branch 'master' of http://git.denx.de/u-boot
Diffstat (limited to 'common/cmd_nvedit.c')
-rwxr-xr-xcommon/cmd_nvedit.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 91dec157e..6040a9996 100755
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -42,6 +42,9 @@
#include <common.h>
#include <command.h>
#include <environment.h>
+#if defined(CONFIG_CMD_EDITENV)
+#include <malloc.h>
+#endif
#include <watchdog.h>
#include <serial.h>
#include <linux/stddef.h>
@@ -401,7 +404,7 @@ int _do_setenv (int flag, int argc, char *argv[])
int setenv (char *varname, char *varvalue)
{
char *argv[4] = { "setenv", varname, varvalue, NULL };
- if (varvalue == NULL)
+ if ((varvalue == NULL) || (varvalue[0] == '\0'))
return _do_setenv (0, 2, argv);
else
return _do_setenv (0, 3, argv);
@@ -504,6 +507,34 @@ int do_askenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
#endif
/************************************************************************
+ * Interactively edit an environment variable
+ */
+#if defined(CONFIG_CMD_EDITENV)
+int do_editenv(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ char buffer[CONFIG_SYS_CBSIZE];
+ char *init_val;
+ int len;
+
+ if (argc < 2) {
+ cmd_usage(cmdtp);
+ return 1;
+ }
+
+ /* Set read buffer to initial value or empty sting */
+ init_val = getenv(argv[1]);
+ if (init_val)
+ len = sprintf(buffer, "%s", init_val);
+ else
+ buffer[0] = '\0';
+
+ readline_into_buffer("edit: ", buffer);
+
+ return setenv(argv[1], buffer);
+}
+#endif /* CONFIG_CMD_EDITENV */
+
+/************************************************************************
* Look up variable from environment,
* return address of storage for that variable,
* or NULL if not found
@@ -598,6 +629,15 @@ int envmatch (uchar *s1, int i2)
/**************************************************/
+#if defined(CONFIG_CMD_EDITENV)
+U_BOOT_CMD(
+ editenv, 2, 0, do_editenv,
+ "edit environment variable",
+ "name\n"
+ " - edit environment variable 'name'"
+);
+#endif
+
U_BOOT_CMD(
printenv, CONFIG_SYS_MAXARGS, 1, do_printenv,
"print environment variables",