On Thu, Jun 21, 2018 at 09:03:05AM +0200, Johannes Schindelin wrote: > > > And at that point, maybe > > > > > > char *some_var = xstrdup("default"); > > > git_config_string(&some_var, ...); > > > > > > that takes "char **" and frees the current storage before assigning to > > > it may be simpler than the two-variable approach. > > > > That _is_ much nicer, but you cannot use xstrdup() as the initializer > > for a global "static char *some_var", which is what the majority of the > > config variables are. It's this "static initializer sometimes, run-time > > heap sometimes" duality to the variables that makes handling it such a > > pain. > > This makes me think of Michael's proposal to teach strbuf some sort of > STRBUF_INIT_CONST("default") which would set the appropriate len and set > alloc to 0. > > That way, we could turn those settings into strbufs that only allocate > memory when/if needed. Yes! I should have thought about that as soon as I started saying "you need two variables...". That is a good indication that you need a struct. ;) I think the result would be quite readable and pleasant to work with. I tried to dig up previous conversations about this to see if there were any patches shown, but I couldn't find any (mostly I found the conversation about using stack buffers in strbufs, which is not quite the same thing, since we _do_ want to write in those). -Peff