summaryrefslogtreecommitdiff
path: root/strbuf.c
diff options
context:
space:
mode:
authorMarco Costalba <mcostalba@gmail.com>2008-02-09 15:40:19 +0100
committerJunio C Hamano <gitster@pobox.com>2008-02-09 23:57:08 -0800
commitc3a670de50589dedf2d9b83305e8bd0ff63a1a60 (patch)
tree303820b577a8d046a0cddddd9fbc58bd362c529d /strbuf.c
parent053d9e432be246a389fb8adaa0c88e7c791f8b21 (diff)
downloadgit-c3a670de50589dedf2d9b83305e8bd0ff63a1a60.tar.gz
Avoid a useless prefix lookup in strbuf_expand()
Currently, the --pretty=format prefix is looked up in a tight loop in strbuf_expand(), if prefix is found it is then used as argument for format_commit_item() that does another search by a switch statement to select the proper operation. Because the switch statement is already able to discard unknown matches we don't need the prefix lookup before to call format_commit_item(). Signed-off-by: Marco Costalba <mcostalba@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'strbuf.c')
-rw-r--r--strbuf.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/strbuf.c b/strbuf.c
index 5efcfc8860..4aed75265e 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -146,11 +146,12 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
strbuf_setlen(sb, sb->len + len);
}
-void strbuf_expand(struct strbuf *sb, const char *format,
- const char **placeholders, expand_fn_t fn, void *context)
+void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
+ void *context)
{
for (;;) {
- const char *percent, **p;
+ const char *percent;
+ size_t consumed;
percent = strchrnul(format, '%');
strbuf_add(sb, format, percent - format);
@@ -158,14 +159,10 @@ void strbuf_expand(struct strbuf *sb, const char *format,
break;
format = percent + 1;
- for (p = placeholders; *p; p++) {
- if (!prefixcmp(format, *p))
- break;
- }
- if (*p) {
- fn(sb, *p, context);
- format += strlen(*p);
- } else
+ consumed = fn(sb, format, context);
+ if (consumed)
+ format += consumed;
+ else
strbuf_addch(sb, '%');
}
}