aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libbb.h11
-rw-r--r--libbb/lineedit.c12
-rw-r--r--shell/ash.c7
-rw-r--r--shell/hush.c5
4 files changed, 19 insertions, 16 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 740c25528..1c9198945 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1984,6 +1984,7 @@ unsigned size_from_HISTFILESIZE(const char *hp) FAST_FUNC;
1984# define MAX_HISTORY 0 1984# define MAX_HISTORY 0
1985# endif 1985# endif
1986typedef const char *get_exe_name_t(int i) FAST_FUNC; 1986typedef const char *get_exe_name_t(int i) FAST_FUNC;
1987typedef const char *sh_get_var_t(const char *name) FAST_FUNC;
1987typedef struct line_input_t { 1988typedef struct line_input_t {
1988 int flags; 1989 int flags;
1989 int timeout; 1990 int timeout;
@@ -1997,9 +1998,8 @@ typedef struct line_input_t {
1997# if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH 1998# if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH
1998 /* function to fetch additional application-specific names to match */ 1999 /* function to fetch additional application-specific names to match */
1999 get_exe_name_t *get_exe_name; 2000 get_exe_name_t *get_exe_name;
2000# define EDITING_HAS_get_exe_name 1 2001 /* function to fetch value of shell variable */
2001# else 2002 sh_get_var_t *sh_get_var;
2002# define EDITING_HAS_get_exe_name 0
2003# endif 2003# endif
2004# endif 2004# endif
2005# if MAX_HISTORY 2005# if MAX_HISTORY
@@ -2053,11 +2053,6 @@ int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC;
2053 read_line_input(prompt, command, maxsize) 2053 read_line_input(prompt, command, maxsize)
2054#endif 2054#endif
2055 2055
2056#ifndef EDITING_HAS_get_exe_name
2057# define EDITING_HAS_get_exe_name 0
2058#endif
2059
2060
2061#ifndef COMM_LEN 2056#ifndef COMM_LEN
2062# ifdef TASK_COMM_LEN 2057# ifdef TASK_COMM_LEN
2063enum { COMM_LEN = TASK_COMM_LEN }; 2058enum { COMM_LEN = TASK_COMM_LEN };
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index 778511d16..06321825c 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -259,6 +259,16 @@ static const char *get_username_str(void)
259 259
260static NOINLINE const char *get_homedir_or_NULL(void) 260static NOINLINE const char *get_homedir_or_NULL(void)
261{ 261{
262 const char *home;
263
264#if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH
265 home = state->sh_get_var ? state->sh_get_var("HOME") : getenv("HOME");
266#else
267 home = getenv("HOME");
268#endif
269 if (home != NULL && home[0] != '\0')
270 return home;
271
262 if (!got_user_strings) 272 if (!got_user_strings)
263 get_user_strings(); 273 get_user_strings();
264 return home_pwd_buf; 274 return home_pwd_buf;
@@ -932,7 +942,7 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type)
932 continue; 942 continue;
933 } 943 }
934# endif 944# endif
935# if EDITING_HAS_get_exe_name 945# if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH
936 if (state->get_exe_name) { 946 if (state->get_exe_name) {
937 i = 0; 947 i = 0;
938 for (;;) { 948 for (;;) {
diff --git a/shell/ash.c b/shell/ash.c
index e8a1e853c..dd806b629 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -10554,7 +10554,7 @@ evalpipe(union node *n, int flags)
10554} 10554}
10555 10555
10556/* setinteractive needs this forward reference */ 10556/* setinteractive needs this forward reference */
10557#if EDITING_HAS_get_exe_name 10557#if ENABLE_FEATURE_EDITING
10558static const char *get_builtin_name(int i) FAST_FUNC; 10558static const char *get_builtin_name(int i) FAST_FUNC;
10559#endif 10559#endif
10560 10560
@@ -10591,9 +10591,8 @@ setinteractive(int on)
10591#if ENABLE_FEATURE_EDITING 10591#if ENABLE_FEATURE_EDITING
10592 if (!line_input_state) { 10592 if (!line_input_state) {
10593 line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP); 10593 line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP);
10594# if EDITING_HAS_get_exe_name
10595 line_input_state->get_exe_name = get_builtin_name; 10594 line_input_state->get_exe_name = get_builtin_name;
10596# endif 10595 line_input_state->sh_get_var = lookupvar;
10597 } 10596 }
10598#endif 10597#endif
10599 } 10598 }
@@ -11096,7 +11095,7 @@ find_builtin(const char *name)
11096 return bp; 11095 return bp;
11097} 11096}
11098 11097
11099#if EDITING_HAS_get_exe_name 11098#if ENABLE_FEATURE_EDITING
11100static const char * FAST_FUNC 11099static const char * FAST_FUNC
11101get_builtin_name(int i) 11100get_builtin_name(int i)
11102{ 11101{
diff --git a/shell/hush.c b/shell/hush.c
index ae81f0da5..051b123e7 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -8188,7 +8188,7 @@ static const struct built_in_command *find_builtin(const char *name)
8188 return find_builtin_helper(name, bltins2, &bltins2[ARRAY_SIZE(bltins2)]); 8188 return find_builtin_helper(name, bltins2, &bltins2[ARRAY_SIZE(bltins2)]);
8189} 8189}
8190 8190
8191#if ENABLE_HUSH_JOB && EDITING_HAS_get_exe_name 8191#if ENABLE_HUSH_JOB && ENABLE_FEATURE_EDITING
8192static const char * FAST_FUNC get_builtin_name(int i) 8192static const char * FAST_FUNC get_builtin_name(int i)
8193{ 8193{
8194 if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) { 8194 if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) {
@@ -10668,9 +10668,8 @@ int hush_main(int argc, char **argv)
10668 10668
10669# if ENABLE_FEATURE_EDITING 10669# if ENABLE_FEATURE_EDITING
10670 G.line_input_state = new_line_input_t(FOR_SHELL); 10670 G.line_input_state = new_line_input_t(FOR_SHELL);
10671# if EDITING_HAS_get_exe_name
10672 G.line_input_state->get_exe_name = get_builtin_name; 10671 G.line_input_state->get_exe_name = get_builtin_name;
10673# endif 10672 G.line_input_state->sh_get_var = get_local_var_value;
10674# endif 10673# endif
10675# if ENABLE_HUSH_SAVEHISTORY && MAX_HISTORY > 0 10674# if ENABLE_HUSH_SAVEHISTORY && MAX_HISTORY > 0
10676 { 10675 {