]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
strv: add new strv_endswith() helper
authorLennart Poettering <lennart@poettering.net>
Wed, 15 Nov 2023 15:55:22 +0000 (16:55 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 3 Jan 2024 17:38:46 +0000 (18:38 +0100)
src/basic/strv.c
src/basic/strv.h
src/test/test-strv.c

index c2109d35bc25ed42e7898965512cc2a3bd87cab2..43a4f569bd25e492fd3f897058268b8f02972c14 100644 (file)
@@ -905,3 +905,13 @@ int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const
 }
 
 DEFINE_HASH_OPS_FULL(string_strv_hash_ops, char, string_hash_func, string_compare_func, free, char*, strv_free);
+
+char* strv_endswith(const char *s, char **l) {
+        STRV_FOREACH(i, l) {
+                char *e = endswith(s, *i);
+                if (e)
+                        return (char*) e;
+        }
+
+        return NULL;
+}
index fec26167339dbd37e4c793331b54d9e1c2e46203..18df0f23f246fe3ff0c02d588da5843b1534abd0 100644 (file)
@@ -252,3 +252,5 @@ int _string_strv_hashmap_put(Hashmap **h, const char *key, const char *value  HA
 int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const char *value  HASHMAP_DEBUG_PARAMS);
 #define string_strv_hashmap_put(h, k, v) _string_strv_hashmap_put(h, k, v  HASHMAP_DEBUG_SRC_ARGS)
 #define string_strv_ordered_hashmap_put(h, k, v) _string_strv_ordered_hashmap_put(h, k, v  HASHMAP_DEBUG_SRC_ARGS)
+
+char* strv_endswith(const char *s, char **l);
index cfd662b329d952d091469b9d4d2e0693c0b89b12..f4a45703d0d433e68d137dc3f07f64662961b8e6 100644 (file)
@@ -1006,4 +1006,12 @@ TEST(strv_find_first_field) {
         assert_se(streq_ptr(strv_find_first_field(STRV_MAKE("i", "k", "l", "m", "d", "c", "a", "b"), haystack), "j"));
 }
 
+TEST(strv_endswith) {
+        assert_se(streq_ptr(strv_endswith("waldo", STRV_MAKE("xxx", "yyy", "ldo", "zzz")), "ldo"));
+        assert_se(streq_ptr(strv_endswith("waldo", STRV_MAKE("xxx", "yyy", "zzz")), NULL));
+        assert_se(streq_ptr(strv_endswith("waldo", STRV_MAKE("waldo")), "waldo"));
+        assert_se(streq_ptr(strv_endswith("waldo", STRV_MAKE("w", "o", "ldo")), "o"));
+        assert_se(streq_ptr(strv_endswith("waldo", STRV_MAKE("knurz", "", "waldo")), ""));
+}
+
 DEFINE_TEST_MAIN(LOG_INFO);