ash,hush: use HOME for tab completion and prompts
No binary (build failed)
—
(log yok)
| @@ -1924,6 +1924,7 @@ unsigned size_from_HISTFILESIZE(const char *hp) FAST_FUNC; | |
| # define MAX_HISTORY 0 | |
| # endif | |
| typedef const char *get_exe_name_t(int i) FAST_FUNC; | |
| + | typedef const char *sh_get_var_t(const char *name) FAST_FUNC; |
| typedef struct line_input_t { | |
| int flags; | |
| int timeout; | |
| @@ -1937,9 +1938,8 @@ typedef struct line_input_t { | |
| # if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH | |
| /* function to fetch additional application-specific names to match */ | |
| get_exe_name_t *get_exe_name; | |
| - | # define EDITING_HAS_get_exe_name 1 |
| - | # else |
| - | # define EDITING_HAS_get_exe_name 0 |
| + | /* function to fetch value of shell variable */ |
| + | sh_get_var_t *sh_get_var; |
| # endif | |
| # endif | |
| # if MAX_HISTORY | |
| @@ -1993,11 +1993,6 @@ int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC; | |
| read_line_input(prompt, command, maxsize) | |
| #endif | |
| - | #ifndef EDITING_HAS_get_exe_name |
| - | # define EDITING_HAS_get_exe_name 0 |
| - | #endif |
| - | |
| - | |
| #ifndef COMM_LEN | |
| # ifdef TASK_COMM_LEN | |
| enum { COMM_LEN = TASK_COMM_LEN }; | |
| @@ -259,6 +259,16 @@ static const char *get_username_str(void) | |
| static NOINLINE const char *get_homedir_or_NULL(void) | |
| { | |
| + | const char *home; |
| + | |
| + | # if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH |
| + | home = state->sh_get_var ? state->sh_get_var("HOME") : getenv("HOME"); |
| + | # else |
| + | home = getenv("HOME"); |
| + | # endif |
| + | if (home != NULL && home[0] != '\0') |
| + | return home; |
| + | |
| if (!got_user_strings) | |
| get_user_strings(); | |
| return home_pwd_buf; | |
| @@ -861,7 +871,7 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type) | |
| continue; | |
| } | |
| # endif | |
| - | # if EDITING_HAS_get_exe_name |
| + | # if ENABLE_SHELL_ASH || ENABLE_SHELL_HUSH |
| if (state->get_exe_name) { | |
| i = 0; | |
| for (;;) { | |
| @@ -9720,7 +9720,7 @@ evalpipe(union node *n, int flags) | |
| } | |
| /* setinteractive needs this forward reference */ | |
| - | #if EDITING_HAS_get_exe_name |
| + | #if ENABLE_FEATURE_EDITING |
| static const char *get_builtin_name(int i) FAST_FUNC; | |
| #endif | |
| @@ -9757,9 +9757,8 @@ setinteractive(int on) | |
| #if ENABLE_FEATURE_EDITING | |
| if (!line_input_state) { | |
| line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP); | |
| - | # if EDITING_HAS_get_exe_name |
| line_input_state->get_exe_name = get_builtin_name; | |
| - | # endif |
| + | line_input_state->sh_get_var = lookupvar; |
| } | |
| #endif | |
| } | |
| @@ -10262,7 +10261,7 @@ find_builtin(const char *name) | |
| return bp; | |
| } | |
| - | #if EDITING_HAS_get_exe_name |
| + | #if ENABLE_FEATURE_EDITING |
| static const char * FAST_FUNC | |
| get_builtin_name(int i) | |
| { | |
| @@ -8188,7 +8188,7 @@ static const struct built_in_command *find_builtin(const char *name) | |
| return find_builtin_helper(name, bltins2, &bltins2[ARRAY_SIZE(bltins2)]); | |
| } | |
| - | #if ENABLE_HUSH_JOB && EDITING_HAS_get_exe_name |
| + | #if ENABLE_HUSH_JOB && ENABLE_FEATURE_EDITING |
| static const char * FAST_FUNC get_builtin_name(int i) | |
| { | |
| if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) { | |
| @@ -10668,9 +10668,8 @@ int hush_main(int argc, char **argv) | |
| # if ENABLE_FEATURE_EDITING | |
| G.line_input_state = new_line_input_t(FOR_SHELL); | |
| - | # if EDITING_HAS_get_exe_name |
| G.line_input_state->get_exe_name = get_builtin_name; | |
| - | # endif |
| + | G.line_input_state->sh_get_var = get_local_var_value; |
| # endif | |
| # if ENABLE_HUSH_SAVEHISTORY && MAX_HISTORY > 0 | |
| { | |