utils: Add case-insensitive version of strpfx()
authorTobias Brunner <tobias@strongswan.org>
Tue, 6 Aug 2013 15:27:15 +0000 (17:27 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Sat, 24 Aug 2013 14:22:51 +0000 (16:22 +0200)
src/libstrongswan/tests/test_utils.c
src/libstrongswan/utils/utils.h

index d9f1726..6ab60a6 100644 (file)
@@ -188,6 +188,38 @@ START_TEST(test_round)
 END_TEST
 
 /*******************************************************************************
 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
  */
 
  * memxor
  */
 
@@ -442,6 +474,10 @@ Suite *utils_suite_create()
        tcase_add_test(tc, test_round);
        suite_add_tcase(s, tc);
 
        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);
        tc = tcase_create("memxor");
        tcase_add_test(tc, test_memxor);
        tcase_add_test(tc, test_memxor_aligned);
index d055f71..8fe7412 100644 (file)
@@ -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)
  * NULL-safe strdup variant
  */
 static inline char *strdupnull(const char *s)