diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-03-21 12:47:41 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-03-21 12:47:41 -0700 |
commit | 1be645c0b1b2218d58fbae9dd6174ff2a9d66d57 (patch) | |
tree | 91e1f8d19b5c5716a6f2645f8ead67f4264b194d /git-compat-util.h | |
parent | Merge branch 'nd/tag-version-sort' (diff) | |
parent | skip_prefix(): scan prefix only once (diff) | |
download | tgif-1be645c0b1b2218d58fbae9dd6174ff2a9d66d57.tar.xz |
Merge branch 'dk/skip-prefix-scan-only-once'
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
Diffstat (limited to 'git-compat-util.h')
-rw-r--r-- | git-compat-util.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/git-compat-util.h b/git-compat-util.h index 585ef8a79b..892032bc79 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -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) |