Re: [PATCH 2/2] strbuf: allow to use preallocated memory
- From
- William Duclot <william.duclot@ensimag.grenoble-inp.fr>
- Date
- May 31, 2016, 16:08 UTC
- Message-ID
- <20160531160856.GC24895@Messiaen>
- In-Reply-To
- <vpq4m9eql2k.fsf@anie.imag.fr>
On Tue, May 31, 2016 at 05:54:59PM +0200, Matthieu Moy wrote:
Show 35 quoted lines
> William <william.duclot@ensimag.grenoble-inp.fr> writes:
>
> > 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.Okay, I understand. The idea was that the only change in the API is the initialization: the API user can then use the strbuf like they could before this patch, with the same responsabilities (having to release the strbuf when they don't need it anymore). Maybe a clearer documentation about the life and death of a strbuf (initialization, use and release) would be useful, yes