diff options
author | Thomas Haller <thaller@redhat.com> | 2021-06-02 19:26:31 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-06-04 09:29:21 +0200 |
commit | a266bc15b284f0edaa354e3d10e6d610e709a5f0 (patch) | |
tree | b8a362969dc3baf53300c910d37be7535e045d6c | |
parent | 9a0f3f3e0979a7f65d9c4b015624de1d59b11c0f (diff) | |
download | NetworkManager-a266bc15b284f0edaa354e3d10e6d610e709a5f0.tar.gz |
glib-aux: add nm_strv_has_duplicate() helper
-rw-r--r-- | src/libnm-glib-aux/nm-shared-utils.c | 30 | ||||
-rw-r--r-- | src/libnm-glib-aux/nm-shared-utils.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 626956aefa..0cac64b5d1 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -2290,6 +2290,36 @@ nm_utils_strv_find_first(char **list, gssize len, const char *needle) return -1; } +gboolean +nm_strv_has_duplicate(const char *const *strv, gssize len, gboolean is_sorted) +{ + gsize l; + gsize i; + gsize j; + + l = len < 0 ? NM_PTRARRAY_LEN(strv) : (gsize) len; + + if (is_sorted) { +#if NM_MORE_ASSERTS > 10 + for (i = 1; i < l; i++) + nm_assert(nm_strcmp0(strv[i - 1], strv[i]) <= 0); +#endif + for (i = 1; i < l; i++) { + if (nm_streq0(strv[i - 1], strv[i])) + return TRUE; + } + } else { + for (i = 1; i < l; i++) { + for (j = 0; j < i; j++) { + if (nm_streq0(strv[j], strv[i])) + return TRUE; + } + } + } + + return FALSE; +} + char ** _nm_utils_strv_cleanup(char ** strv, gboolean strip_whitespace, diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 024b68d676..0299dd8dca 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -710,6 +710,8 @@ nm_utils_strsplit_set(const char *str, const char *delimiters) gssize nm_utils_strv_find_first(char **list, gssize len, const char *needle); +gboolean nm_strv_has_duplicate(const char *const *list, gssize len, gboolean is_sorted); + char **_nm_utils_strv_cleanup(char ** strv, gboolean strip_whitespace, gboolean skip_empty, |