summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-06-02 19:26:31 +0200
committerThomas Haller <thaller@redhat.com>2021-06-04 09:29:21 +0200
commita266bc15b284f0edaa354e3d10e6d610e709a5f0 (patch)
treeb8a362969dc3baf53300c910d37be7535e045d6c
parent9a0f3f3e0979a7f65d9c4b015624de1d59b11c0f (diff)
downloadNetworkManager-a266bc15b284f0edaa354e3d10e6d610e709a5f0.tar.gz
glib-aux: add nm_strv_has_duplicate() helper
-rw-r--r--src/libnm-glib-aux/nm-shared-utils.c30
-rw-r--r--src/libnm-glib-aux/nm-shared-utils.h2
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,