Re: [PATCH 6/6] apply: refactor `struct image` to use a `struct strbuf`
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 16, 2024, 19:30 UTC
- Message-ID
- <xmqq8qvrmm5e.fsf@gitster.g>
- In-Reply-To
- <6cf45daf84af68f74d87a5b2ae7102d4cd8ceb57.1726470385.git.ps@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 6 quoted lines
> Refactor the code to use a `struct strbuf` instead, addressing all of > the above. Like this we can easily perform in-place updates in all > situations, the logic to perform those updates becomes way simpler and > the lifetime of the buffer becomes a ton easier to track. > > This refactoring also plugs some leaking buffers as a side effect.
Nice.
In short, the leaks were in the original code where it was making direct assignment to image->buf, and we now use strbuf_attach(), which releases the current buffer before replacing it with a piece of memory allocated outside the control of strbuf API?
Show 5 quoted lines
> static void image_remove_last_line(struct image *img)
> {
> - img->len -= img->line[--img->line_nr].len;
> + strbuf_setlen(&img->buf, img->buf.len - img->line[--img->line_nr].len);
> }I feel that this, while technically is faithful to the original, got a bit too complex to understand what is going on. Perhaps split it into two statements with an intermediate variable? I dunno.
Thanks.