Applied, thank you!
On Thu, Feb 18, 2021 at 10:50 AM Ron Yorston <[email protected]> wrote: > > Zero-length path prefixes can be specified in PATH as a leading or > trailing colon or two adjacent colons. POSIX says that the use of > zero-length prefixes to refer to the current directory is a legacy > feature. Nonetheless the shells in BusyBox respect this feature, > as does 'which'. > > Tab-completion of executables using PATH should support this too. > > function old new delta > complete_cmd_dir_file 934 931 -3 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-3) Total: -3 bytes > > Signed-off-by: Ron Yorston <[email protected]> > --- > libbb/lineedit.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/libbb/lineedit.c b/libbb/lineedit.c > index 367396b91..b0adcf140 100644 > --- a/libbb/lineedit.c > +++ b/libbb/lineedit.c > @@ -769,8 +769,6 @@ static unsigned path_parse(char ***p) > if (!tmp) > break; > tmp++; > - if (*tmp == '\0') > - break; /* :<empty> */ > npth++; > } > > @@ -782,8 +780,6 @@ static unsigned path_parse(char ***p) > if (!tmp) > break; > *tmp++ = '\0'; /* ':' -> '\0' */ > - if (*tmp == '\0') > - break; /* :<empty> */ > res[npth++] = tmp; > } > /* special case: "match subdirectories of the current directory" */ > @@ -854,6 +850,7 @@ static NOINLINE unsigned complete_cmd_dir_file(const char > *command, int type) > struct dirent *next; > struct stat st; > char *found; > + const char *lpath; > > if (paths[i] == NULL) { /* path_parse()'s last component? */ > /* in PATH completion, current dir's subdir names > @@ -863,7 +860,8 @@ static NOINLINE unsigned complete_cmd_dir_file(const char > *command, int type) > paths[i] = (char *)"."; > } > > - dir = opendir(paths[i]); > + lpath = *paths[i] ? paths[i] : "."; > + dir = opendir(lpath); > if (!dir) > continue; /* don't print an error */ > > @@ -878,7 +876,7 @@ static NOINLINE unsigned complete_cmd_dir_file(const char > *command, int type) > if (strncmp(basecmd, name_found, baselen) != 0) > continue; /* no */ > > - found = concat_path_file(paths[i], name_found); > + found = concat_path_file(lpath, name_found); > /* NB: stat() first so that we see is it a directory; > * but if that fails, use lstat() so that > * we still match dangling links */ > -- > 2.29.2 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
