nmtst: add nmtst_find_all_indexes()
authorThomas Haller <thaller@redhat.com>
Tue, 22 Dec 2015 10:53:45 +0000 (11:53 +0100)
committerThomas Haller <thaller@redhat.com>
Fri, 25 Dec 2015 19:36:43 +0000 (20:36 +0100)
shared/nm-test-utils.h

index 27a8d16..31b24ea 100644 (file)
@@ -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) \