aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/tests/test_utils.c36
-rw-r--r--src/libstrongswan/utils/utils.h8
2 files changed, 44 insertions, 0 deletions
diff --git a/src/libstrongswan/tests/test_utils.c b/src/libstrongswan/tests/test_utils.c
index d9f1726ff..6ab60a6fd 100644
--- a/src/libstrongswan/tests/test_utils.c
+++ b/src/libstrongswan/tests/test_utils.c
@@ -188,6 +188,38 @@ START_TEST(test_round)
END_TEST
/*******************************************************************************
+ * strpfx
+ */
+
+static struct {
+ char *str;
+ char *pfx;
+ bool prefix;
+ bool case_prefix;
+} strpfx_data[] = {
+ {"", "", TRUE, TRUE},
+ {"abc", "", TRUE, TRUE},
+ {"abc", "a", TRUE, TRUE},
+ {"abc", "ab", TRUE, TRUE},
+ {"abc", "abc", TRUE, TRUE},
+ {"abc", "abcd", FALSE, FALSE},
+ {"abc", "AB", FALSE, TRUE},
+ {"ABC", "ab", FALSE, TRUE},
+ {" abc", "abc", FALSE, FALSE},
+};
+
+START_TEST(test_strpfx)
+{
+ bool prefix;
+
+ prefix = strpfx(strpfx_data[_i].str, strpfx_data[_i].pfx);
+ ck_assert(prefix == strpfx_data[_i].prefix);
+ prefix = strcasepfx(strpfx_data[_i].str, strpfx_data[_i].pfx);
+ ck_assert(prefix == strpfx_data[_i].case_prefix);
+}
+END_TEST
+
+/*******************************************************************************
* memxor
*/
@@ -442,6 +474,10 @@ Suite *utils_suite_create()
tcase_add_test(tc, test_round);
suite_add_tcase(s, tc);
+ tc = tcase_create("string helper");
+ tcase_add_loop_test(tc, test_strpfx, 0, countof(strpfx_data));
+ suite_add_tcase(s, tc);
+
tc = tcase_create("memxor");
tcase_add_test(tc, test_memxor);
tcase_add_test(tc, test_memxor_aligned);
diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h
index d055f712d..8fe741211 100644
--- a/src/libstrongswan/utils/utils.h
+++ b/src/libstrongswan/utils/utils.h
@@ -113,6 +113,14 @@ static inline bool strncaseeq(const char *x, const char *y, size_t len)
}
/**
+ * Helper function that checks if a string starts with a given prefix
+ */
+static inline bool strcasepfx(const char *x, const char *prefix)
+{
+ return strncaseeq(x, prefix, strlen(prefix));
+}
+
+/**
* NULL-safe strdup variant
*/
static inline char *strdupnull(const char *s)