Skip to content

Commit

Permalink
strbuf_getwholeline: use getc macro
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Apr 16, 2015
1 parent 2dfb2e0 commit 3446a59
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion strbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 3446a59

Please sign in to comment.