Add 'editenv' command
authorPeter Tyser <ptyser@xes-inc.com>
Sun, 25 Oct 2009 20:12:56 +0000 (15:12 -0500)
committerWolfgang Denk <wd@denx.de>
Tue, 27 Oct 2009 19:58:25 +0000 (20:58 +0100)
The editenv command can be used to edit an environment variable.
Editing an environment variable is useful when one wants to tweak an
existing variable, for example fix a typo or change the baudrate in the
'bootargs' environment variable.

Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
README
common/cmd_nvedit.c
include/config_cmd_all.h
include/config_cmd_default.h

diff --git a/README b/README
index dee0e674a18c007fa98393db9a7d3b0a70e8a42b..2c776876e236737f54e3e9b5b72acde4d6938aea 100644 (file)
--- 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
index 725e573ddf85ce8b6e09b836d9469d198407409a..eb89e9e60a669464f9d7ed669e0b5c047647931f 100644 (file)
@@ -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>
@@ -502,6 +505,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,
@@ -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",
index c747b4baa193e60c74eb7b0f4a7051378b2febb7..058fdf14fae47e57174aa655d529b7c5614b8cd9 100644 (file)
@@ -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                      */
index a5d87a68e8bd5cfce2af9846af35cd6369f1737f..6e3903c4d4166951da385d689e4b4cb8014d5a59 100644 (file)
@@ -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    */