On Tue, May 31, 2016 at 05:54:59PM +0200, Matthieu Moy wrote: > William <william.duclot@xxxxxxxxxxxxxxxxxxxxxxx> 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html