Re: [PATCH 01/12] Make starts_with() a wrapper of skip_prefix()
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:59:28
Nguyễn Thái Ngọc Duy [off-list ref] writes:
starts_with() started out as a copy of prefixcmp(). But if we don't care about the sorting order, the logic looks closer to skip_prefix(). This looks like a good thing to do. Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> ---
Sure, but the implementation of skip_prefix() scans the prefix string twice, while prefixcmp() aka starts_with() does it only once. I'd expect a later step in this series would rectify this micro regression in the performance, though ;-)
quoted hunk
git-compat-util.h | 6 +++++- strbuf.c | 9 --------- 2 files changed, 5 insertions(+), 10 deletions(-)diff --git a/git-compat-util.h b/git-compat-util.h index b73916b..84f1078 100644 --- a/git-compat-util.h +++ b/git-compat-util.h@@ -350,7 +350,6 @@ extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_lis extern void set_error_routine(void (*routine)(const char *err, va_list params)); extern void set_die_is_recursing_routine(int (*routine)(void)); -extern int starts_with(const char *str, const char *prefix); extern int prefixcmp(const char *str, const char *prefix); extern int ends_with(const char *str, const char *suffix); extern int suffixcmp(const char *str, const char *suffix);@@ -361,6 +360,11 @@ static inline const char *skip_prefix(const char *str, const char *prefix) return strncmp(str, prefix, len) ? NULL : str + len; } +static inline int starts_with(const char *str, const char *prefix) +{ + return skip_prefix(str, prefix) != NULL; +} + #if defined(NO_MMAP) || defined(USE_WIN32_MMAP) #ifndef PROT_READdiff --git a/strbuf.c b/strbuf.c index 83caf4a..bd4c0d8 100644 --- a/strbuf.c +++ b/strbuf.c@@ -1,15 +1,6 @@ #include "cache.h" #include "refs.h" -int starts_with(const char *str, const char *prefix) -{ - for (; ; str++, prefix++) - if (!*prefix) - return 1; - else if (*str != *prefix) - return 0; -} - int prefixcmp(const char *str, const char *prefix) { for (; ; str++, prefix++)