Optimize prefixcmp()
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Sat, 29 Dec 2007 19:22:14 +0000 (20:22 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Jan 2008 10:28:54 +0000 (02:28 -0800)
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>
git-compat-util.h

index 79eb10eacba955e0c58a0a540c4ac577f84953e9..7059cbdab7d79ecde6f0533776ba9d73c9b60a1b 100644 (file)
@@ -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)