On Tue, Jun 04, 2024 at 06:01:42AM -0400, Jeff King wrote:
Show 32 quoted lines
> On Tue, Jun 04, 2024 at 09:42:57AM +0200, Patrick Steinhardt wrote:
>
> > > diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
> > > index 356b7349f9..3af9fec1fb 100644
> > > --- a/builtin/sparse-checkout.c
> > > +++ b/builtin/sparse-checkout.c
> > > @@ -500,6 +500,8 @@ static int sparse_checkout_init(int argc, const char **argv, const char *prefix)
> > > return 0;
> > > }
> > >
> > > + free(sparse_filename);
> > > +
> >
> > I wonder whether it would make sense to merge this patch and patch 4
> > and then refactor the code to have a common exit path.
>
> I thought about that, too, but it doesn't quite work. In the non-error
> exit path we _don't_ clean up the pattern_list, because we tail-call
> into write_patterns_and_update(), which frees it itself.
>
> If we refactored that function to _not_ free, and then switched here to
> a "ret" variable, like:
>
> ...
> ret = write_patterns_and_update(&pl);
> out:
> clear_pattern_list(&pl);
> free(sparse_filename);
> return ret;
>
> it could work. I mostly tried to err on the side of minimizing
> refactoring, though.