[PATCH 1/9] strbuf_getwholeline: use getc macro
- From
Jeff King <peff@peff.net>
- Date
- Apr 16, 2015, 08:48 UTC
- Message-ID
- <20150416084822.GA17938@peff.net>
- In-Reply-To
- <20150416084733.GA17811@peff.net>
strbuf_getwholeline calls fgetc in a tight loop. Using the getc form, which can be implemented as a macro, should be faster (and we do not care about it evaluating our argument twice, as we just have a plain variable).
On my glibc system, running "git rev-parse refs/heads/does-not-exist" on a file with an extremely large (1.6GB) packed-refs file went from (best of 3 runs):
real 0m19.383s user 0m18.876s sys 0m0.528s
to:
real 0m18.900s user 0m18.472s sys 0m0.448s
for a wall-clock speedup of 2.5%.
Signed-off-by: Jeff King <peff@peff.net> --- strbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/strbuf.c b/strbuf.c index 88cafd4..14f337d 100644 --- a/strbuf.c +++ b/strbuf.c @@ -443,7 +443,7 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term) return EOF; strbuf_reset(sb); - while ((ch = fgetc(fp)) != EOF) { + while ((ch = getc(fp)) != EOF) { strbuf_grow(sb, 1); sb->buf[sb->len++] = ch; if (ch == term)
-- 2.4.0.rc2.384.g7297a4a