From 9eb7976448bf684dfb41993ef6c76098978ff933 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Wed, 31 Dec 2008 14:35:39 -0800 Subject: [PATCH] Add string utility functions for prefix and suffix compares Signed-off-by: Shawn O. Pearce --- src/util.c | 20 +++++++++++++ src/util.h | 3 ++ tests/t0003-strutil.c | 67 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 tests/t0003-strutil.c diff --git a/src/util.c b/src/util.c index 64b5d4fbe..feb1bd8ab 100644 --- a/src/util.c +++ b/src/util.c @@ -24,3 +24,23 @@ char *git__strdup(const char *s) return git_ptr_error(GIT_ENOMEM); return r; } + +int git__prefixcmp(const char *str, const char *prefix) +{ + for (;;) { + char p = *(prefix++), s; + if (!p) + return 0; + if ((s = *(str++)) != p) + return s - p; + } +} + +int git__suffixcmp(const char *str, const char *suffix) +{ + size_t a = strlen(str); + size_t b = strlen(suffix); + if (a < b) + return -1; + return strcmp(str + (a - b), suffix); +} diff --git a/src/util.h b/src/util.h index f269af47f..8e8169ce5 100644 --- a/src/util.h +++ b/src/util.h @@ -26,6 +26,9 @@ extern char *git__strdup(const char *); # define strdup(a) GIT__FORBID_MALLOC #endif +extern int git__prefixcmp(const char *str, const char *prefix); +extern int git__suffixcmp(const char *str, const char *suffix); + /* * Realloc the buffer pointed at by variable 'x' so that it can hold * at least 'nr' entries; the number of entries currently allocated diff --git a/tests/t0003-strutil.c b/tests/t0003-strutil.c new file mode 100644 index 000000000..9e4700a60 --- /dev/null +++ b/tests/t0003-strutil.c @@ -0,0 +1,67 @@ +#include "test_lib.h" +#include "common.h" + +BEGIN_TEST(prefixcmp_empty_empty) + must_be_true(git__prefixcmp("", "") == 0); +END_TEST + +BEGIN_TEST(prefixcmp_a_empty) + must_be_true(git__prefixcmp("a", "") == 0); +END_TEST + +BEGIN_TEST(prefixcmp_empty_a) + must_be_true(git__prefixcmp("", "a") < 0); +END_TEST + +BEGIN_TEST(prefixcmp_a_b) + must_be_true(git__prefixcmp("a", "b") < 0); +END_TEST + +BEGIN_TEST(prefixcmp_b_a) + must_be_true(git__prefixcmp("b", "a") > 0); +END_TEST + +BEGIN_TEST(prefixcmp_ab_a) + must_be_true(git__prefixcmp("ab", "a") == 0); +END_TEST + +BEGIN_TEST(prefixcmp_ab_ac) + must_be_true(git__prefixcmp("ab", "ac") < 0); +END_TEST + +BEGIN_TEST(prefixcmp_ab_aa) + must_be_true(git__prefixcmp("ab", "aa") > 0); +END_TEST + + +BEGIN_TEST(suffixcmp_empty_empty) + must_be_true(git__suffixcmp("", "") == 0); +END_TEST + +BEGIN_TEST(suffixcmp_a_empty) + must_be_true(git__suffixcmp("a", "") == 0); +END_TEST + +BEGIN_TEST(suffixcmp_empty_a) + must_be_true(git__suffixcmp("", "a") < 0); +END_TEST + +BEGIN_TEST(suffixcmp_a_b) + must_be_true(git__suffixcmp("a", "b") < 0); +END_TEST + +BEGIN_TEST(suffixcmp_b_a) + must_be_true(git__suffixcmp("b", "a") > 0); +END_TEST + +BEGIN_TEST(suffixcmp_ba_a) + must_be_true(git__suffixcmp("ba", "a") == 0); +END_TEST + +BEGIN_TEST(suffixcmp_zaa_ac) + must_be_true(git__suffixcmp("zaa", "ac") < 0); +END_TEST + +BEGIN_TEST(suffixcmp_zaz_ac) + must_be_true(git__suffixcmp("zaz", "ac") > 0); +END_TEST -- 2.39.5