Merge branch 'dk/skip-prefix-scan-only-once'
authorJunio C Hamano <gitster@pobox.com>
Fri, 21 Mar 2014 19:47:41 +0000 (12:47 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 21 Mar 2014 19:47:41 +0000 (12:47 -0700)
Update implementation of skip_prefix() to scan only once; given
that most "prefix" arguments to the inline function are constant
strings whose strlen() can be determined at the compile time, this
might actually make things worse with a compiler with sufficient
intelligence.

* dk/skip-prefix-scan-only-once:
skip_prefix(): scan prefix only once

git-compat-util.h
index 585ef8a79bd9fa66a34a840eae30658894a213f1..892032bc79b88c9180f9f4c8ba171407d7c784ed 100644 (file)
@@ -343,8 +343,11 @@ extern int ends_with(const char *str, const char *suffix);
 
 static inline const char *skip_prefix(const char *str, const char *prefix)
 {
-       size_t len = strlen(prefix);
-       return strncmp(str, prefix, len) ? NULL : str + len;
+       do {
+               if (!*prefix)
+                       return str;
+       } while (*str++ == *prefix++);
+       return NULL;
 }
 
 #if defined(NO_MMAP) || defined(USE_WIN32_MMAP)