Hi Peff, On Wed, 21 Sep 2016, Jeff King wrote: > On Wed, Sep 21, 2016 at 08:24:14PM +0200, Johannes Schindelin wrote: > > > The new regexec_buf() function operates on buffers with an explicitly > > specified length, rather than NUL-terminated strings. > > > > We need to use this function whenever the buffer we want to pass to > > regexec() may have been mmap()ed (and is hence not NUL-terminated). > > > > Note: the original motivation for this patch was to fix a bug where > > `git diff -G <regex>` would crash. This patch converts more callers, > > though, some of which explicitly allocated and constructed > > NUL-terminated strings (or worse: modified read-only buffers to insert > > NULs). > > Nice. I probably would have split these into their own patch, but I > think it is OK here. True. I guess I was a little lazy... > > @@ -228,18 +227,16 @@ static long ff_regexp(const char *line, long len, > > len--; > > } > > > > - line_buffer = xstrndup(line, len); /* make NUL terminated */ > > - > > Nice to see this one going away in particular, since it's called quite a > lot. According to perf, "git log -p" on git.git drops about 1.5 million > malloc calls (about 9% of the total). And here are best-of-five results > for that same command: > > [before] > real 0m14.676s > user 0m13.988s > sys 0m0.676s > > [after] > real 0m14.394s > user 0m13.624s > sys 0m0.760s > > Not a _huge_ improvement, but more significant than the run-to-run > noise. Oh, that's nice! As you guessed, my aim was not to improve performance, but it is a pretty side effect... Thanks for testing! Dscho