]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
common: Add `string_has_suffix`.
authorFlorian Forster <octo@collectd.org>
Mon, 18 Dec 2023 10:26:48 +0000 (11:26 +0100)
committerFlorian Forster <octo@collectd.org>
Mon, 18 Dec 2023 22:32:14 +0000 (23:32 +0100)
src/utils/common/common.c
src/utils/common/common.h
src/utils/common/common_test.c

index 34258f09ef7f8a31d6cd32e1926928a533bb5356..ad72e93fffa3e98e7d85d687d79fc118d9a304a3 100644 (file)
@@ -423,6 +423,21 @@ int strjoin(char *buffer, size_t buffer_size, char **fields, size_t fields_num,
   return (int)buffer_req;
 }
 
+bool string_has_suffix(char const *s, char const *suffix) {
+  if (s == NULL || suffix == NULL) {
+    return false;
+  }
+
+  size_t s_len = strlen(s);
+  size_t suffix_len = strlen(suffix);
+  if (s_len < suffix_len) {
+    return false;
+  }
+
+  s += (s_len - suffix_len);
+  return strcmp(s, suffix) == 0;
+}
+
 int escape_string(char *buffer, size_t buffer_size) {
   char *temp;
   size_t j;
index 51b4032c0e7bae10237beb5cbb7fbc61fa29c19e..dd8007aef3fb721a9bfdfb64e3bf87b6c8c32cd6 100644 (file)
@@ -179,6 +179,11 @@ int strsplit(char *string, char **fields, size_t size);
 int strjoin(char *dst, size_t dst_len, char **fields, size_t fields_num,
             const char *sep);
 
+
+/* string_has_suffix returns true if s ends with suffix. If either s or suffix
+ * are NULL, false is returned. */
+bool string_has_suffix(char const *s, char const *suffix);
+
 /*
  * NAME
  *   escape_slashes
index d4a667d4c141546e24381469a06127fe1a8a7e69..76ff77d516673e5d2c3ede078809ab23df43bac1 100644 (file)
@@ -361,6 +361,27 @@ DEF_TEST(format_values) {
   return 0;
 }
 
+DEF_TEST(string_has_suffix) {
+  struct {
+    char const *s;
+    char const *suffix;
+    bool want;
+  } cases[] = {
+    {"foo.bar", "bar", true},
+    {"foo.qux", "bar", false},
+    {"foo.Bar", "bar", false},
+    {"foo", "foo", true},
+    {"foo", "foo.bar", false},
+    {"foo", NULL, false},
+    {NULL, "foo", false},
+  };
+  for (size_t i = 0; i < STATIC_ARRAY_SIZE(cases); i++) {
+    EXPECT_EQ_INT(cases[i].want, string_has_suffix(cases[i].s, cases[i].suffix));
+  }
+
+  return 0;
+}
+
 int main(void) {
   RUN_TEST(sstrncpy);
   RUN_TEST(sstrdup);
@@ -371,6 +392,7 @@ int main(void) {
   RUN_TEST(strunescape);
   RUN_TEST(value_to_rate);
   RUN_TEST(format_values);
+  RUN_TEST(string_has_suffix);
 
   END_TEST;
 }