strbuf_getwholeline: use getc macro
authorJeff King <peff@peff.net>
Thu, 16 Apr 2015 08:48:23 +0000 (04:48 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Apr 2015 15:15:04 +0000 (08:15 -0700)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
strbuf.c
index 88cafd4a70b8179a4e911c18704fb4ab0f2a21f5..14f337db1f10d6c1c05c3256bebfe3a177b126af 100644 (file)
--- 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)