[git commit] lineedit: match local directories when searching PATH
Denys Vlasenko
vda.linux at googlemail.com
Wed Dec 16 08:38:25 UTC 2020
commit: https://git.busybox.net/busybox/commit/?id=8baa643a3445882ec9c39dfcabb7374081c13aee
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
When tab-completing a command we search PATH if the partial text
doesn't include a slash. Also match subdirectories of the current
directory, in case the user intends to run a binary from one of
them.
function old new delta
complete_cmd_dir_file 894 917 +23
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 23/0) Total: 23 bytes
Signed-off-by: Ron Yorston <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
libbb/lineedit.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index d64d7d0c2..5eb701f00 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -753,7 +753,7 @@ static int path_parse(char ***p)
return 1;
tmp = (char*)pth;
- npth = 1; /* path component count */
+ npth = 2; /* path component count */
while (1) {
tmp = strchr(tmp, ':');
if (!tmp)
@@ -776,6 +776,8 @@ static int path_parse(char ***p)
break; /* :<empty> */
res[npth++] = tmp;
}
+ /* special case: match subdirectories of the current directory */
+ res[npth++] = NULL;
return npth;
}
@@ -843,6 +845,11 @@ static NOINLINE unsigned complete_cmd_dir_file(const char *command, int type)
struct stat st;
char *found;
+ if (paths[i] == NULL) {
+ type = FIND_DIR_ONLY;
+ paths[i] = (char *)".";
+ }
+
dir = opendir(paths[i]);
if (!dir)
continue; /* don't print an error */
More information about the busybox-cvs
mailing list