Johannes Schindelin schrieb: > 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. > 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) prefixcmp() was already optimized before -- only for a different use case. At a number of callsites the prefix is a string literal, which allowed the compiler to perform the strlen() call at compile time. The patch increases the text size considerably: the file "git" is 2,620,938 without and 2,640,450 with the patch in my build (there are 136 callsites in builtin*.c). The new version of prefixcmp() shouldn't be inlined any more, as the benefit of doing so is gone. Is there a portable way to let the preprocessor decide if prefixcmp_literal() or prefixcmp_generic() is to be used, depending on the prefix being a string literal or not? René - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html