summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-12-22 11:53:45 +0100
committerThomas Haller <thaller@redhat.com>2015-12-25 20:36:43 +0100
commitc2bafa61537ba3699d94f87f20fd93b9484950b4 (patch)
treeab58ae2c11e67273de487fe18a9e764083b139ec
parent766f31507b02c4721bdbabdc79755ff23652d6c6 (diff)
downloadNetworkManager-c2bafa61537ba3699d94f87f20fd93b9484950b4.tar.gz
nmtst: add nmtst_find_all_indexes()
-rw-r--r--shared/nm-test-utils.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/shared/nm-test-utils.h b/shared/nm-test-utils.h
index 27a8d16422..31b24eac91 100644
--- a/shared/nm-test-utils.h
+++ b/shared/nm-test-utils.h
@@ -807,6 +807,49 @@ nmtst_reexec_sudo (void)
g_error (">> exec %s failed: %d - %s", __nmtst_internal.sudo_cmd, errsv, strerror (errsv));
}
+/*****************************************************************************/
+
+inline static gsize
+nmtst_find_all_indexes (gpointer *elements,
+ gsize n_elements,
+ gpointer *needles,
+ gsize n_needles,
+ gboolean (*equal_fcn) (gpointer element, gpointer needle, gpointer user_data),
+ gpointer user_data,
+ gssize *out_idx)
+{
+ gsize i, j, k;
+ gsize found = 0;
+
+ for (i = 0; i < n_needles; i++) {
+ gssize idx = -1;
+
+ for (j = 0; j < n_elements; j++) {
+
+ /* no duplicates */
+ for (k = 0; k < i; k++) {
+ if (out_idx[k] == j)
+ goto next;
+ }
+
+ if (equal_fcn (elements[j], needles[i], user_data)) {
+ idx = j;
+ break;
+ }
+next:
+ ;
+ }
+
+ out_idx[i] = idx;
+ if (idx >= 0)
+ found++;
+ }
+
+ return found;
+}
+
+/*****************************************************************************/
+
#define __define_nmtst_static(NUM,SIZE) \
inline static const char * \
nmtst_static_##SIZE##_##NUM (const char *str) \