X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fcli_hush.c;h=8f86e4aa4a49e8e80a1f247951640fbbf2541d01;hb=d5e08fd2042975fb60d807aed477d5b8c6e8cf16;hp=2fbfdbe89a9c7cd93fb4df19208ebe3afacf63f0;hpb=e6e3faa5c2da591cd3e0f2047a74cfc832e7b738;p=oweals%2Fu-boot.git diff --git a/common/cli_hush.c b/common/cli_hush.c index 2fbfdbe89a..8f86e4aa4a 100644 --- a/common/cli_hush.c +++ b/common/cli_hush.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * sh.c -- a prototype Bourne shell grammar parser * Intended to follow the original Thompson and Ritchie @@ -70,12 +71,11 @@ * document how quoting rules not precisely followed for variable assignments * maybe change map[] to use 2-bit entries * (eventually) remove all the printf's - * - * SPDX-License-Identifier: GPL-2.0+ */ #define __U_BOOT__ #ifdef __U_BOOT__ +#include #include /* malloc, free, realloc*/ #include /* isalpha, isdigit */ #include /* readline */ @@ -560,7 +560,7 @@ static int builtin_cd(struct child_prog *child) { char *newdir; if (child->argv[1] == NULL) - newdir = getenv("HOME"); + newdir = env_get("HOME"); else newdir = child->argv[1]; if (chdir(newdir)) { @@ -948,7 +948,7 @@ static inline void cmdedit_set_initial_prompt(void) #ifndef CONFIG_FEATURE_SH_FANCY_PROMPT PS1 = NULL; #else - PS1 = getenv("PS1"); + PS1 = env_get("PS1"); if(PS1==0) PS1 = "\\w \\$ "; #endif @@ -974,6 +974,30 @@ static inline void setup_prompt_string(int promptmode, char **prompt_str) } #endif +#ifdef __U_BOOT__ +static int uboot_cli_readline(struct in_str *i) +{ + char *prompt; + char __maybe_unused *ps_prompt = NULL; + + if (i->promptmode == 1) + prompt = CONFIG_SYS_PROMPT; + else + prompt = CONFIG_SYS_PROMPT_HUSH_PS2; + +#ifdef CONFIG_CMDLINE_PS_SUPPORT + if (i->promptmode == 1) + ps_prompt = env_get("PS1"); + else + ps_prompt = env_get("PS2"); + if (ps_prompt) + prompt = ps_prompt; +#endif + + return cli_readline(prompt); +} +#endif + static void get_user_input(struct in_str *i) { #ifndef __U_BOOT__ @@ -1003,11 +1027,8 @@ static void get_user_input(struct in_str *i) bootretry_reset_cmd_timeout(); i->__promptme = 1; - if (i->promptmode == 1) { - n = cli_readline(CONFIG_SYS_PROMPT); - } else { - n = cli_readline(CONFIG_SYS_PROMPT_HUSH_PS2); - } + n = uboot_cli_readline(i); + #ifdef CONFIG_BOOT_RETRY_TIME if (n == -2) { puts("\nTimeout waiting for command\n"); @@ -2151,7 +2172,7 @@ int set_local_var(const char *s, int flg_export) name=strdup(s); #ifdef __U_BOOT__ - if (getenv(name) != NULL) { + if (env_get(name) != NULL) { printf ("ERROR: " "There is a global environment variable with the same name.\n"); free(name); @@ -2244,7 +2265,7 @@ void unset_local_var(const char *name) } else { #ifndef __U_BOOT__ if(cur->flg_export) - unsetenv(cur->name); + unenv_set(cur->name); #endif free(cur->name); free(cur->value); @@ -2772,7 +2793,7 @@ static char *lookup_param(char *src) } } - p = getenv(src); + p = env_get(src); if (!p) p = get_local_var(src); @@ -3136,7 +3157,7 @@ static void mapset(const unsigned char *set, int code) static void update_ifs_map(void) { /* char *ifs and char map[256] are both globals. */ - ifs = (uchar *)getenv("IFS"); + ifs = (uchar *)env_get("IFS"); if (ifs == NULL) ifs=(uchar *)" \t\n"; /* Precompute a list of 'flow through' behavior so it can be treated * quickly up front. Computation is necessary because of IFS.