implement ends_with via strip_suffix
authorJeff King <peff@peff.net>
Mon, 30 Jun 2014 16:58:08 +0000 (12:58 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Jun 2014 20:43:16 +0000 (13:43 -0700)
The ends_with function is essentially a simplified version
of strip_suffix, in which we throw away the stripped length.
Implementing it as an inline on top of strip_suffix has two
advantages:

1. We save a bit of duplicated code.

2. The suffix is typically a string literal, and we call
strlen on it. By making the function inline, many
compilers can replace the strlen call with a constant.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-compat-util.h
strbuf.c
index 4c451b575d2dc3eac6c0b493ec1d1f3bf1e0c171..1c9c68cb89712bf838945d13ce971cb1589fc518 100644 (file)
@@ -339,7 +339,6 @@ 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 ends_with(const char *str, const char *suffix);
 
 static inline const char *skip_prefix(const char *str, const char *prefix)
 {
@@ -377,6 +376,12 @@ static inline int strip_suffix(const char *str, const char *suffix, size_t *len)
        return strip_suffix_mem(str, len, suffix);
 }
 
+static inline int ends_with(const char *str, const char *suffix)
+{
+       size_t len;
+       return strip_suffix(str, suffix, &len);
+}
+
 #if defined(NO_MMAP) || defined(USE_WIN32_MMAP)
 
 #ifndef PROT_READ
index ee96dcfb816625436582833d812a7156513d5d39..63356ccd1b60bfddbff3dcb1d816d3e0f0d16ce4 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -10,15 +10,6 @@ int starts_with(const char *str, const char *prefix)
                        return 0;
 }
 
-int ends_with(const char *str, const char *suffix)
-{
-       int len = strlen(str), suflen = strlen(suffix);
-       if (len < suflen)
-               return 0;
-       else
-               return !strcmp(str + len - suflen, suffix);
-}
-
 /*
  * Used as the default ->buf value, so that people can always assume
  * buf is non NULL and ->buf is NUL terminated even for a freshly