"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: tog: tree view move-to-parent bug
To:
Christian Weisgerber <naddy@mips.inka.de>
Cc:
gameoftrees@openbsd.org
Date:
Fri, 27 Nov 2020 11:47:58 +0100

Download raw body.

Thread
On Fri, Nov 27, 2020 at 12:11:11AM +0100, Christian Weisgerber wrote:
> Your diff fixes the problem, but looking at the loop in
> tree_view_walk_path(), I wonder if it isn't overly complicated:
> 
> > @@ -1907,7 +1910,8 @@ tree_view_walk_path(struct tog_tree_view_state *s,
> >  		if (err)
> >  			break;
> >  
> > -		err = tree_view_visit_subtree(tree, s);
> > +		err = tree_view_visit_subtree(tree, s,
> > +		    s->selected_entry, s->selected_entry, 0);
> >  		if (err) {
> >  			got_object_tree_close(tree);
> >  			break;
> 
> You are effectively setting
>   s->first_displayed_entry = s->selected_entry;
>   s->selected = 0;
> here.
> 
> But lo and behold, that's exactly what happens earlier for the
> !S_ISDIR case.  And those are the only two non-error exits from the
> loop.
> 
> So I think we can just always set
>   s->first_displayed_entry = s->selected_entry;
> and s->selected is initialized when the view is calloc()ed.
 
Yes, I like this simpler fix, too. Ok.

> diff 16aeacf7088dcd3cd5e654af46a3015cecf41426 /home/naddy/got
> blob - feaac17d0e83e59b9ef24e80a5f347f16db2f891
> file + tog/tog.c
> --- tog/tog.c
> +++ tog/tog.c
> @@ -1875,17 +1875,10 @@ tree_view_walk_path(struct tog_tree_view_state *s,
>  			break;
>  		}
>  		free(te_name);
> -		s->selected_entry = te;
> -		s->selected = got_tree_entry_get_index(te);
> -		if (s->tree != s->root)
> -			s->selected++; /* skip '..' */
> +		s->first_displayed_entry = s->selected_entry = te;
>  
> -		if (!S_ISDIR(got_tree_entry_get_mode(s->selected_entry))) {
> -			/* Jump to this file's entry. */
> -			s->first_displayed_entry = s->selected_entry;
> -			s->selected = 0;
> -			break;
> -		}
> +		if (!S_ISDIR(got_tree_entry_get_mode(s->selected_entry)))
> +			break; /* jump to this file's entry */
>  
>  		slash = strchr(p, '/');
>  		if (slash)
> -- 
> Christian "naddy" Weisgerber                          naddy@mips.inka.de
> 
>