diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2007-12-29 20:22:14 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-01-02 02:28:54 -0800 |
commit | 99a6a97b1bf866d7050e8afb137b4b29507f0caa (patch) | |
tree | ed5d455b87ebfc647ba13fb9c274e1a73b7e9cdb /git-compat-util.h | |
parent | 5f7b202a7fa8ffbf076c456106750b2bb7732ba4 (diff) | |
download | git-99a6a97b1bf866d7050e8afb137b4b29507f0caa.tar.gz git-99a6a97b1bf866d7050e8afb137b4b29507f0caa.tar.xz |
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>
Diffstat (limited to 'git-compat-util.h')
-rw-r--r-- | git-compat-util.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/git-compat-util.h b/git-compat-util.h index 79eb10eac..7059cbdab 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) |