[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH] lineedit: support empty PATH entries in tab completion
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2021-02-23 11:23:11
Message-ID: CAK1hOcP5S7bxf_jC9-w5OcNKTPkA93usLxwJhbsKKUcVtOd0Og () mail ! gmail ! com
[Download RAW message or body]
Applied, thank you!
On Thu, Feb 18, 2021 at 10:50 AM Ron Yorston <rmy@pobox.com> 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 <rmy@pobox.com>
> ---
> 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
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic