Re: [PATCH 2/2] strbuf: allow to use preallocated memory
- From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
- Date
- May 31, 2016, 15:54 UTC
- Message-ID
- <vpq4m9eql2k.fsf@anie.imag.fr>
- In-Reply-To
- <20160531154503.GA24895@Messiaen>
William <william.duclot@ensimag.grenoble-inp.fr> writes:
Show 15 quoted lines
> On Mon, May 30, 2016 at 11:34:42PM -0700, Junio C Hamano wrote: > >> As long as your "on stack strbuf" allows lengthening the string >> beyond the initial allocation (i.e. .alloc, not .len), the user of >> the API (i.e. the one that placed the strbuf on its stack) would not >> know when the implementation (i.e. the code in this patch) decides >> to switch to allocated memory, so it must call strbuf_release() >> before it leaves. Which in turn means that your implementation of >> strbuf_release() must be prepared to be take a strbuf that still has >> its string on the stack. > > Well, my implementation does handle a strbuf that still has its > string on the stack: the buffer won't be freed in this case (only a > reset to STRBUF_INIT). > Unless I misunderstood you?
I think Junio meant:
void f()
{
struct strbuf sb;
char buf[N];
strbuf_wrap_preallocated(&sb, buf, ...);
strbuf_add(&sb, ...);// is it safe to just let sb reach the end of its scope? }
To answer the last question, the user would need to know too much about the allocation policy, so in this case the user should call strbuf_release(), and let it chose whether to call "free()" (OWNS_MEMORY) or not. This is OK with your implementation, but the doc needs to reflect this.
-- Matthieu Moy http://www-verimag.imag.fr/~moy/