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. -- Matthieu Moy http://www-verimag.imag.fr/~moy/ -- 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