summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorRon Yorston2022-03-24 12:17:25 +0000
committerDenys Vlasenko2022-06-26 18:05:50 +0200
commit7d1c7d8337853ca99e6ec1150ac4b834cfed5cd3 (patch)
tree6fd6c647b5373ed376070d66ac6ca4acc507dee7 /include
parent95fec31be601bfdced6bed7007a33b26e968e0db (diff)
downloadbusybox-7d1c7d8337853ca99e6ec1150ac4b834cfed5cd3.zip
busybox-7d1c7d8337853ca99e6ec1150ac4b834cfed5cd3.tar.gz
ash,hush: use HOME for tab completion and prompts
ash and hush correctly use the value of HOME for tilde expansion. However the line editing code in libbb obtains the user's home directory by calling getpwuid(). Thus tildes in tab completion and prompts may be interpreted differently than in tilde expansion. When the line editing code is invoked from a shell make it use the shell's interpretation of tilde. This is similar to how GNU readline and bash collaborate. function old new delta get_homedir_or_NULL 29 72 +43 optschanged 119 126 +7 hush_main 1204 1211 +7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 57/0) Total: 57 bytes v2: Always check for HOME before trying the password database: this is what GNU readline does. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'include')
-rw-r--r--include/libbb.h11
1 files changed, 3 insertions, 8 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 6aeec24..abbc9ac 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -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 };