From: Mike Yuan Date: Thu, 4 Jan 2024 08:45:54 +0000 (+0800) Subject: strv: rename strv_endswith to endswith_strv and dedup ENDSWITH_SET X-Git-Tag: v256-rc1~1314^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F30725%2Fhead;p=thirdparty%2Fsystemd.git strv: rename strv_endswith to endswith_strv and dedup ENDSWITH_SET --- diff --git a/src/basic/strv.c b/src/basic/strv.c index ff2f672c103..908e9e25139 100644 --- a/src/basic/strv.c +++ b/src/basic/strv.c @@ -716,6 +716,16 @@ char* startswith_strv(const char *s, char * const *l) { return NULL; } +char* endswith_strv(const char *s, char * const *l) { + STRV_FOREACH(i, l) { + char *found = endswith(s, *i); + if (found) + return found; + } + + return NULL; +} + char** strv_reverse(char **l) { size_t n; @@ -915,13 +925,3 @@ 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; -} diff --git a/src/basic/strv.h b/src/basic/strv.h index 66fa0cd2e44..f1a8bc49109 100644 --- a/src/basic/strv.h +++ b/src/basic/strv.h @@ -164,6 +164,11 @@ char* startswith_strv(const char *s, char * const *l); #define STARTSWITH_SET(p, ...) \ startswith_strv(p, STRV_MAKE(__VA_ARGS__)) +char* endswith_strv(const char *s, char * const *l); + +#define ENDSWITH_SET(p, ...) \ + endswith_strv(p, STRV_MAKE(__VA_ARGS__)) + #define strv_from_stdarg_alloca(first) \ ({ \ char **_l; \ @@ -207,18 +212,6 @@ char* startswith_strv(const char *s, char * const *l); _x && strv_contains_case(STRV_MAKE(__VA_ARGS__), _x); \ }) -#define ENDSWITH_SET(p, ...) \ - ({ \ - const char *_p = (p); \ - char *_found = NULL; \ - STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ - _found = endswith(_p, *_i); \ - if (_found) \ - break; \ - } \ - _found; \ - }) - #define _FOREACH_STRING(uniq, x, y, ...) \ for (const char *x, * const*UNIQ_T(l, uniq) = STRV_MAKE_CONST(({ x = y; }), ##__VA_ARGS__); \ x; \ @@ -257,5 +250,3 @@ 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); diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c index e7e3a4d71c6..ed89580d822 100644 --- a/src/shared/discover-image.c +++ b/src/shared/discover-image.c @@ -233,7 +233,7 @@ static int extract_image_basename( return r; if (format_suffixes) { - char *e = strv_endswith(name, format_suffixes); + char *e = endswith_strv(name, format_suffixes); if (!e) /* Format suffix is required */ return -EINVAL; diff --git a/src/test/test-strv.c b/src/test/test-strv.c index f4a45703d0d..f70e2aa862d 100644 --- a/src/test/test-strv.c +++ b/src/test/test-strv.c @@ -1006,12 +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")), "")); +TEST(endswith_strv) { + assert_se(streq_ptr(endswith_strv("waldo", STRV_MAKE("xxx", "yyy", "ldo", "zzz")), "ldo")); + assert_se(streq_ptr(endswith_strv("waldo", STRV_MAKE("xxx", "yyy", "zzz")), NULL)); + assert_se(streq_ptr(endswith_strv("waldo", STRV_MAKE("waldo")), "waldo")); + assert_se(streq_ptr(endswith_strv("waldo", STRV_MAKE("w", "o", "ldo")), "o")); + assert_se(streq_ptr(endswith_strv("waldo", STRV_MAKE("knurz", "", "waldo")), "")); } DEFINE_TEST_MAIN(LOG_INFO);