[Libguestfs] [PATCH] fish: fix dir completion on filesystems w/o dirent.d_type (RHBZ#1153844).

Pino Toscano ptoscano at redhat.com
Fri Oct 31 17:27:11 UTC 2014


On Friday 31 October 2014 17:07:24 Richard W.M. Jones wrote:
> On Fri, Oct 31, 2014 at 05:56:10PM +0100, Pino Toscano wrote:
> > On filesystems whose dirent.d_type is DT_UNKNOWN or some unknown
> > value, manually check whether an entry is a directory, thus
> > completing in the proper way.
> 
> Happens on Windows (NTFS) too, and it's also annoying there ...
> 
> > ---
> > 
> >  fish/destpaths.c | 8 +++++++-
> >  1 file changed, 7 insertions(+), 1 deletion(-)
> > 
> > diff --git a/fish/destpaths.c b/fish/destpaths.c
> > index f224106..df1ec00 100644
> > --- a/fish/destpaths.c
> > +++ b/fish/destpaths.c
> > @@ -191,7 +191,13 @@ complete_dest_paths_generator (const char
> > *text, int state)> 
> >                    else {
> >                    
> >                      words = w;
> >                      words[nr_words].name = p;
> > 
> > -                    words[nr_words].is_dir = dirents->val[i].ftyp
> > == 'd'; +                    if (dirents->val[i].ftyp == 'u'
> > +                        || dirents->val[i].ftyp == '?') {
> > +                      int is_dir = guestfs_is_dir_opts (g,
> > words[nr_words].name,
> > +                       
> > GUESTFS_IS_DIR_OPTS_FOLLOWSYMLINKS, 1, -1);
> Is it right to follow symlinks here I wonder?

At least this is the behaviour bash seems to do:
$ mkdir test
$ touch test/file
$ ln -s test link
$ touch file
$ ln -s file nondirlink
$ vi t<TAB> -> test/
$ vi l<TAB> -> link/
$ vi f<TAB> -> file
$ vi n<TAB> -> nondirlink

-- 
Pino Toscano




More information about the Libguestfs mailing list