summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2007-12-29 19:22:14 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-01-02 10:28:54 (GMT)
commit99a6a97b1bf866d7050e8afb137b4b29507f0caa (patch)
treeed5d455b87ebfc647ba13fb9c274e1a73b7e9cdb
parent5f7b202a7fa8ffbf076c456106750b2bb7732ba4 (diff)
downloadgit-99a6a97b1bf866d7050e8afb137b4b29507f0caa.zip
git-99a6a97b1bf866d7050e8afb137b4b29507f0caa.tar.gz
git-99a6a97b1bf866d7050e8afb137b4b29507f0caa.tar.bz2
Optimize prefixcmp()
Certain codepaths (notably "git log --pretty=format...") use prefixcmp() extensively, with very short prefixes. In those cases, calling strlen() is a wasteful operation, so avoid it. Initial patch by Marco Costalba. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--git-compat-util.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/git-compat-util.h b/git-compat-util.h
index 79eb10e..7059cbd 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -398,7 +398,11 @@ static inline int sane_case(int x, int high)
static inline int prefixcmp(const char *str, const char *prefix)
{
- return strncmp(str, prefix, strlen(prefix));
+ for (; ; str++, prefix++)
+ if (!*prefix)
+ return 0;
+ else if (*str != *prefix)
+ return (unsigned char)*prefix - (unsigned char)*str;
}
static inline int strtoul_ui(char const *s, int base, unsigned int *result)