From: Jeff King Date: Mon, 26 Aug 2019 18:42:53 GMT Subject: Re: [PATCH 2/2] fast-import: duplicate into history rather than passing ownership Message-ID: <20190826184252.GC23399@sigill.intra.peff.net> In-Reply-To: <248c5f9f-ba44-6dec-6f30-f7d193bc22bb@web.de> On Sun, Aug 25, 2019 at 04:21:54PM +0200, René Scharfe wrote: > > You could xstrndup(command_buf.buf, command_buf.len), which would avoid > > a hidden strlen. > > xstrndup() also searches for NUL, albeit with memchr(3). xmemdupz() > would copy without checking. > > I suspect the simplicity of xstrdup() outweighs the benefits of the > alternatives, but didn't do any measurements.. Yep. I actually started to write xmemdupz() originally then decided it was unnecessarily verbose and a premature optimization. I wondered after this exchange whether something like: char *strbuf_dup(const struct strbuf *sb) { return xmemdupz(sb->buf, sb->len); } would be a useful general helper. Grepping around it doesn't seem like there are a lot of candidates. If we really wanted to micro-optimize, we could have cmd_hist store strbufs, and then we could reuse the same buffers over and over without re-allocating. And use strbuf_addbuf(&cmd_hist.buf, &command_buf). :) -Peff