Re: [PATCH 09/12] mailinfo: also free strbuf lists when clearing mailinfo
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 11, 2021, 11:43 UTC
- Message-ID
- <xmqq4kgdhws6.fsf@gitster.g>
- In-Reply-To
- <130ef89218a47adc7ee558e75672e0e4eb5f30ca.1617994052.git.gitgitgadget@gmail.com>
"Andrzej Hunt via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 18 quoted lines
> void clear_mailinfo(struct mailinfo *mi)
> {
> - int i;
> -
> strbuf_release(&mi->name);
> strbuf_release(&mi->email);
> strbuf_release(&mi->charset);
> strbuf_release(&mi->inbody_header_accum);
> free(mi->message_id);
>
> - if (mi->p_hdr_data)
> - for (i = 0; mi->p_hdr_data[i]; i++)
> - strbuf_release(mi->p_hdr_data[i]);
> - free(mi->p_hdr_data);
> - if (mi->s_hdr_data)
> - for (i = 0; mi->s_hdr_data[i]; i++)
> - strbuf_release(mi->s_hdr_data[i]);
> - free(mi->s_hdr_data);So, the original allows mi->p_hdr_data to be NULL and does not do this freeing (the same for the .s_hdr_data member).
> + strbuf_list_free(mi->p_hdr_data); > + strbuf_list_free(mi->s_hdr_data);
Is it safe to feed NULL to the helper?
void strbuf_list_free(struct strbuf **sbs)
{
struct strbuf **s = sbs; while (*s) {
strbuf_release(*s);
free(*s++);
}
free(sbs);
}