summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README1
-rw-r--r--common/cmd_nvedit.c40
-rw-r--r--include/config_cmd_all.h1
-rw-r--r--include/config_cmd_default.h1
4 files changed, 43 insertions, 0 deletions
diff --git a/README b/README
index dee0e674a1..2c776876e2 100644
--- a/README
+++ b/README
@@ -620,6 +620,7 @@ The following options need to be configured:
CONFIG_CMD_DS4510_RST * ds4510 I2C rst command
CONFIG_CMD_DTT * Digital Therm and Thermostat
CONFIG_CMD_ECHO echo arguments
+ CONFIG_CMD_EDITENV edit env variable
CONFIG_CMD_EEPROM * EEPROM read/write support
CONFIG_CMD_ELF * bootelf, bootvx
CONFIG_CMD_SAVEENV saveenv
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 725e573ddf..eb89e9e60a 100644
--- 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>
@@ -503,6 +506,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
@@ -597,6 +628,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",
diff --git a/include/config_cmd_all.h b/include/config_cmd_all.h
index c747b4baa1..058fdf14fa 100644
--- a/include/config_cmd_all.h
+++ b/include/config_cmd_all.h
@@ -30,6 +30,7 @@
#define CONFIG_CMD_DOC /* Disk-On-Chip Support */
#define CONFIG_CMD_DTT /* Digital Therm and Thermostat */
#define CONFIG_CMD_ECHO /* echo arguments */
+#define CONFIG_CMD_EDITENV /* editenv */
#define CONFIG_CMD_EEPROM /* EEPROM read/write support */
#define CONFIG_CMD_ELF /* ELF (VxWorks) load/boot cmd */
#define CONFIG_CMD_SAVEENV /* saveenv */
diff --git a/include/config_cmd_default.h b/include/config_cmd_default.h
index a5d87a68e8..6e3903c4d4 100644
--- a/include/config_cmd_default.h
+++ b/include/config_cmd_default.h
@@ -20,6 +20,7 @@
#define CONFIG_CMD_BOOTD /* bootd */
#define CONFIG_CMD_CONSOLE /* coninfo */
#define CONFIG_CMD_ECHO /* echo arguments */
+#define CONFIG_CMD_EDITENV /* editenv */
#define CONFIG_CMD_FPGA /* FPGA configuration Support */
#define CONFIG_CMD_IMI /* iminfo */
#define CONFIG_CMD_ITEST /* Integer (and string) test */