diff options
author | Hans de Goede <hdegoede@redhat.com> | 2014-08-06 09:37:39 +0200 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-08-21 12:01:13 -0400 |
commit | b1ba62d4ae970a2da00371670a2c909f139d0f80 (patch) | |
tree | 13f115e73f255757abfa049c7ff8bdd2fc96b8ed | |
parent | a06be2d07792f6a995faf10df254898a840297fe (diff) |
pxe: Allow use of environment variables in append string
Use cli_simple_process_macros, so that environment
variables (e.g. ${console}) can be used in append strings.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r-- | common/cmd_pxe.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c index c816339232..0ab1e0aaa6 100644 --- a/common/cmd_pxe.c +++ b/common/cmd_pxe.c @@ -15,6 +15,7 @@ #include <fs.h> #include "menu.h" +#include "cli.h" #define MAX_TFTP_PATH_LEN 127 @@ -578,8 +579,12 @@ static int label_localboot(struct pxe_label *label) if (!localcmd) return -ENOENT; - if (label->append) - setenv("bootargs", label->append); + if (label->append) { + char bootargs[CONFIG_SYS_CBSIZE]; + + cli_simple_process_macros(label->append, bootargs); + setenv("bootargs", bootargs); + } debug("running: %s\n", localcmd); @@ -607,7 +612,6 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) char initrd_str[22]; char mac_str[29] = ""; char ip_str[68] = ""; - char *bootargs; int bootm_argc = 3; int len = 0; ulong kernel_addr; @@ -654,7 +658,6 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) sprintf(ip_str, " ip=%s:%s:%s:%s", getenv("ipaddr"), getenv("serverip"), getenv("gatewayip"), getenv("netmask")); - len += strlen(ip_str); } #ifdef CONFIG_CMD_NET @@ -664,27 +667,21 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) err = format_mac_pxe(mac_str + 8, sizeof(mac_str) - 8); if (err < 0) mac_str[0] = '\0'; - len += strlen(mac_str); } #endif - if (label->append) - len += strlen(label->append); + if ((label->ipappend & 0x3) || label->append) { + char bootargs[CONFIG_SYS_CBSIZE] = ""; + char finalbootargs[CONFIG_SYS_CBSIZE]; - if (len) { - bootargs = malloc(len + 1); - if (!bootargs) - return 1; - bootargs[0] = '\0'; if (label->append) strcpy(bootargs, label->append); strcat(bootargs, ip_str); strcat(bootargs, mac_str); - setenv("bootargs", bootargs); - printf("append: %s\n", bootargs); - - free(bootargs); + cli_simple_process_macros(bootargs, finalbootargs); + setenv("bootargs", finalbootargs); + printf("append: %s\n", finalbootargs); } bootm_argv[1] = getenv("kernel_addr_r"); |